【问题标题】:Move mail in IMAP with Python library使用 Python 库在 IMAP 中移动邮件
【发布时间】:2015-04-30 19:48:03
【问题描述】:

在 IMAP 中将邮件移动到不同的文件夹似乎相当困难。

IMAP: how to move a message from one folder to another

如何在 Python 中做到这一点而无需编写太多代码?

我更喜欢重复使用:-)

【问题讨论】:

    标签: python email imap imaplib


    【解决方案1】:

    imaplib 标准模块随时为您服务。

    除了链接问题中的方法外,您可以使用非标准的MOVE 命令与IMAP4._simple_command(参见copy() 实现,其语法相同) 在检查self.capabilities 是否存在"MOVE" 之后。

    【讨论】:

      【解决方案2】:

      你可以使用 imap_tools 包: https://pypi.org/project/imap-tools/

      with MailBox('imap.mail.com').login('test@mail.com', 'pwd', initial_folder='INBOX') as mailbox:
      
          # COPY all messages from current folder to folder1, *by one
          for msg in mailbox.fetch():
              res = mailbox.copy(msg.uid, 'INBOX/folder1')
      
          # MOVE all messages from current folder to folder2, *in bulk (implicit creation of uid list)
          mailbox.move(mailbox.fetch(), 'INBOX/folder2')
      
          # DELETE all messages from current folder, *in bulk (explicit creation of uid list)
          mailbox.delete([msg.uid for msg in mailbox.fetch()])
      
          # FLAG unseen messages in current folder as Answered and Flagged, *in bulk.
          flags = (imap_tools.StandardMessageFlags.ANSWERED, imap_tools.StandardMessageFlags.FLAGGED)
          mailbox.flag(mailbox.fetch('(UNSEEN)'), flags, True)
      
          # SEEN: mark all messages sent at 05.03.2007 in current folder as unseen, *in bulk
          mailbox.seen(mailbox.fetch("SENTON 05-Mar-2007"), False)
      

      【讨论】:

        【解决方案3】:

        您链接到的问题有一个answer,它解释了 IMAP 协议的功能。有可能这样的命令太新鲜了,无法通过 Python 的标准 imaplib 获得。如果是这种情况,最好的办法是向他们发送补丁,以便将其包含在未来的版本中。这就是它的工作原理——如果没有人愿意添加对新命令的支持,它就不会被添加。

        imaplib 是一个相当低级的包,所以我不认为它会实现一种很好的消息移动方式。我的建议是使用另一个提供更高级别 IMAP 视图的库(“嘿,服务器,收件箱中有多少条消息?请给我看最后一个的 MIME 结构......”)。

        【讨论】:

        • 该命令在 IMAP 规范中可能是新的。是的,这是真的。但是用例已经很老了。我现在使用 IMAPClient,并与维护者交谈,因为到目前为止它还没有 move
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-24
        • 2016-09-30
        • 1970-01-01
        • 1970-01-01
        • 2015-01-23
        • 2014-03-09
        • 1970-01-01
        相关资源
        最近更新 更多