首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么python的电子邮件解析器找不到这个多部分MIME电子邮件的所有部分?

为什么python的电子邮件解析器找不到这个多部分MIME电子邮件的所有部分?
EN

Stack Overflow用户
提问于 2016-02-23 09:50:01
回答 1查看 910关注 0票数 1

我正在尝试使用Python的email module处理一个简单的多部分MIME电子邮件。然而,由于某些我不明白的原因,我不能遍历电子邮件的所有部分-由于某些原因,应用程序/pdf被遗漏了。

失败操作示例:

代码语言:javascript
运行
复制
import email    

msgstring = '''See bottom of post'''

msg = email.message_from_string(msgstring)

has_pdf_attached = False

for part in msg.walk():
    print (part.get_content_type())
    if part.get_content_type() == 'application/pdf':
        payload = part.get_payload(decode=True)
        if '%PDF-' in payload:
            has_pdf_attached = True

print(has_pdf_attached)

输出(请注意,最后的‘print/pdf’部分没有出现在部件的应用程序中):

代码语言:javascript
运行
复制
multipart/alternative
text/plain
text/html
False

消息本身,剪下以显示重要的部分:

代码语言:javascript
运行
复制
--_=_swift_v4_145618772756cba94f8fcc2_=_
Content-type: multipart/alternative; boundary="----------=_1456187728-18401-69"

This is a multi-part message in MIME format...

------------=_1456187728-18401-69
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

A bunch of content here
foobar
barfoo
etc

------------=_1456187728-18401-69
Content-Type: text/html; charset="utf-8"
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

<html><body>
    <p>HTML version of content</p>
</body></html>

------------=_1456187728-18401-69--

--_=_swift_v4_145618772756cba94f8fcc2_=_
Content-Type: application/pdf; name test.pdf
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename test.pdf

A_Big_Long_Base64_Enconded_PDF_File_foofoofoofoofoofoofoofoo
JVBER0OUMyNzc0ODFDODAwMTI+IF0KL0RvY0NoZWNrFADSFsfsaFdsafsdaf
dHhyZWYKMzE4MjkKJSVFT0YKFDSFDSFdsfdsfdsfdsfdsfdsfdsfdsfdsfds

--_=_swift_v4_145618772756cba94f8fcc2_=_--

那么我到底做错了什么呢?我注意到,“检测到”的部分都在第一个“部分”中,由神秘的--_=_swift_v4_145618772756cba94f8fcc2_=_--包装。我假设这是相关的,但google等搜索失败了,所以我在这里

EN

Stack Overflow用户

发布于 2016-02-23 10:02:44

在标准的Stack Overflow体验中,我所要做的就是公开地问这个问题,然后简单的答案就会出现在我的眼前。

我的msgstring没有包含整个原始电子邮件--我使用的IMAP库配置错误,正在删除邮件的主要标题。--_=_swift_v4_145618772756cba94f8fcc2_=_确实是一个边界--整个多部分消息的主要边界。

当我将实际的完整消息作为msgstring输入时,它就像一个护身符。

把这个愚蠢的问题归结为不太了解MIME格式。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35567339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档