使用Python从Gmail下载特定邮件

15 投票
3 回答
13306 浏览
提问于 2025-04-16 21:03

有人能帮我修改一下现有的代码示例吗?

我在下面的文章中看到了如何连接到 Gmail 并下载内容,但我不知道怎么搜索特定的邮件,只下载时间戳和邮件内容。

文章链接:如何从 Gmail 下载所有带附件的邮件?

我特别想获取过去 5 天内来自 "Alerts@foobank.com" 的邮件,并下载这些邮件的发送时间和内容。然后我会解析这些信息,以确定哪些邮件是我需要的。

我自学编程,现在在修改上面的脚本时遇到了困难。

任何帮助都非常感谢。谢谢。

JD

3 个回答

1
import datetime as dt
from imap_tools import MailBox, Q
date = dt.date.today() - dt.timedelta(days=5)
with MailBox('imap.mail.com').login('test@mail.com', 'password', 'INBOX') as mailbox:
    for msg in mailbox.fetch(Q(from_='Alerts@foobank.com', date_gte=date)):
        sent_time = msg.date
        body = msg.text or msg.html
        for att in msg.attachments:
            att.filename         # str: 'cat.jpg'
            att.content_type     # str: 'image/jpeg'
            att.payload          # bytes: b'\xff\xd8\xff\xe0\'

*请注意,IMAP搜索中没有“带附件”的搜索条件。

https://github.com/ikvk/imap_tools

3
当然可以!请提供你想要翻译的StackOverflow内容,我会帮你把它变得通俗易懂。
21

我建议使用 IMAPClient,因为它简化了IMAP中一些比较复杂的部分。

下面这段代码可以根据你的条件提取邮件,解析邮件内容为 email.message.Message 实例,并打印出 DateFrom 这两个信息。

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'])

撰写回答