【问题标题】:How to move ONLY messages that have attachments?如何仅移动带有附件的邮件?
【发布时间】:2021-08-30 13:07:20
【问题描述】:

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

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)") 

但是,没有成功..

请帮忙!

【问题讨论】:

  • 对于“有附件”的确切含义没有统一的定义。您需要检查 MIME 结构并尝试确定没有明确配置的正文部分的隐含配置,但我认为没有任何固定代码可以简单地复制/粘贴到脚本中。
  • 清除!感谢指导

标签: python imap imaplib mailboxer imap-tools


【解决方案1】:

RFC3501:车身结构

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

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

【讨论】:

  • 感谢您的评论弗拉基米尔,但收到以下错误; TypeError: fetch() 得到了一个意外的关键字参数 'with_struct'
  • 这没有实现,但你可以做到;D。只需阅读此讨论
【解决方案2】:

我很好奇。为什么您认为 none 或 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…",可以理解为“在消息头之间”或“在消息头之间”或每部分标题”。祝你的服务器好运。

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

【讨论】:

  • 我也许应该补充一点,发送多部分消息(在发件人看来)没有附件是完全合法的。
  • 事实上在多部分/替代 HTML+文本电子邮件中很常见。
  • @arnt 您将使用什么搜索条件/包?例如是否可以查询以下内容:mailbox.move(mailbox.fetch(header content-type multipart), 'Inbox.html')
猜你喜欢
  • 1970-01-01
  • 2011-08-27
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 2011-01-03
相关资源
最近更新 更多