IMAP:如何将邮件从一个文件夹移动到另一个文件夹

Posted

技术标签:

【中文标题】IMAP:如何将邮件从一个文件夹移动到另一个文件夹【英文标题】:IMAP: how to move a message from one folder to another 【发布时间】:2010-09-12 10:39:30 【问题描述】:

(使用 IMAP 命令,不借助任何其他邮件包)

【问题讨论】:

虽然当前规范中没有 IMAP“移动”命令,但有一个扩展提案:tools.ietf.org/html/draft-gulbrandsen-imap-move-01(Arnt Gulbrandsen,2012 年 3 月)。遗憾的是,由于 IETF 相当激进的到期政策草案,当您想要单击该链接时,该链接可能已经失效。 RFC6851 MOVE 扩展:tools.ietf.org/html/rfc6851。当然,如果您的服务器不支持它 COPY,'STORE \DELETED flag' 和 EXPUNGE 是唯一的选择(如下面的答案) @triplee:tools.ietf.org 链接不会过期。草稿到期,但 tools.ietf.org 继续给出合理的答案。 @arnt 嘿,感谢您的提示...和规范! 【参考方案1】:

我猜你将邮件复制到新文件夹,然后在旧文件夹中删除(删除)它。

RFC3501

提示 没有 DELETE 命令可以实现您的意思,您必须将邮件标记为已删除,然后删除邮箱。看看 RFC。小心 DELETE,因为它会删除整个邮箱,而不是单个邮件。

【讨论】:

【参考方案2】:

如果您有要移动的电子邮件的 uid。

import imaplib

obj = imaplib.IMAP4_SSL('imap.gmail.com', 993)
obj.login('username', 'password')
obj.select(src_folder_name)
apply_lbl_msg = obj.uid('COPY', msg_uid, desti_folder_name)
if apply_lbl_msg[0] == 'OK':
    mov, data = obj.uid('STORE', msg_uid , '+FLAGS', '(\Deleted)')
    obj.expunge()

其中 msg_uid 是邮件的 uid。

【讨论】:

-1: "使用 IMAP 命令,不借助任何其他邮件包" +1 这是迄今为止我找到的使用 python 完成此任务的最佳链接。 @Avadhesh 你能帮我吗***.com/questions/67383513/… ***.com/questions/67383513/…【参考方案3】:

有多种方法可以做到这一点。最好的一个是 2013 年初在RFC 6851 中定义的UID MOVE 命令:

C: a UID MOVE 42:69 foo
S: * OK [COPYUID 432432 42:69 1202:1229]
S: * 22 EXPUNGE
S: (more expunges)
S: a OK Done

此扩展的存在由MOVE 功能指示。

如果它不可用,但UIDPLUS (RFC 4315) 可用,则第二好的选择是使用UID STOREUID COPYUID EXPUNGE 的组合:

C: a01 UID COPY 42:69 foo
S: a01 OK [COPYUID 432432 42:69 1202:1229] Copied
C: a02 UID STORE 42:69 +FLAGS.SILENT (\Deleted)
S: a02 OK Stored
C: a03 UID EXPUNGE 42:69
S: * 10 EXPUNGE
S: * 10 EXPUNGE
S: * 10 EXPUNGE
S: a03 Expunged

如果UIDPLUS 丢失,您将无法执行任何合理的操作——EXPUNGE 命令会永久删除所有标记为删除的消息,包括您未触及的消息。在这种情况下,最好只使用UID COPYUID STORE

【讨论】:

我的服务器不支持UID MOVE :/ 那么,第二个最好的机会就在第二个代码清单中。【参考方案4】:

我不确定你对 imap 语言的精通程度,但基本上在登录后,“选择”源邮箱,“复制”邮件,然后“删除”邮件(或“删除”旧邮箱)邮箱如果现在是空的:-)。

a login a s
b select source
c copy 1 othermbox
d store 1 +flags (\Deleted)
e expunge

将是要发送的消息的示例。 (注意:imap 消息在每个命令前都需要一个唯一的前缀,因此前面是“a b c”)

详情请见RFC 2060。

【讨论】:

请注意,expunge 将删除标记为 \Deleted所有 条消息,这可能不是您想要的。

以上是关于IMAP:如何将邮件从一个文件夹移动到另一个文件夹的主要内容,如果未能解决你的问题,请参考以下文章

将消息从一个 IMAP 服务器移动到另一个的脚本

Dell Boomi - 如何将电子邮件从收件箱移动到收件箱子文件夹?

如何使用 IMAP 发送邮件?

如何使用 zend_mail 和 zend_mail_storage_imap 将电子邮件移动到不同的文件夹?

如何在 MS Access 中将邮件从一个链接的 Exchange 邮箱移动到另一个邮箱

使用 Python 和 imaplib 在 GMail 中移动电子邮件