2016-07-28 7 views
5

Ich möchte eine E-Mail über Python mit der Gmail-API senden. Everythingshould in Ordnung sein, aber ich habe immer noch die Fehlermeldung „Ein Fehler ist aufgetreten: b'Q29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKTUlNRS ...“ Dies ist mein Code:Python Gmail API 'nicht JSON serializable'

import base64 
import httplib2 

from email.mime.text import MIMEText 

from apiclient.discovery import build 
from oauth2client.client import flow_from_clientsecrets 
from oauth2client.file import Storage 
from oauth2client.tools import run_flow 


# Path to the client_secret.json file downloaded from the Developer Console 
CLIENT_SECRET_FILE = 'client_secret.json' 

# Check https://developers.google.com/gmail/api/auth/scopes for all available scopes 
OAUTH_SCOPE = 'https://www.googleapis.com/auth/gmail.compose' 

# Location of the credentials storage file 
STORAGE = Storage('gmail.storage') 

# Start the OAuth flow to retrieve credentials 
flow = flow_from_clientsecrets(CLIENT_SECRET_FILE, scope=OAUTH_SCOPE) 
http = httplib2.Http() 

# Try to retrieve credentials from storage or run the flow to generate them 
credentials = STORAGE.get() 
if credentials is None or credentials.invalid: 
    credentials = run_flow(flow, STORAGE, http=http) 

# Authorize the httplib2.Http object with our credentials 
http = credentials.authorize(http) 

# Build the Gmail service from discovery 
gmail_service = build('gmail', 'v1', http=http) 

# create a message to send 
message = MIMEText("Message") 
message['to'] = "[email protected]" 
message['from'] = "[email protected]" 
message['subject'] = "Subject" 
body = {'raw': base64.b64encode(message.as_bytes())} 

# send it 
try: 
    message = (gmail_service.users().messages().send(userId="me",  body=body).execute()) 
    print('Message Id: %s' % message['id']) 
    print(message) 
except Exception as error: 
    print('An error occurred: %s' % error) 
+0

* der Fehler wird „fhkakjfwjkfbmdn ... ist nicht JSON serializable – Stormbreaker

Antwort

4

ich das gleiche Problem hatte, ich nehme an, Sie Python3 verwenden, fand ich diese auf eine andere Stelle und der Vorschlag war folgendes zu tun:

raw = base64.urlsafe_b64encode(message.as_bytes()) 
raw = raw.decode() 
body = {'raw': raw} 

Check out: https://github.com/google/google-api-python-client/issues/93

+0

Dies hat das Problem nicht beheben für mich – derchambers

+0

Das funktionierte für mich – Joe

+0

Arbeitete auch für mich –