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

时间:2008-09-23 16:52:48

标签: imap

(使用IMAP命令,而不是在任何其他邮件包的帮助下)

4 个答案:

答案 0 :(得分:23)

有多种方法可以做到这一点。最好的一个是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功能表示。

如果不可用,但UIDPLUSRFC 4315)是,则第二个最佳选择是使用UID STOREUID COPY和{{1 }}:

UID 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命令会永久删除所有标记为删除的邮件,包括您未触及的邮件。最好的方法是在这种情况下使用EXPUNGEUID COPY

答案 1 :(得分:16)

我不确定你在imap-speak中是多么精通,但基本上在登录后,“选择”源邮箱,“复制”邮件,并“删除”邮件(或“删除”旧邮件邮箱如果现在是空的: - )。

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

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

有关详细信息,请参阅RFC 2060

答案 2 :(得分:9)

如果您有要移动的电子邮件的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。

答案 3 :(得分:3)

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

RFC3501

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