smtplib.server的sendmail方法需要一个
bytes实例;如果获取到,
str则尝试将其编码为ASCII,
UnipreEnpreError如果
str包含任何非ASCII字符,则生成。
您可以通过自己编码消息来解决此问题:
>>> msg = 'Hello Wørld'>>> from_ = 'a@example.com'>>> to_ = 'b@example.com'>>> subject = 'Hello'>>> fmt = 'From: {}rnTo: {}rnSubject: {}rn{}'>>> server.sendmail(to_, from_, fmt.format(to_, from_, subject, msg).enpre('utf-8')){}
这将发送此消息*:
b'From: b@example.com'b'To: a@example.com'b'Subject: Hello'b'Hello Wxc3xb8rld'
但是,如果您想随消息发送非文本二进制数据,则此解决方法将不起作用。
更好的解决方案是使用电子邮件包中的EmailMessage类。
>>> from email.message import EmailMessage>>> em = EmailMessage()>>> em.set_content(fmt.format(to_, from_, subject, msg))>>> em['To'] = to_>>> em['From'] = from_>>> em['Subject'] = subject>>> # NB call the server's *send_message* method>>> server.send_message(em){}
这发送此消息;请注意额外的标头,告诉接收者所使用的编码:
b'Content-Type: text/plain; charset="utf-8"'b'Content-Transfer-Encoding: 8bit'b'MIME-Version: 1.0'b'To: b@example.com'b'From: a@example.com'b'Subject: Hello'b'X-Peer: ::1'b''b'From: b@example.com'b'To: a@example.com'b'Subject: Hello'b'Hello Wxc3xb8rld'
*
python -m smtpd -n -c DebuggingServer localhost:1025在单独的终端中运行命令以捕获消息数据。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)