Python3:发送包含二进制数据的电子邮件?

时间:2011-07-06 05:13:25

标签: email python-3.x smtp message mime

following失败:

>>> a = email.message.Message()
>>> a.set_payload(b'some data')
>>> a.as_string()
TypeError: string payload expected: <class 'bytes'>

它也无法明确使用生成器,并调用flatten。消息体转换为ASCII,应用转义然后最终转换为字节以进行传输,那么为什么我不能设置字节有效负载?

如何获取smtplib.SMTP.send_message将接受的字节有效负载的优质非MIME消息?

1 个答案:

答案 0 :(得分:1)

请记住:在Python 3中,字符串是所有 unicode。您实际上是在为Python提供一个字节对象,然后告诉它您需要一个unicode字符串,但不告诉它使用哪个编码将bytes对象转换为字符串。

您需要做的是将编码作为set_payload()调用的第二个参数提供,如下所示:

test = email.message.Message()
test.set_payload(b'some example_data', 'latin1') # use latin-1 for no-op translation
test.as_string()

'MIME-Version: 1.0\nContent-Type: text/plain; charset="latin1"\nContent-Transfer-Encoding: base64\n\nc29tZSBleGFtcGxlIGRhdGE=\n'

这确实提供了MIME类型的消息 - 希望这对你有用。