首页 > 解决方案 > 将消息添加到 gmail 错误“有效负载部件计数与预期不同”

问题描述

我正在使用此(示例)URL 向 gmail 文件夹添加一条消息:

https://www.googleapis.com/gmail/v1/users/user@domain.com/messages/import?uploadType=multipart

请求的正文如下所示:

--test_abc123
Content-Type: application/json; charset=UTF-8

{
 "labelIds": [ "Label_525" ],
 "raw": "RnJvbTogIlNlY3RpZ28gQ2VydGlmaWNh..."
}

--test_abc123--

原始数据是 base64 编码的标准 MIME 消息,对我来说看起来很正常。此 POST 的结果是 http 错误 400,错误响应为“有效负载部分计数不同于预期 2。请求有效负载部分计数:1”。

如果有帮助,我可以提供原始 MIME 文本,但我要强调的是,我已经运行此代码几年没有问题。我尝试了不同的消息来测试这一点,但似乎谷歌已经改变了一些东西来破坏我的软件。

谷歌是反对我的原始数据,还是反对 MIME 编码?任何想法可能是什么问题?

---- 附录---- 我收到了几条消息,它们似乎都有图像或数据附件。但是,我真的没有看到失败的消息有任何问题 - 我可以将它们导入 Office 365 或 Thunderbird 或其他任何东西,它们呈现得很好。作为测试,我尝试导入以下消息,该消息取自 MIME RFC。它失败并出现相同的错误。我认为谷歌已经改变了一些东西,使他们的 MIME 解析器非常繁琐,但我不知道如何修复我的输入数据。

From: Nathaniel Borenstein <nsb@bellcore.com>
To:  Ned Freed <ned@innosoft.com>
Subject: Sample message
MIME-Version: 1.0
Content-type: multipart/mixed; boundary="simple boundary"

This is the preamble.  It is to be ignored, though it
is a handy place for mail composers to include an
explanatory note to non-MIME compliant readers.
--simple boundary

This is implicitly typed plain ASCII text.
It does NOT end with a linebreak.
--simple boundary
Content-type: text/plain; charset=us-ascii

This is explicitly typed plain ASCII text.
It DOES end with a linebreak.

--simple boundary--
This is the epilogue.  It is also to be ignored.

附录 2:我尝试了一个简单的上传(使用内容类型标头消息/rfc822)并且它有效,除了消息没有标记。如何指定要应用于消息的标签?我最初试图遵循此处的文档 链接 ,该链接告诉我创建上面给出的 json 正文。这允许我指定标签。但我似乎无法在简单的上传中使用这个身体。内容类型无效,或者 Gmail 导入的只是 json 正文,它不会解析出原始数据。如果您能指出一个显示 URI、消息正文、http 标头(不是 java 代码)的特定示例,这对我来说非常有用。

标签: gmailgmail-api

解决方案


好吧,没关系,我通过在多部分上传的正文中添加一个空的消息/rfc822 部分来让它工作。这让 Google 很满意,并且忽略了空白部分以支持原始数据。


推荐阅读