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 消息?会接受吗?
最佳答案
请记住:在 Python 3 中,字符串是 全部 单码。您实际上是给 Python 一个 bytes 对象,然后告诉它您想要一个 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 类型的消息——希望这对你有用。
关于email - Python3 : Send email message containing binary data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6591829/