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消息?
答案 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类型的消息 - 希望这对你有用。