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

Edw*_*Lee 7 python email imap

我写了一个Python脚本来通过IMAP访问,管理和过滤我的电子邮件(使用Python的imaplib).

要获取电子邮件的附件列表(不先下载整个电子邮件),我使用电子邮件的UID获取电子邮件的bodystructure,即:

imap4.uid('FETCH', emailUID, '(BODYSTRUCTURE)')
Run Code Online (Sandbox Code Playgroud)

并从那里检索附件名称.

通常,包含附件名称的"部分"看起来像:

("attachment" ("filename" "This is the first attachment.zip"))
Run Code Online (Sandbox Code Playgroud)

但有几次,我遇到了类似的事情:

("attachment" ("filename" {34}', 'This is the second attachment.docx'))
Run Code Online (Sandbox Code Playgroud)

我读到某个地方,有时候,IMAP会使用带有字符串长度的大括号,后跟实际字符串(不带引号),而不是用双引号括起来表示字符串.

例如

{16}This is a string
Run Code Online (Sandbox Code Playgroud)

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

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

Content-Type: application/docx
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="This is the second attachment.docx"
Run Code Online (Sandbox Code Playgroud)

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

那是"标准"吗?

arn*_*rnt 6

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

{5}
Hello
Run Code Online (Sandbox Code Playgroud)

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

{4}

Run Code Online (Sandbox Code Playgroud)