Mat*_*ner 5 email mime message smtp python-3.x
在下面的失败:
>>> a = email.message.Message()
>>> a.set_payload(b'some data')
>>> a.as_string()
TypeError: string payload expected: <class 'bytes'>
Run Code Online (Sandbox Code Playgroud)
它也无法明确地使用生成器并调用flatten
.消息体转换为ASCII,应用转义然后最终转换为字节以进行传输,那么为什么我不能设置字节有效负载?
如何获取具有smtplib.SMTP.send_message
可接受的字节有效负载的优选非MIME消息?
请记住:在 Python 3 中,字符串都是unicode。您实际上是给 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'
Run Code Online (Sandbox Code Playgroud)
这确实给出了 MIME 类型的消息——希望这对您有用。