【发布时间】:2011-09-29 07:52:16
【问题描述】:
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 中有什么,但通常是 Base-64。
-
不管你怎么做,如果你能做到的话,非 ASCII、非 MIME 类型的邮件在接收方和任何中间邮件传输代理上都会出现问题。其中“麻烦”的意思是“难以解释”或“被退回”或“被丢弃”。
-
@msw - 仍然只有 ASCII 的邮件代理死了! :)
-
@msw:相反,无论发送方如何,Message都会先转换为ASCII。我只是没有看到为我的字节选择随机字符串编码的意义,只是为了稍后再编码为 ASCII(然后当然回到字节-.-)。
-
为什么不填充两个字节并将其转换为 Unicode(或选择您最喜欢的深奥编码)?然后在另一端,您可以将 Unicode 字符串转换为字节。我仍然会推荐 MIME 解决方案,如果只是因为库可以帮助您并且它是标准的,但转换为字符串可能会起作用。
标签: email python-3.x smtp message mime