似乎无法通过Google API(Python)发送电子邮件

时间:2015-08-20 10:50:38

标签: python email gmail-api

我已浏览过官方文档,但我似乎无法通过Google API发送电子邮件:

import httplib2
import os


from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools

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

SCOPES = 'https://www.googleapis.com/auth/gmail.readonly'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Gmail API Quickstart'


def get_credentials():
    """Gets valid user credentials from storage.

    If nothing has been stored, or if the stored credentials are invalid,
    the OAuth2 flow is completed to obtain the new credentials.

    Returns:
        Credentials, the obtained credential.
    """
    home_dir = os.path.expanduser('~')
    credential_dir = os.path.join(home_dir, '.credentials')
    if not os.path.exists(credential_dir):
        os.makedirs(credential_dir)
    credential_path = os.path.join(credential_dir,
                                   'gmail-quickstart.json')

    store = oauth2client.file.Storage(credential_path)
    credentials = store.get()
    if not credentials or credentials.invalid:
        flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
        flow.user_agent = APPLICATION_NAME
        if flags:
            credentials = tools.run_flow(flow, store, flags)
        else: # Needed only for compatability with Python 2.6
            credentials = tools.run(flow, store)
        print 'Storing credentials to ' + credential_path
    return credentials


def CreateMessage(sender, to, subject, message_text):
  """Create a message for an email.

  Args:
    sender: Email address of the sender.
    to: Email address of the receiver.
    subject: The subject of the email message.
    message_text: The text of the email message.

  Returns:
    An object containing a base64url encoded email object.
  """
  message = MIMEText(message_text)
  message['to'] = 'ENTER RECIPIENTS EMAIL ADDRESS HERE'
  message['from'] = 'ENTTER YOUR EMAIL ADDRESS HERE'
  message['subject'] = 'ENTER SUBJECT'
  return {'raw': base64.urlsafe_b64encode(message.as_string())}


def SendMessage(service, user_id, message):
  """Send an email message.

  Args:
    service: Authorized Gmail API service instance.
    user_id: User's email address. The special value "me"
    can be used to indicate the authenticated user.
    message: Message to be sent.

  Returns:
    Sent Message.
  """
  try:
    message = (service.users().messages().send(userId=user_id, body=message)
               .execute())
    print 'Message Id: %s' % message['id']
    return message
  except errors.HttpError, error:
    print 'An error occurred: %s' % error

我没有任何错误或任何错误。从查看python,它似乎已被执行。但是,当我在帐户中查看测试电子邮件时,没有一个。有谁知道我哪里出错了?

1 个答案:

答案 0 :(得分:2)

正如评论中指出的那样,您不会调用您定义的任何函数。例如,

CreateMessage("youremail@gmail.com","someone@gmail.com","Testing","Hello World")

我也可能会替换

message['to'] = 'ENTER RECIPIENTS EMAIL ADDRESS HERE'
message['from'] = 'ENTTER YOUR EMAIL ADDRESS HERE'
message['subject'] = 'ENTER SUBJECT'

使用

message['to'] = to
message['from'] = sender
message['subject'] = subject

否则这些参数没有被使用......

您还可以定义' main'

def main():
    message = CreateMessage("youremail@gmail.com","someone@gmail.com","Testing","Hello World")
    # Do something with the message
if __name__ == "__main__":
    main()