使用 Google 组迁移时获得 500 "Backend Error" API

Getting 500 "Backend Error" when using Google Groups Migration API

我正在尝试在 Python 中编写一个应用程序,以允许用户将他们的 LISTSERV 存档迁移到我们域的 Google 组。尝试调用 archive.insert (https://developers.google.com/admin-sdk/groups-migration/v1/reference/archive/insert) 时,我收到 HttpError 500 "Backend Error".

我正在这样阅读档案:

import mailbox
mailbox.mbox('path/to/archive')

在 mbox 对象中循环访问生成的消息时,调用 .as_string() 函数会产生如下结果:

Date: Mon, 10 Feb 2014 10:58:41 -0600
Reply-To: Bob's test list <BOB@LISTSERV.DOMAIN.COM>,
 Bob Boberson <bob@EXCHANGE.DOMAIN.COM>
Sender: Bob's test list <BOB@LISTSERV.DOMAIN.COM>
From: Bob Boberson <bob@EXCHANGE.DOMAIN.COM>
Subject: blah blah blah
Mime-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="UTF-8"
Message-ID: <6949565692507828.WA.bobexchange.domain.com@listserv.domain.com>


Test message.

这里的一些问题提到通过确保 Message-ID 的格式正确来避免后端错误。但是,此特定消息的 message['Message-ID'] 结果为 <6949565692507828.WA.bobexchange.domain.com@listserv.domain.com>,所以我不确定 Message-ID 是这里的问题。

我正在尝试像这样调用插入:

stream = StringIO.StringIO()
stream.write(msg.as_string())
media = apiclient.http.MediaIoBaseUpload(stream, mimetype='message/rfc822')
result = migration_api.archive().insert(groupId=group_email, media_body=media).execute()

有什么想法吗?提前致谢:)

更新

根据 Jay 在评论中的建议,我设置了 httplib2.debuglevel = 1。这是我尝试迁移同一封电子邮件的日志中的结果:

send: 'POST /upload/groups/v1/groups/group-name%40lists.domain.com/archive?uploadType=media&alt=json HTTP/1.1\r\nHost: www.googleapis.com\r\ncontent-length: 711\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\nuser-agent: google-api-python-client/1.4.0 (gzip)\r\ncontent-type: message/rfc822\r\nauthorization: Bearer *******\r\n\r\nDate: Mon, 10 Feb 2014 10:58:41 -0600\nReply-To: Bob\'s test list <GROUP-NAME@LISTSERV.DOMAIN.COM>,\n Bob Boberson <bob@EXCHANGE.DOMAIN.COM>\nSender: Bob\'s test list <bob@LISTSERV.DOMAIN.COM>\nFrom: Bob Boberson <bob@EXCHANGE.DOMAIN.COM>\nSubject: blah blah blah\nMime-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\nContent-Type: text/plain; charset="UTF-8"\nMessage-ID: <6949565692507828.WA.bobexchange.domain.com@listserv.domain.com>\n\n\nTest message.'

reply: 'HTTP/1.1 500 Internal Server Error\r\n'

header: X-GUploader-UploadID: *****
header: Vary: Origin
header: Vary: X-Origin
header: Content-Type: application/json; charset=UTF-8
header: Content-Length: 177
header: Date: Wed, 23 Mar 2016 21:10:20 GMT
header: Server: UploadServer
header: Alternate-Protocol: 443:quic,p=1
header: Alt-Svc: quic=":443"; ma=2592000; v="31,30,29,28,27,26,25"

更新(含解决方案)

事实证明这是一个权限问题:在进行全域服务帐户路由时,一定要模拟拥有该组的用户。 FWIW,恕我直言,Groups Migration API 的错误消息需要更明确地说明问题所在。 "Backend Error" 非常通用。弄清楚这一点就像用棍子戳问题直到它起作用。

事实证明这是一个权限问题:在进行全域服务帐户路由时,一定要模拟拥有该组的用户。 FWIW,恕我直言,Groups Migration API 的错误消息需要更明确地说明问题所在。 "Backend Error" 非常通用。弄清楚这一点就像用棍子戳问题直到它起作用。