我从哪里获得授权的Gmail API服务实例?(python,gmail api)

sem*_*lex 7 python api gmail

我正在尝试从我的gmail api代码中调用,以便我可以创建草稿,但我无法弄清楚从哪里获得"授权的Gmail API服务实例".这是我的代码:

def CreateDraft(service, user_id, message_body):
  CreateDraft('SERVICE THING NEEDS TO BE HERE','me','thisisbody')
  """Create and insert a draft email. Print the returned draft's message and id.

  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_body: The body of the email message, including headers.

  Returns:
    Draft object, including draft id and message meta data.
  """
  try:
    message = {'message': message_body}
    draft = service.users().drafts().create(userId=user_id, body=message).execute()

    print 'Draft id: %s\nDraft message: %s' % (draft['id'], draft['message'])

    return draft
  except errors.HttpError, error:
    print 'An error occurred: %s' % error
    return None
Run Code Online (Sandbox Code Playgroud)

有谁知道找到授权Gmail API服务实例的位置?我有一个客户端ID和秘密,但这与此无关?

sem*_*lex 5

所以我想通了。我做了以下事情:

1) 将范围更改为:

SCOPES = 'https://mail.google.com/' 
Run Code Online (Sandbox Code Playgroud)

2) 在您的计算机 (Windows 7) 上转到“C:\Users\YOURUSERNAME\.credentials

3)删除文件“gmail-quickstart”

4)再次运行代码(quickstart.py)

5) 当浏览器中弹出消息时,单击“接受”。

6) 检查邮件,如果您想通过 api 发送电子邮件,您应该在其中包含您的消息。

凭据文件似乎拥有权限。更改权限然后删除该文件似乎可以使一切完美运行。因此,如果您希望通过 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://mail.google.com/'
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

import base64
from email.mime.audio import MIMEAudio
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import mimetypes
from httplib2 import Http

from apiclient import errors

from apiclient.discovery import build
credentials = get_credentials()
service = build('gmail', 'v1', http=credentials.authorize(Http()))

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


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 base64 encoded email object.
  """
  message = MIMEText(message_text)
  message['to'] = to
  message['from'] = sender
  message['subject'] = subject
  return {'raw': base64.b64encode(message.as_string())}

testMessage = CreateMessage('EMAIL ADDRESS', 'EMAIL ADDRESS', 'subject', 'YOUR MESSAGE')

testSend = SendMessage(service, 'me', testMessage)
Run Code Online (Sandbox Code Playgroud)