使用 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 解码消息正文的主要内容,如果未能解决你的问题,请参考以下文章
使用 Powershell 从 GMAIL API 获取消息正文
在java中使用对象com.google.api.services.gmail.model.Message读取gmail消息正文?
使用 Gmail API 在 html 中检索电子邮件/消息正文