您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python中的smtplib.server.sendmail函数引发UnicodeEncodeError:'ascii'编解码器无法编码字符

python中的smtplib.server.sendmail函数引发UnicodeEncodeError:'ascii'编解码器无法编码字符

smtplib.serversendmail方法需要一个bytes实例;如果获取到,str则尝试将其编码为ASCII,UnicodeEncodeError如果str包含任何非ASCII字符,则生成

您可以通过自己编码消息来解决此问题:

>>> msg = 'Hello Wørld'
>>> from_ = 'a@example.com'
>>> to_ = 'b@example.com'
>>> subject = 'Hello'

>>> fmt = 'From: {}\r\nTo: {}\r\nSubject: {}\r\n{}'

>>> server.sendmail(to_, from_, fmt.format(to_, from_, subject, msg).encode('utf-8'))
{}

这将发送此消息*:

b'From: b@example.com'
b'To: a@example.com'
b'Subject: Hello'
b'Hello W\xc3\xb8rld'

但是,如果您想随消息发送非文本二进制数据,则此解决方法将不起作用。

更好的解决方案是使用电子邮件包中的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-@R_543_301@: 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 W\xc3\xb8rld'

*python -m smtpd -n -c DebuggingServer localhost:1025在单独的终端中运行命令以捕获消息数据。

python 2022/1/1 18:42:17 有266人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶