(使用IMAP命令,而不是任何其他邮件包的帮助)
有多种方法可以做到这一点.最好的一个是从2013年初开始UID MOVE
在RFC 6851中定义的命令:
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
.
我不确定你在imap-speak中是多么精通,但基本上在登录后,"选择"源邮箱,"复制"邮件,并"删除"邮件(或"删除"旧邮箱,如果它现在是空的:-).
a login a s b select source c copy 1 othermbox d store 1 +flags (\Deleted) e expunge
将是要发送的消息的示例.(注意:imap消息在每个命令之前需要一个uniqe前缀,因此前面的"ab c")
有关详细信息,请参阅RFC 2060.
如果您有要移动的电子邮件的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.