如何只移动有附件的邮件?

How to move ONLY messages that have attachments?

我有以下代码使用邮箱包将文件夹中的所有电子邮件移动到“旧”文件夹:

with MailBox('mail.yu.nl').login('75090058@yu.nl', 'yu', initial_folder='INBOX') as mailbox:
    mailbox.move(mailbox.fetch(), 'Inbox.Old') 

现在,我只想移动带有附件的邮件。

我试过以下方法:

 resp, items = imap.uid("search",None, 'All')

resp, data = imap.uid('fetch',msg_uid, "(RFC822)") 

然而,没有成功..

请帮忙!

我很好奇。您为什么认为 none or all 只会匹配带附件的邮件?

正如@triplee 所说,附件没有真正的定义,因此您必须自己确定一个定义。但是你可以近似,例如移动所有多部分消息,或所有包含图像部分的消息,所有包含 PDF 部分的消息或所有正文部分已明确标记为附件的消息(不时发生)。搜索关键字分别是header content-type multipartheader content-type image/header content-type application/pdfheader content-disposition attachment

这四个示例中的第一个会很好地工作,其他三个会在一些服务器上工作,但远非所有,因为 the specification says "…has a header with…",这可能意味着“在消息 headers 中" 或 "在消息 headers 或 per-part headers 中"。祝你的服务器好运。

你也可以use or to join several of the conditions.

RFC3501:主体结构

imap_tools lib 无法解析它。您可以尝试实现它:

https://github.com/ikvk/imap_tools/issues/100