(仅使用IMAP命令,不借助任何其他邮件包)
(仅使用IMAP命令,不借助任何其他邮件包)
有多种方法可以实现这一点。最好的方法是早在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 STORE
、UID COPY
和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
,那么您无法做任何合理的操作 - EXPUNGE
命令会永久删除所有标记为删除的邮件,包括那些您未触及的邮件。在这种情况下最好使用UID COPY
和UID STORE
命令。UID MOVE
:/ - Thomas Ahle我不确定您在imap方面的熟练程度,但基本上登录后,“SELECT”源邮箱,“COPY”邮件,并“EXPUNGE”邮件(或如果现在为空,则“DELETE”旧邮箱: -)。
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
的邮件,这可能不是您想要的结果。 - Joachim Breitner如果你有将要移动的电子邮件的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。