使用Go从Gmail API解码邮件正文

时间:2016-02-19 16:32:47

标签: go gmail gmail-api

我正在尝试使用Go中的Gmail API检索邮件的完整邮件正文。目前,当我这样做时,我只获得消息体的前三个字符“< ht”。我很确定我的问题在于消息体的解码,但我似乎无法弄清楚我做错了什么。

我查看了其他几种语言的示例,并尝试将它们转换为Go但没有成功。编码的消息体相当大,所以我相当肯定某些数据在某处丢失了。

这是一个(简略的)代码段,说明了我一直试图解决这个问题:

req := svc.Users.Messages.List("me").Q("from:someone@somedomain.com,label:inbox")

r, _ := req.Do()

for _, m := range r.Messages {

  msg, _ := svc.Users.Messages.Get("me", m.Id).Format("full").Do()

  for _, part := range msg.Payload.Parts {

    if part.MimeType == "text/html" {

      data, _ := base64.StdEncoding.DecodeString(part.Body.Data)
      html := string(data)
      fmt.Println(html)

    }
  }
}

1 个答案:

答案 0 :(得分:3)

需要使用Base64 URL 编码(与标准Base64编码略有不同的字母)。

要从标准Base64获取URL Base64,请替换:

+ to - (char 62, plus to dash)
/ to _ (char 63, slash to underscore)
= to * padding

来自正文字符串(来源:Base64 decoding of MIME email not working (GMail API)和此处:How to send a message successfully using the new Gmail REST API?)。