写的一个小脚本,一直都能正常运行,但是昨天突然出现了问题
smtp_server = "smtp.163.com" # 主服务器地址
server = smtplib.SMTP_SSL(smtp_server)
# 建立server驱动
server.connect(smtp_server, 465) # 通过特定端口连接服务器
# 登录邮箱
server.login(send_er, pw)
server.sendmail(send_er, re_er, msg.as_string())
server = smtplib.SMTP_SSL(smtp_server)
File "C:\Users\DELL\AppData\Local\Programs\Python\Python39\lib\smtplib.py", line 1034, in init
SMTP.init(self, host, port, local_hostname, timeout,
File "C:\Users\DELL\AppData\Local\Programs\Python\Python39\lib\smtplib.py", line 263, in init
fqdn = socket.getfqdn()
File "C:\Users\DELL\AppData\Local\Programs\Python\Python39\lib\socket.py", line 791, in getfqdn
hostname, aliases, ipaddrs = gethostbyaddr(name)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb4 in position 0: invalid start byte
,尝试重新申请授权码等,但是还是未能解决,求dl解救
郁闷了,搞了好长时间,是因为昨天手欠,把电脑名从英文改成了 汉字,问题解决了,谢谢大家!
这个是不是编码问题
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb4 in position 0: invalid start byte
检查gethostbyaddr方法里,你对服务器的请求内容,检查 content-encoding 是否使用了压缩方式,reqeusts 可以自动解压 gzip ,但无法自动解压 br 压缩
这个错误是因为socket.getfqdn()返回的主机名包含了非utf-8编码的字符,而smtplib库默认是使用utf-8编码的。解决方法是手动指定主机名,可以使用socket库的gethostname()函数来获取本机主机名,然后手动指定给smtplib。修改代码如下:
import socket
smtp_server = "smtp.163.com" # 主服务器地址
server = smtplib.SMTP_SSL(smtp_server)
# 建立server驱动
server.connect(smtp_server, 465) # 通过特定端口连接服务器
# 登录邮箱
server.login(send_er, pw)
# 指定本机主机名
server.sendmail(send_er, re_er, msg.as_string(), socket.gethostname())
这样修改之后,就能够正常发送邮件了。
检查下你的程序的编码问题