Python MIME在' From'之前添加尖括号。身体

时间:2014-07-02 08:33:14

标签: python mime

我在Python MIME库中遇到了一些非常奇怪的故障。出于某种原因,当邮件包含字符串From something时,将其打印为字符串会生成>From something

我写了这个最小的测试用例,显示了有问题的:

from email import charset
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

charset.add_charset('utf-8', charset.SHORTEST)

msg = MIMEMultipart()
msg['From'] = 'test@test.com'
msg.attach(MIMEText('From whatever', "plain", "utf-8"))

print msg.as_string()

我得到的输出如下:

Content-Type: multipart/mixed; boundary="===============1971947716=="
MIME-Version: 1.0
From: test@test.com

--===============1971947716==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

>From whatever
--===============1971947716==--

显然这是由add_charset调用引起的,但我不知道这会如何导致与UTF8和字符集完全无关的问题。

1 个答案:

答案 0 :(得分:0)

它与编码无关,它在Python 2.7和Python 3.4之间有所不同。 Python 3.4没有出现问题。

在python 2.7中:

print MIMEText('From foo')

给出

From nobody Wed Jul 02 12:17:18 2014
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

>From foo

我认为原因是在传统的mbox格式中,以From开头的行(不是表示标题的From:)是新消息开头的标记(在FreeBSD中仍然如此)至少9)。而邮寄者曾经以>From foo的身份逃脱它。我想电子邮件模块是为了兼容2.7