首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Python解析Gmail,并将所有早于日期的邮件标记为“已读”

使用Python解析Gmail,并将所有早于日期的邮件标记为“已读”
EN

Stack Overflow用户
提问于 2009-08-18 20:52:28
回答 4查看 5.8K关注 0票数 5

长话短说,我创建了一个新的gmail帐户,并将其他几个帐户(每个帐户都有1000条消息)链接到我正在导入的gmail帐户。所有导入的邮件都作为未读邮件到达,但我需要它们显示为已读。

我对python有一点经验,但我只用过mail和imaplib模块来发送邮件,而不是处理帐号。

有没有办法批量处理收件箱中的所有邮件,并简单地将早于指定日期的邮件标记为已读?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-18 21:25:54

代码语言:javascript
运行
复制
typ, data = M.search(None, '(BEFORE 01-Jan-2009)')
for num in data[0].split():
   M.store(num, '+FLAGS', '\\Seen')

这是对store方法的imaplib doc page中的代码稍作修改。我在RFC 3501中找到了要使用的搜索条件。这应该可以让你开始学习了。

票数 8
EN

Stack Overflow用户

发布于 2012-01-05 17:57:47

基于Philip T.的回答以及RFC 3501RFC 2822,我构建了几行代码来标记超过10天的邮件为已读。月份缩写名称使用静态列表。这并不是特别优雅,但Python的%b格式字符串依赖于区域设置,这可能会带来令人不快的惊喜。所有IMAP命令都是基于UID的。

代码语言:javascript
运行
复制
import imaplib, datetime

myAccount = imaplib.IMAP4(<imapserver>)
myAccount.login(<imapuser>, <password>)
myAccount.select(<mailbox>)

monthListRfc2822 = ['0', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
beforeDate = datetime.datetime.today() - datetime.timedelta(days = 10)
beforeDateString = ("(BEFORE %s-%s-%s)"
                    % (beforeDate.strftime('%d'),
                       monthListRfc2822[beforeDate.month],
                       beforeDate.strftime('%Y')))
typ, data = myAccount.uid('SEARCH', beforeDateString)
for uid in data[0].split():
    myAccount.uid('STORE', uid, '+FLAGS', '(\Seen)')

顺便说一句:我不知道为什么在我的例子(dovecot IMAP服务器)的搜索字符串中必须使用"-“作为日期分隔符。对我来说,这似乎与RFC2822相矛盾。但是,使用简单空格作为分隔符的日期仅返回IMAP错误。

票数 2
EN

Stack Overflow用户

发布于 2009-08-18 20:55:43

与其尝试解析HTML,为什么不直接使用IMAP接口呢?将其连接到标准邮件客户端,然后只需按日期排序,并将您想要的任何邮件标记为已读。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1296446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档