如何在gmailapi中切换到不同的授权帐户?

2024-04-19 18:39:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个小python脚本来自动化我公司的工作流。到目前为止,我一直在按收件箱测试代码,因为我不想弄乱这个脚本将要处理的实际帐户收件箱中的任何东西。其余的代码都是编写的,在测试之后,我想切换到另一个帐户。所以我登录到新帐户,在控制台中创建了一个新项目,生成了项目唯一的客户机密钥文件,然后我用新的客户机密钥文件交换了旧客户机密钥文件,并将项目名称更新为与新帐户链接的文件名。然而,在运行脚本时,我意识到脚本仍在与我的帐户链接的情况下运行。我真的不知道还有什么我需要替换,或者我只是缺少了什么?在

以下是我针对这个问题的代码的相关部分:

import...

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


requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

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-python-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 GetMessage(service, user_id, msg_id, fmt, flds ,mdh):
  """Get a Message with given 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.
    msg_id: The ID of the Message required.
  Returns:
    A Message.
  """
  try:
    message = service.users().messages().get(userId=user_id, id=msg_id, format=fmt,fields=flds ,metadataHeaders=mdh).execute()

    #print ('Message snippet: %s' % message['snippet'])

    return message
  except errors.HttpError, error:
    print ('An error occurred: %s' % error)
def GetMimeMessage(service, user_id, msg_id):
  """Get a Message and use it to create a MIME 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.
    msg_id: The ID of the Message required.

  Returns:
    A MIME Message, consisting of data from Message.
  """
  try:
    message = service.users().messages().get(userId=user_id, id=msg_id, format='raw').execute()

    #print ('Message snippet: %s' % message['snippet'])

    msg_str = base64.urlsafe_b64decode(message['raw'].encode('ASCII'))

    mime_msg = email.message_from_string(msg_str)

    return mime_msg
  except errors.HttpError, error:
    print ('An error occurred: %s' % error)
def ListMessagesMatchingQuery(service, user_id, query=''):
  """List all Messages of the user's mailbox matching the query.

  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.
    query: String used to filter messages returned.
    Eg.- 'from:user@some_domain.com' for Messages from a particular sender.

  Returns:
    List of Messages that match the criteria of the query. Note that the
    returned list contains Message IDs, you must use get with the
    appropriate ID to get the details of a Message.
  """
  try:
    response = service.users().messages().list(userId=user_id,
                                               q=query).execute()
    messages = []
    if 'messages' in response:
      messages.extend(response['messages'])

    while 'nextPageToken' in response:
      page_token = response['nextPageToken']
      response = service.users().messages().list(userId=user_id, q=query,
                                         pageToken=page_token).execute()
      messages.extend(response['messages'])

    return messages
  except errors.HttpError, error:
    print ('An error occurred: %s' % error)
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 base64url encoded email object.
  """

  message = MIMEText.MIMEText(message_text)
  message['to'] = to
  message['from'] = sender
  message['subject'] = subject
  return {'raw': base64.urlsafe_b64encode(message.as_string())}
def GmailInput():
    '''

    :return:
    '''
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    service = discovery.build('gmail', 'v1', http=http)

    defaultList= ListMessagesMatchingQuery(service, 'me', 'subject: claimed infringement label:unread ')
    currentMSG=[]
    ips=[]
    DraftedMessages=[]
    for msg in defaultList:

        currentMSG=GetMimeMessage(service, 'me', msg['id'])
        strCurrentMessage=str(currentMSG)

       #Extract the IP Address Field using the XML included in DMCA emails
        #get a string value of the current message

        if '<IP_Address>' not in strCurrentMessage:
            pass
                #print("XML TAG DOES NOT EXIST")
        else:
            loc1 = strCurrentMessage.find('<IP_Address>')

        if '</IP_Address>' not in strCurrentMessage:
            pass
                #print("XML TAG DOES NOT EXIST")
        else:
            loc2 = strCurrentMessage.find('</IP_Address>')

        #extract the IP address:
        #get rid of the XML identifier in the beginning of the string:
            LOC1=loc1+12

                 #determine legth of ip field
            length=loc2-LOC1
            ipaddress = strCurrentMessage[LOC1 : LOC1+length]
            ips.append(ipaddress)


    print(ips)
    return ips


def main():

    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 = 'name'

    requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

    GmailInstance=GmailInput()

    InfobloxComments=InfobloxLookup(GmailInstance)
    SEPERATED_COLS=[]

    for eachComment in InfobloxComments:
        DividedComments=SplitComments(eachComment)
        SEPERATED_COLS.append(DividedComments)

    columns=defaultdict(list)
    with open('entities_table.csv', 'rb') as ENTITIES:
        reader=csv.DictReader(ENTITIES)
        for row in reader:
            for (k,v) in row.items():
                columns[k].append(v)

    CEN_ENTITIES=columns['Common Name']
    SEPERATED_ENT=[]
    for eachEntity in CEN_ENTITIES:
        DividedEntities=SplitComments(eachEntity)
        SEPERATED_ENT.append(DividedEntities)
    CallGlobalNocScript()
    MakeJSON(InfobloxComments)

    file='email_list.json'
    input_data=json.loads(open(file).read())
    print(input_data)
    for each in input_data:
        pass
       # GmailOutput(each)


if __name__ == '__main__':
    sys.exit(main())

Tags: ofthetoinidmessageemailservice