使用IMAP4和Python获取GMail中的星标消息

7 投票
2 回答
3040 浏览
提问于 2025-04-16 12:28

我在网上找了很多关于使用IMAP的信息,但我还是不太明白怎么用它来满足我的需求。我知道怎么获取邮箱里的所有邮件和所有已读邮件,但我该怎么处理带星标的邮件呢?

请给我一些Python代码的例子,教我怎么通过IMAP4从GMail获取带星标的邮件,怎么检查某封邮件是带星标的还是没有星标的,以及怎么给某封邮件加星标或去掉星标。

2 个回答

0
from imap_tools import MailBox, AND

with MailBox('imap.mail.com').login('test@mail.com', 'pwd', 'INBOX') as mailbox:

    # get list of subjects of flagged emails from INBOX folder
    subjects = [msg.subject for msg in mailbox.fetch(A(flagged=True))]

    # set flag on emails from INBOX that html contains <b> tag
    flags = [imap_tools.MailMessageFlags.FLAGGED]
    mailbox.flag([m.uid for m in mailbox.fetch() if '<b>' in m.html], flags, True)

    # print flags for all emails from INBOX  
    for msg in mailbox.fetch(): print(msg.date, msg.flags)

我的外部库:https://github.com/ikvk/imap_tools

10

Gmail中的“星标”状态直接对应于IMAP的\Flagged关键字。所以你可以通过设置或取消设置\Flagged来切换邮件的星标状态:

IMAP4.store(num, '+FLAGS', '\\Flagged')

你可以通过搜索FLAGGED来查找带星标的邮件(或者通过UNFLAGGED来查找没有星标的邮件):

IMAP4.search(None, 'FLAGGED')

Gmail还为你提供了一个虚拟文件夹,里面包含了所有带星标的邮件。如果你SELECT "[Gmail]/Starred",你就能看到邮箱中所有带星标的邮件:

IMAP4.select('[Gmail]/Starred')

撰写回答