【问题标题】:Parse Gmail with Python and mark all older than date as "read"使用 Python 解析 Gmail 并将所有早于日期的内容标记为“已读”
【发布时间】:2010-11-20 18:04:42
【问题描述】:

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

我对python有一点经验,但是我只使用过mail和imaplib模块来发送邮件,没有处理账户。

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

【问题讨论】:

    标签: python email gmail imap pop3


    【解决方案1】:

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

    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 服务器)必须将“-”用作搜索字符串中的日期分隔符。对我来说,这似乎与 RFC 2822 相矛盾。但是,使用简单空格作为分隔符的日期只会返回 IMAP 错误。

    【讨论】:

      【解决方案2】:
      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 中找到了要使用的搜索条件。这应该可以帮助您入门。

      【讨论】:

      • 谢谢!这正是我想要的!
      • 对我来说,日期格式“(自 2011 年 1 月 1 日起)”有效,即 DD-MMM-YYYY,谢谢
      • 感谢您的提醒,dhaval。我纠正了这个例子。对我来说效果很好。
      【解决方案3】:

      只需转到 Gmail 网络界面,按日期进行高级搜索,然后全选并标记为已读。

      【讨论】:

      • 对我来说,它会弹出一条小消息,上面写着“已选择此页面上的所有 20 个对话。选择与此搜索匹配的所有对话”,您可以选择所有消息。跨度>
      【解决方案4】:

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

      【讨论】:

      • 因为它不那么有趣?需要明确的是,我的目标是使用 Imap 界面,但我正在尝试学习一个新技巧。我不想在我的计算机上安装邮件客户端,但从技术上讲,这应该是可能的。
      • 啊,好吧,我没有意识到乐趣是这个项目的重中之重;)
      猜你喜欢
      • 2014-10-26
      • 2016-06-17
      • 2019-10-18
      • 1970-01-01
      • 2011-12-02
      • 2015-01-15
      • 2016-10-17
      • 2015-05-20
      • 2011-01-12
      相关资源
      最近更新 更多