我正在尝试过滤带有附件的电子邮件,但在我使用的系统中,我只能访问标题(用于过滤)。有没有一种一致的方法可以仅使用标题来确定电子邮件是否包含附件?(也许检查内容类型是否为多部分?)
答案1
如果你有访问权限,你就无法实现你想要的目标仅有的到标题。信息可能以非标准标头的形式存在,但显然这不是您可以依赖的东西。要么访问正文,要么放弃这个想法。
答案2
没有附件的邮件也可能是 content-type:multipart,例如那些内容为文本和 html 版本的邮件。您需要检查的是 ct:multipart,然后检查不是 content-type:text/* 的部分,但为此您需要访问正文 :(
答案3
对于 Mime 附件,带有 的电子邮件Content-Type: multipart/mixed
通常会带有附件(但不必如此)。带有Content-Type:
以外的电子邮件multipart/*
不会带有附件。其他任何内容(multipart/alternative
最常见的)都可能有附件。
无论如何,这取决于附件的含义。如果附件仅指那些带有 的 MIME 部分attachment
Content-Disposition
,那么您将无法在电子邮件标头中找到它,只能在相应部分的 MIME 标头中找到它。
您可能不想作为附件考虑的内容包括电子邮件签名、multipart/related
消息的某些部分(例如嵌入在 HTML 消息签名中的图像)...
答案4
我使用以下代码获取电子邮件标题:
msg_header = @imap.fetch(message_id, 'RFC822.HEADER').first.attr['RFC822.HEADER']
headers = msg_header.split(/\r\n|: /)
email_header = headers[headers.index('Content-Type')+1].split(/;/)
然后,您无需获取邮件正文,即可根据邮件头决定该邮件是否带有附件。
您可以检查标题信息这里 希望这对你有帮助。