如何只移动有附件的邮件?
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 multipart
、header content-type image/
、header content-type application/pdf
和header content-disposition attachment
。
这四个示例中的第一个会很好地工作,其他三个会在一些服务器上工作,但远非所有,因为 the specification says "…has a header with…",这可能意味着“在消息 headers 中" 或 "在消息 headers 或 per-part headers 中"。祝你的服务器好运。
RFC3501:主体结构
imap_tools lib 无法解析它。您可以尝试实现它:
我有以下代码使用邮箱包将文件夹中的所有电子邮件移动到“旧”文件夹:
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 multipart
、header content-type image/
、header content-type application/pdf
和header content-disposition attachment
。
这四个示例中的第一个会很好地工作,其他三个会在一些服务器上工作,但远非所有,因为 the specification says "…has a header with…",这可能意味着“在消息 headers 中" 或 "在消息 headers 或 per-part headers 中"。祝你的服务器好运。
RFC3501:主体结构
imap_tools lib 无法解析它。您可以尝试实现它: