2016-01-20 51 views
2

我想从golang中的邮件中获取附件。问题是从Gmail中读取的base64有效载荷给我的错误在GMail API中获取附件

illegal base64 data at input byte 13 

这里是我的代码(处理省略ERR) ..

attach, _ := srv.Users.Messages.Attachments.Get(user, messageid, attachmentid).Do() 
decoded, err := base64.StdEncoding.DecodeString(attach.Data) 

这将引发提到的错误,如果我看GMail中的原始消息可以看到头后,这样的:

begin 644 filename-of-the-attachment.extension 
M'XL(`/Y;GU8``^S]R[(>R9&E"\[[*5)JVI*6;N9WS(_TD3/J0<U:>H`*;F9"... 

任何帮助表示赞赏 感谢

+0

哪去包您使用的连接连接到Gmail来处理? – booyaa

+0

“google.golang.org/api/gmail/v1” –

+0

您可能希望将get参数'format'设置为'raw',以便获得base64:https://developers.google.com/gmail/api/v1/reference/users/messages /让它看起来像在调用Do之前需要使用的方法。 https://github.com/google/google-api-go-client/blob/master/gmail/v1/gmail-gen.go#L3393 – booyaa

回答

2

问题出在base64编码中:正如文档所说,有效负载(无论是“完整”还是“原始”模式)都是base64URL编码,而不是base64。 因此,此代码的工作:

attach, _ := srv.Users.Messages.Attachments.Get(user, messageid, attachmentid).Do() 
decoded, err := base64.URLEncoding.DecodeString(attach.Data) 
fileout, err := os.OpenFile(... 

这么说,我看到了全模式(默认)是比较容易 :)

+0

你应该接受这个答案 – Gabu