2016-07-28 31 views
5

Tôi muốn gửi Email qua Python bằng API Gmail. Everythingshould là tốt, nhưng tôi vẫn nhận được lỗi "Một lỗi đã xảy ra: b'Q29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKTUlNRS ..." Đây là mã của tôi:API Gmail Python 'không JSON có thể tuần tự hóa'

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

* các lỗi được "fhkakjfwjkfbmdn ... không JSON serializable – Stormbreaker

Trả lời

4

Tôi có vấn đề này cùng, tôi giả sử bạn đang sử dụng Python3 Tôi thấy điều này trên một bài và gợi ý là phải làm như sau:

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

này không giải quyết được vấn đề này cho tôi – derchambers

+0

Điều này cũng hiệu quả đối với tôi – Joe

+0

Làm việc cho tôi –

Các vấn đề liên quan