2016-07-27 137 views
1

最近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://stackoverflow.com/questions/24908700/mail-attachment-wrong-media-type-gmail-api/24957873#24957873),我不得不去在官方客戶端庫之外(請參閱答案末尾的編輯)。簡而言之:不要對郵件進行編碼,而是使用Content-Type「message/rfc822」的簡單上傳URL。 – Tholle

+0

關於能夠從Python中執行URL格式的想法嗎? – AaronF

回答

0

我有同樣的問題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