使用 Go 从 Gmail API 解码消息正文

Posted

技术标签:

【中文标题】使用 Go 从 Gmail API 解码消息正文【英文标题】:Decoding the message body from the Gmail API using Go 【发布时间】:2016-06-01 07:32:01 【问题描述】:

我正在尝试使用 Go 中的 Gmail API 检索邮件的完整邮件正文。目前,当我这样做时,我只得到消息正文的前三个字符,即“

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

这是一个(删节的)代码 sn-p 说明我是如何尝试解决这个问题的:

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)

    
  

【问题讨论】:

不要忽略错误! @peterSO 这就是为什么我特别说这是删节的原因。我不在我的实际代码中。 【参考方案1】:

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

使用相同的base64 包,您应该使用:base64.URLEncoding.DecodeString 而不是 base64.StdEncoding.DecodeString.

要从标准 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?)。

【讨论】:

我在发布前至少阅读了第一个链接 5 次,然后在看到您的帖子后立即意识到我的问题。它实际上并没有替换那些问题。它使用 base64.StdEncoding 而不是 base64.URLEncoding。感谢您为我指明方向。

以上是关于使用 Go 从 Gmail API 解码消息正文的主要内容,如果未能解决你的问题,请参考以下文章

Gmail API 在 Javascript 中解码消息

使用 Powershell 从 GMAIL API 获取消息正文

在java中使用对象com.google.api.services.gmail.model.Message读取gmail消息正文?

使用 Gmail API 在 html 中检索电子邮件/消息正文

使用 Python 进行 base64 解码,并使用基于 REST 的 Gmail API 下载附件

Gmail API - 使用 Javascript 解析邮件内容(Base64 解码?)