简体   繁体   中英

Importing mime .eml file to gmail API using the import function

I am a python developer and somewhat new to using Google's gMail API to import .eml files into a gMail account.

I've gotten all of the groundwork done getting my oAuth credentials working, etc.

However, I am stuck where I load in the data-file. I need help loading the message data in to place in a variable..

How do I create the message_data variable reference - in the appropriate format - from my sample email file (which is stored in rfc822 format) that is on disk?

Assuming I have a file on disk at /path/to/file/sample.eml ... how do I load that to message_data in the proper format for the gMail API import call?

    ...
          # how do I properly load message_data from the rfc822 disk file?
          media = MediaIoBaseUpload(message_data, mimetype='message/rfc822')
          message_response = service.users().messages().import_(
              userId='me',
              fields='id',
              neverMarkSpam=True,
              processForCalendar=False,
              internalDateSource='dateHeader',
              media_body=media).execute(num_retries=2)

...
  • You want to import an eml file using Gmail API.
  • You have already been able to get and put values for Gmail API.
  • You want to achieve this using google-api-python-client.
    • service in your script can be used for uploading the eml file.

If my understanding is correct, how about this answer? Please think of this as just one of several possible answers.

Modification point:

  • In this case, the method of "Users.messages: insert" is used.

Modified script:

Before you run the script, please set the filename with the path of the eml file.

eml_file = "###"  # Please set the filename with the path of the eml file.
user_id = "me"

f = open(eml_file, "r", encoding="utf-8")
eml = f.read()
f.close()
message_data = io.BytesIO(eml.encode('utf-8'))
media = MediaIoBaseUpload(message_data, mimetype='message/rfc822', resumable=True)
metadata = {'labelIds': ['INBOX']}
res = service.users().messages().insert(userId=user_id, body=metadata, media_body=media).execute()
print(res)

In above script, the following modules are also required.

import io
from googleapiclient.http import MediaIoBaseUpload

Note:

  • In above modified script, {'labelIds': ['INBOX']} is used as the metadata. In this case, the imported eml file can be seen at INBOX of Gmail. If you want to change this, please modify this.

Reference:

If I misunderstood your question and this was not the result you want, I apologize.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM