求教!关于 Python3 SMTP 发送邮件的编码问题

2017-05-09 18:15:27 +08:00
 sakuoz

最近在跟着学习廖雪峰的 Python 教程,到发送邮件这一章出现了编码问题,搜索一直得不到解决,特来求助广大 V 友。

以下是代码部分:

from email.mime.text import MIMEText

msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')

# 输入 Email 地址和口令:
from_addr = input('From: ')
password = input('Password: ')
# 输入收件人地址:
to_addr = input('To: ')
# 输入 SMTP 服务器地址:
smtp_server = input('SMTP server: ')

import smtplib
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

报错:

SMTP server: smtp.qq.com
send: 'ehlo Sakuoz 丶.lan\r\n'
Traceback (most recent call last):
  File "F:\github\pythonTest\pytest.py", line 16, in <module>
    server.login(from_addr, password)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\smtplib.py", line 693, in login
    self.ehlo_or_helo_if_needed()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\smtplib.py", line 599, in ehlo_or_helo_if_needed
    if not (200 <= self.ehlo()[0] <= 299):
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\smtplib.py", line 439, in ehlo
    self.putcmd(self.ehlo_msg, name or self.local_hostname)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\smtplib.py", line 366, in putcmd
    self.send(str)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\smtplib.py", line 351, in send
    s = s.encode(self.command_encoding)
UnicodeEncodeError: 'ascii' codec can't encode character '\u4e36' in position 11: ordinal not in range(128)

\u4e36 经过 unicode 转换为中文丶,我发送的邮件( QQ to 163 )昵称中也有个丶,所以怀疑可能与昵称有关,但是经过测试删掉昵称中的丶还是报同样的错误,萌新的我一直不知道错在什么地方。。。请问问题出在哪里,该怎么解决,谢谢大家!

开发环境:

3306 次点击
所在节点    Python
5 条回复
gulucn
2017-05-09 18:42:04 +08:00
self.putcmd(self.ehlo_msg, name or self.local_hostname)
你的主机名有中文吧。
TimePPT
2017-05-09 18:45:02 +08:00
你输入的昵称出现在哪里? from_addr to_addr 都不允许直接传昵称
sakuoz
2017-05-09 19:28:07 +08:00
@gulucn 好像是,我最近无聊改过一次,我去试试


@TimePPT 没有传,以上就是全部代码,没一句中文-_-||
TimePPT
2017-05-09 19:28:58 +08:00
@sakuoz 好吧……那有可能是主机名问题
sakuoz
2017-05-09 19:43:00 +08:00
@TimePPT
@gulucn
谢谢楼上二位,已解决,真的是主机名问题,一直都没往这个方向想,学习了,自己没事瞎改啥主机名(捂脸)
结贴

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/360196

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX