我对RESTful API和处理MIME内容都是新手。我正在尝试编写一个应用程序,从Gmail邮箱中检索消息,以便进一步处理。
我使用Google Developers API reference作为工具来熟悉API。使用以下GMail API参考中的“尝试一下”特性
https://developers.google.com/gmail/api/v1/reference/users/messages/get
我检索到一个简单的测试消息,它只有两行文本。第一行包含简单的ASCII,而第二行包含一些Unicode文本。
This the first line of body text in English only
This is second line, 中文睇到嗎 , could you see those Chinese
"parts": [
{
"partId": "0",
"mimeType": "text/plain",
"filename": "",
"headers": [
{
"name": "Content-Type",
"value": "text/plain; charset=UTF-8"
},
{
"name": "Content-Transfer-Encoding",
"value": "quoted-printable"
}
],
"body": {
"size": 120,
"data": "VGhpcyB0aGUgZmlyc3QgbGluZSBvZiBib2R5IHRleHQgaW4gRW5nbGlzaCBvbmx5DQoNClRoaXMgaXMgc2Vjb25kIGxpbmUsIOS4reaWh-edh-WIsOWXjiAsIGNvdWxkIHlvdSBzZWUgdGhvc2UgQ2hpbmVzZQ0K"
}
},
{
"partId": "1",
"mimeType": "text/html",
"filename": "",
"headers": [
{
"name": "Content-Type",
"value": "text/html; charset=UTF-8"
},
{
"name": "Content-Transfer-Encoding",
"value": "quoted-printable"
}
],
"body": {
"size": 354,
"data": "PGRpdiBkaXI9Imx0ciI-PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFtaWx5OnRhaG9tYSxzYW5zLXNlcmlmIj5UaGlzIHRoZSBmaXJzdCBsaW5lIG9mIGJvZHkgdGV4dCBpbiBFbmdsaXNoIG9ubHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6dGFob21hLHNhbnMtc2VyaWYiPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6dGFob21hLHNhbnMtc2VyaWYiPlRoaXMgaXMgc2Vjb25kIGxpbmUsIOS4reaWh-edh-WIsOWXjiAsIGNvdWxkIHlvdSBzZWUgdGhvc2UgQ2hpbmVzZTwvZGl2PjwvZGl2Pg0K"
}
}
]
如您所见,虽然“content-transfer-encoding”被指定为“quoted-printable”,但返回的实际数据是base64url编码。
当我使用测试脚本通过GMail RESTful API检索消息时,我得到了相同的64BaseUrl编码响应。
编辑:基于@ericdefriez的评论
如果base64url解码“data”字段
"VGhpcyB0aGUgZmlyc3QgbGluZSBvZiBib2R5IHRleHQgaW4gRW5nbGlzaCBvbmx5DQoNClRoaXMgaXMgc2Vjb25kIGxpbmUsIOS4reaWh-edh-WIsOWXjiAsIGNvdWxkIHlvdSBzZWUgdGhvc2UgQ2hpbmVzZQ0K"
结果似乎已经是原始的utf8编码文本:
This the first line of body text in English only
This is second line, 中文睇到嗎 , could you see those Chinese
This the first line of body text in English only
This is second line, =E4=B8=AD=E6=96=87=E7=9D=87=E5=88=B0=E5=97=8E , could =
you see those Chinese
JSON响应中的'quotered-printable'CTE头似乎不正确。无论CTE头中指定了什么,数据字段始终是base64url编码的。
“data”字段对于在JSON上本地传输不一定是安全的,所以它始终是base64url编码的。一旦你base64url解码“data”,它应该匹配CTE头。
我有一些Java代码,它发送一封电子邮件,代码类似如下:实际上,我从Httprequest param获得了Mimemessage,在该Mimemessage中,我将在现有的主体中附加一些内容。 如果消息是text/plain和text/html content-type,我设置的content-transfer编码就不适用于body。 基于此文档 问:尽管JavaMail为我完成了所有的编码和解
我使用javax邮件api在imap服务器上读取消息。我检查消息内容传输编码,因为如果有必要,我会进行mime解码。 最近,我遇到了一个问题:我的代码在消息上找不到任何内容传输编码。这怎么可能?
我正在开发一个可以阅读的电子邮件查看器。eml文件并在浏览器控件中显示消息。我找到了代码片段,它可以显示7位和引用的可打印消息(内容传输编码:引用的可打印/内容传输编码:base64)。我需要的是解码8位消息。 我在谷歌上搜索了一个8位解码器,但找不到。我真的需要一个8位解码器吗?你知道一个好的解码器吗? 更新: 相关标题: 我的代码中的正文消息(字符串行): Outlook在现实世界中显示的内容
目前,该电子邮件显示了有关MimeBodyPart的以下标题: 标题部分应显示以下内容: 下面是我如何尝试强制引用可打印的内容: 如何强制内容传输编码可引用打印?我正在连接我的gmail邮件服务器idk,如果这有什么区别的话。也许这个标题会被谷歌覆盖。
我试图模仿我的浏览器行为在一个多部分/表单数据POST请求使用org.apache.http.entity.mime.MultipartEntityBuilder 我的浏览器只发送内容配置,但不发送内容类型或内容传输编码头。我尝试使用MultipartEntityBuilder。addPart()和addTextBody()但默认情况下都会添加这些标题: 我想要什么(我的chrome浏览器的功能)
问题内容: 该代码是否有效的HTTP / 1.1? 我认为我在这里违反HTTP / 1.1?文本文件似乎确实可以正常工作,但这可能是偶然的。我的标题是“ 200 OK”还是需要为“ 100”?一个头足够吗? 问题答案: 如果要进行分块传输编码,则实际上需要设置该标头: 您可以从google返回的标头中看到该标头,该标头会对主页以及最可能的其他页面进行分块传输: 编辑 Yikes,读起来太复杂了: