gmail - 将消息添加到 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 代码)的特定示例,这对我来说非常有用。
解决方案
好吧,没关系,我通过在多部分上传的正文中添加一个空的消息/rfc822 部分来让它工作。这让 Google 很满意,并且忽略了空白部分以支持原始数据。
推荐阅读
- python - 返回特定日期的工作日数(Python)
- android - RecyclerView.ViewHolder中的Android ScrollView:防止ItemTouchHelper获取触摸事件?
- amazon-web-services - 在 Amazon QuickSight 中使用来自不同数据源的数据绘制趋势图
- python - 即使我只想要最新版本,我的函数也会不断返回我的变量的旧版本
- sql-server - 如何按主键将元数据附加到分组选择
- c++ - pthread_cond_timedwait 与 monolic 计时器有时超时比预期晚
- r - R-caret - 如何持久化模型
- laravel - Laravel hasOne 只获取一个字段而不是对象
- java - 如何将 2017-08-01T16:00:00-04:00 转换为 Java 中的时间戳?
- javascript - 在 SAS 中使用 JavaScript + D3 3.x 代码创建 HTML 输出