解析附件名称的IMAP电子邮件BODYSTRUCTURE

时间:2015-07-10 07:56:01

标签: python email imap

我写了一个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会使用带有字符串长度的大括号,后跟实际字符串(不带引号),而不是用双引号括起来表示字符串。

e.g。

{16}This is a string

但上面的字符串似乎并没有严格遵守(在结束的大括号后面有一个单引号,一个逗号和一个空格,并且字符串本身用单引号括起来。)

当我下载整个电子邮件时,包含该附件的邮件部分的标题似乎正常:

Content-Type: application/docx
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="This is the second attachment.docx"

我如何解释(erm ...解析)“异常”的身体结构,理解额外的单引号,逗号等......

那是“标准”吗?

2 个答案:

答案 0 :(得分:6)

你所看到的是一个破损的文字,可能是因为剪切和浪费而受损?文字看起来像

{5}
Hello

即长度,然后是CRLF,然后是那么多字节(不是字符):

{4}

答案 1 :(得分:1)

看起来像GitHub项目的IMAP-Tools包含一个bodystructure解析器。