在Python中通过Gmail API发送大型电子邮件

问题描述:

最近Google禁用了其“传统”上传功能,因此我不得不更改我们的应用程序以使用Google用户()。messages()。send api。在Python中通过Gmail API发送大型电子邮件

然而,它不适用于超过5MB的任何东西。我在www上看到过一篇关于如何在PHP中完成的文章,但在Python中没有。

这里是我现有的代码:

http  = #My login routine 
service  = build('gmail','v1',http=http) 
email  = {'raw':base64.urlsafe_b64encode(message)} 
reply  = (service.users().messages().send(userId=user,body=email).execute()) 

谷歌有大量的文档,但不能发送电子邮件,大型Python中的具体能力。事实上,在此页:

https://developers.google.com/gmail/api/v1/reference/users/messages/send

他们谈论使用基本的API,以大发送消息为35MB,但根本不起作用。我收到“ResponseNotReady()”错误。

我一直在阅读关于分块上传,可恢复上传,但没有任何成果。

有什么想法吗?

+0

我有同样的问题[两年前](http://*.com/questions/24908700/mail-attachment-wrong-media-type-gmail-api/24957873#24957873),我不得不去在官方客户端库之外(请参阅答案末尾的编辑)。简而言之:不要对邮件进行编码,而是使用Content-Type“message/rfc822”的简单上传URL。 – Tholle

+0

关于能够从Python中执行URL格式的想法吗? – AaronF

我有同样的问题two years ago,我仍然认为用大附件发送消息的唯一方法是绕过官方客户端库。

这是使用requests库,而不是一个例子:

url = 'https://www.googleapis.com/gmail/v1/users/me/messages/send?uploadType=multipart' 
headers = { 
    'Authorization': 'Bearer ' + accessToken, 
    'Content-Type': 'message/rfc822' 
} 
requests.post(url, headers=headers, payload=message) 

该消息不被编码。我认为你可以从服务对象中提取访问令牌,但我不确定如何。

+0

您可以考虑从请求库到本机HTTPSConnection对象的翻译吗?我不喜欢安装另一个库......这只是另一个库,但我确实看到它的好处。 – AaronF

+0

@AaronF我通常会使用较低级别的请求库来做出愚蠢的错误,所以我认为我不会有任何帮助。 – Tholle

+0

哈,我知道你的意思。不管怎么说,多谢拉 :) – AaronF