Download a specific email from Gmail using Python

蓝咒 提交于 2020-03-17 08:13:30

问题


Can someone help me customize an existing code sample?

I can see from the following article how to connect to gmail and download content, but I can't figure out how to search for a specific email and only download the timestamp and body?

ARTICLE: How can I download all emails with attachments from Gmail?

I specifically want to grab the emails from "Alerts@foobank.com" for the last 5 days and download the send time and body of the emails. I'll then parse this to determine which emails I need to use.

I'm self-taught and am having a hard time customizing the script above to do this.

Any help is much appreciated. Thanks.

JD


回答1:


I suggest using IMAPClient as it papers over many of the more esoteric aspects of IMAP.

The following snippet will pull messages based on your criteria, parse the message strings to email.message.Message instances and print the Date and From headers.

from datetime import datetime, timedelta
import email
from imapclient import IMAPClient

HOST = 'imap.gmail.com'
USERNAME = 'username'
PASSWORD = 'password'
ssl = True

today = datetime.today()
cutoff = today - timedelta(days=5)

## Connect, login and select the INBOX
server = IMAPClient(HOST, use_uid=True, ssl=ssl)
server.login(USERNAME, PASSWORD)
select_info = server.select_folder('INBOX')

## Search for relevant messages
## see http://tools.ietf.org/html/rfc3501#section-6.4.5
messages = server.search(
    ['FROM "Alerts@foobank.com"', 'SINCE %s' % cutoff.strftime('%d-%b-%Y')])
response = server.fetch(messages, ['RFC822'])

for msgid, data in response.iteritems():
    msg_string = data['RFC822']
    msg = email.message_from_string(msg_string)
    print 'ID %d: From: %s Date: %s' % (msgid, msg['From'], msg['date'])



回答2:


import imaplib
from datetime import datetime, timedelta

obj = imaplib.IMAP4_SSL('imap.gmail.com',993)
obj.login('username','password')
obj.select()

today = datetime.today()
cutoff = today - timedelta(days=5)
dt = cutoff.strftime('%d-%b-%Y')
typ, data = obj.search(None, '(SINCE %s) (FROM "Alerts@foobank.com")'%(dt,))
print data


来源:https://stackoverflow.com/questions/6618091/download-a-specific-email-from-gmail-using-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!