Gmail返回base64编码,但列为可打印的报价

时间:2019-05-11 05:31:43

标签: gmail-api

当我调用Gmail API时,我得到以下信息(由于主体很重,显然只是摘录:

{
  ...
  payload: {
    ...
    parts: [
      {
        "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": 4696,
             "data": "PCFET0NUWVBFIGh0bWw-PGh0bWwgbGFuZz1lbj48....

我刚刚包括了相关部分。您将看到html正文部分的电子邮件编码为base64Url,但是内容传输编码清楚地表明quoted-printable。我通过base64url解码器运行它,它提供了正确的数据。但是标头明确指出它是带引号的可打印

我想念什么?

简单的身体部分是这个,看起来很正确。

"headers": [
 ...
{
 "name": "Content-Transfer-Encoding",
 "value": "base64"
}   ],
"body": {
 "size": 601,
 "data": "R29vZ2xlIEFQSXMgRXhwbG9yZXIgd2FzIGdyYW5

1 个答案:

答案 0 :(得分:1)

当您请求Message resource时,Gmail API可以采用可通过查询字符串(see documentation)设置的四种格式之一传递消息数据。

以下是每种格式选项的说明,摘自官方文档:

  
      
  • 完整”:返回具有在有效载荷字段中分析的正文内容的完整电子邮件数据; 原始字段未使用。   (默认)
  •   
  • 元数据”:仅返回电子邮件ID,标签和电子邮件标题。
  •   
  • 最小”:仅返回电子邮件ID和标签;不返回电子邮件标题,正文或有效载荷。
  •   
  • 原始”:返回原始字段中包含正文内容的完整电子邮件消息数据,作为base64url编码的字符串;有效负载字段是   不使用。
  •   

完整”是默认选项,其中,正文内容被解析并自动以base64编码的字符串存储在data属性中。

请记住,提供Message资源对象是为了方便与RFC5322有效负载进行交互,并且无论base64上的值如何,它总是在Content-Transfer-Encoding中提供其数据有效负载标头。

如果要处理原始IMF(Internet Message Format - RFC5322)文本,请在查询字符串中将格式设置为“ 原始”。您必须对原始字符串进行base64解码才能获得IMF数据。它的外观将完全符合您的期望,但是您必须编写自己的解析器来管理其内容。