2016-07-27 11 views
1

Kürzlich deaktiviert Google ihre "Legacy" Upload-Fähigkeit, so dass ich gezwungen war, unsere Anwendungen zu ändern, um die Google-Nutzer(). Nachrichten() zu verwenden.Senden Sie große E-Mail über Gmail API in Python

Allerdings funktioniert es auf nichts über 5 MB. Ich habe einen Beitrag im Internet gesehen, wie man es in PHP macht, aber nichts in Python.

Hier ist meine vorhandenen Code:

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()) 

Google umfangreiche Dokumentation hat, aber nicht auf die spezifische Fähigkeit, große E-Mails in Python zu senden. In der Tat auf dieser Seite:

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

Sie sprechen den Basis-API über die Verwendung von Nachrichten so groß wie 35 MB zu senden, aber das einfach nicht funktioniert. Ich erhalte einen "ResponseNotReady()" Fehler.

Ich habe über Chunked-Uploads, fortsetzbare Uploads gelesen, aber nichts ist zum Tragen gekommen.

Irgendwelche Gedanken da draußen?

+0

Ich hatte das gleiche Problem [vor zwei Jahren] (http://stackoverflow.com/questions/24908700/mail-attachment-wrong-media-type-gmail-api/24957873#24957873), und ich musste gehen außerhalb der offiziellen Client-Bibliothek (siehe Bearbeiten am Ende der Antwort). Kurz gesagt: Kodiere die Nachricht nicht und benutze stattdessen die einfache Upload-URL mit dem Content-Type 'message/rfc822'. – Tholle

+0

Gibt es Überlegungen, das URL-Format von Python aus zu erstellen? – AaronF

Antwort

0

Ich hatte das gleiche Problem two years ago, und ich denke immer noch, die einzige Möglichkeit, Nachrichten mit großen Anlagen zu senden, ist die offizielle Client-Bibliothek zu umgehen.

Dies ist ein Beispiel für die requests Bibliothek statt:

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) 

Die Nachricht wird nicht verschlüsselt. Ich denke, Sie können das Access-Token aus dem Service-Objekt extrahieren, aber ich bin mir nicht sicher, wie genau.

+0

Können Sie sich eine Übersetzung aus der Anforderungsbibliothek in das native HTTPSConnection-Objekt vorstellen? Ich hasse es, eine andere Bibliothek zu installieren ... es ist nur eine weitere Bibliothek, die ich verwalten kann, obwohl ich davon überzeugt bin, dass es Vorteile bringt. – AaronF

+0

@AaronF Normalerweise mache ich dumme Fehler mit einer niedrigeren Bibliothek, also glaube ich nicht, dass ich helfen würde, fürchte ich. – Tholle

+0

Hah, ich weiß was du meinst. Trotzdem danke :) – AaronF

Verwandte Themen