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

Mar*_*son 20 imap

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

Jan*_*rát 25

有多种方法可以做到这一点.最好的一个是从2013年初开始UID MOVERFC 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
Run Code Online (Sandbox Code Playgroud)

此功能表示此扩展的存在MOVE.

如果它不可用,但UIDPLUS(RFC 4315)是,第二个最佳选择是使用和的组合UID STORE,UID 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
Run Code Online (Sandbox Code Playgroud)

如果UIDPLUS缺少,则无法做任何合理的事情 - 该EXPUNGE命令会永久删除所有标记为删除的邮件,包括您未触及的邮件.最好的是在这种情况下使用UID COPYUID STORE.


Sec*_*Sec 19

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

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

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

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

  • 请注意,`expunge`将删除标记为`\ Deleted`的_all_消息,这可能不是您想要的. (3认同)

Ava*_*esh 10

如果您有要移动的电子邮件的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()
Run Code Online (Sandbox Code Playgroud)

msg_uid是邮件的UID.

  • -1:"使用IMAP命令,而不是在任何其他邮件包的帮助下" (3认同)
  • +1这是迄今为止我在使用python完成此任务时发现的最佳链接。 (2认同)