我在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和字符集完全无关的问题。
答案 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