我编写了一个 Python 脚本来通过 IMAP(使用 Python 的 imaplib)访问、管理和过滤我的电子邮件。
为了获取电子邮件的附件列表(无需先下载整封电子邮件),我使用电子邮件的 UID 获取了电子邮件的主体结构,即:
imap4.uid('FETCH', emailUID, '(BODYSTRUCTURE)')
并从那里检索附件名称。
通常,包含附件名称的“部分”如下所示:
("attachment" ("filename" "This is the first attachment.zip"))
但是有几次,我遇到了类似的事情:
("attachment" ("filename" {34}', 'This is the second attachment.docx'))
我在某处读到,IMAP 有时不使用双引号表示字符串,而是使用大括号,字符串长度后跟实际字符串(不带引号)。
例如
{16}This is a string
但上面的字符串似乎并没有严格遵守这一点(右花括号后有一个单引号、一个逗号和一个空格,并且字符串本身用单引号括起来)。
当我下载整封电子邮件时,包含该附件的邮件部分的 header 看起来很正常:
Content-Type: application/docx
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="This is the second attachment.docx"
我如何解释(呃……解析)“异常”的 body 结构,理解额外的单引号、逗号等……
那是“标准”吗?
最佳答案
您看到的是一个破损的文字,可能被切割和浪费损坏了?文字看起来像
{5}
Hello
也就是说,长度,然后是一个 CRLF,然后是那么多 字节(不是字符):
{4}
🐮
关于python - 解析附件名称的 IMAP 电子邮件 BODYSTRUCTURE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31335415/