close

被 "在 Python 使用 Gmail API 發信 " 這個動作困擾了2天

結論:有三個步驟

1. 參考QuickStart 頁面 https://developers.google.com/gmail/api/quickstart/python ,先按下 "ENABLE GMAIL API" 以申請 project 的證書 (credentials) 的 json

2. 使用步驟 1 的 credentials ,利用上述 google QuickStart  頁面的程式得到某個帳號的使用權的 token.json

  這裡要注意的是 SCOPES = 'https://www.googleapis.com/auth/gmail.readonly' 要換成 'https://mail.google.com/' ,因為權限不一樣,不然信會寄不出去。 請參考 https://stackoverflow.com/questions/32143126/how-do-i-get-around-httperror-403-insufficient-permission-gmail-api-python

3. 使用上述 token.json 寄信,寄信程式可簡化如下,當然要修改 xxx@gmail.com 的 xxx 與步驟 2 申請時的一樣 

import httplib2
from apiclient import discovery, errors
import oauth2client
from oauth2client import tools

import base64
from email.mime.text import MIMEText

try:
    import argparse
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
    flags = None

def SendMessage(service, user_id, message): # Send an email message.
    try:
      message = (service.users().messages().send(userId=user_id, body=message)
               .execute())
      print ('Message Id: %s' % message['id'])
      return message
    except errors.HttpError as error:
      print ('An error occurred: %s' % error)

def create_message(sender, to, subject, message_text): # Create a message for an email.
    message = MIMEText(message_text)
    message['to'] = to
    message['from'] = sender
    message['subject'] = subject
    raw = base64.urlsafe_b64encode(bytes(str(message), "utf-8"))
    return {'raw': raw.decode()}

def main( sender, recepient, subject, text_body ):
    store = oauth2client.file.Storage('token.json')
    credentials = store.get()
    http = credentials.authorize(httplib2.Http())
    service = discovery.build('gmail', 'v1', http=http)
    testMessage = create_message( sender, recepient, subject, text_body )
    SendMessage( service, sender, testMessage )

if __name__ == '__main__':
    main( 'xxx@gmail.com', 'xxx@gmail.com', 'Test mail subject', 'Test mail body' )

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Webb99 的頭像
    Webb99

    Webb99的部落格

    Webb99 發表在 痞客邦 留言(0) 人氣()