【问题标题】:Parsing IMAP Email BODYSTRUCTURE for Attachment Names为附件名称解析 IMAP 电子邮件正文结构
【发布时间】:2015-09-28 21:17:04
【问题描述】:

我编写了一个 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

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

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

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

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

那是“标准”吗?

【问题讨论】:

    标签: python email imap


    【解决方案1】:

    你看到的是一个被破坏的文字,可能被切割和浪费损坏了?文字看起来像

    {5}
    Hello
    

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

    {4}
    ?
    

    【讨论】:

    • 我和@arnt 在一起。 OP:如果您想要更详细或替代的解释(正如我从您提供的赏金中猜测的那样),我建议您将原始输出粘贴(一小部分)到您的问题中。我想 Python 的 imaplib 可能有一种方法可以获取客户端和服务器之间对话的完整调试记录。
    • @tripleee 不幸的是,我已经删除了导致问题的电子邮件,此后还没有遇到过问题。我没想过要获得完整的调试记录,但如果我再次遇到它,我会看看它。我提供赏金的原因是我真的不认为剪切和粘贴导致了问题(我直接将变量输出到文件以检索其值)。尽管如此,鉴于信息有限,arnt 是唯一可能的答案,我将奖励赏金。
    【解决方案2】:

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

    【讨论】:

    • 谢谢,这个库看起来很有用。但由于我从 imaplib 得到的输出已经被损坏,parse_bodystructure 函数的输入将是相同的损坏字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2012-11-19
    • 2014-07-18
    • 2012-06-27
    相关资源
    最近更新 更多