求助:Python发送邮件时出现UnicodeDecodeError错误的解决方法
修复UnicodeDecodeError及代码语法错误方案
嘿,我来帮你搞定这个问题!你碰到的UnicodeDecodeError和代码里的小语法问题咱们一起解决:
问题分析
- 语法错误:你的代码里初始化SMTP_SSL连接的那行少了一个闭合括号,这会先导致代码无法正常运行。
- 编码问题:
MIMEText默认使用us-ascii编码,当处理包含非ASCII字符(哪怕有时候是看似普通的文本)时,调用msg.as_string()就会触发解码错误,因为ascii编码无法处理超出范围的字节。
修复步骤
1. 修复语法错误
把这行:
server = smtplib.SMTP_SSL((smtp_ssl_host, smtp_ssl_port)
改成:
server = smtplib.SMTP_SSL((smtp_ssl_host, smtp_ssl_port))
(补上末尾的),让SMTP连接初始化语句语法正确)
2. 解决Unicode编码错误
创建MIMEText实例时,明确指定编码为utf-8,替换原来的msg = MIMEText("Test")为:
msg = MIMEText("Test", 'plain', 'utf-8')
这样邮件内容会以UTF-8编码处理,避免后续转字符串时的解码异常。
修正后的完整代码
import smtplib from email.mime.text import MIMEText smtp_ssl_host = 'smtp.gmail.com' smtp_ssl_port = 465 username = 'removed' password = 'removed' sender = username targets = ["removed"] # 指定utf-8编码,避免解码错误 msg = MIMEText("Test", 'plain', 'utf-8') msg['Subject'] = "Test" msg['From'] = sender msg['To'] = ', '.join(targets) # 修复括号缺失的语法错误 server = smtplib.SMTP_SSL((smtp_ssl_host, smtp_ssl_port)) server.login(username, password) server.sendmail(sender, targets, msg.as_string()) server.quit()
额外提示
如果之后你的邮件内容包含中文或者其他非ASCII字符,这个UTF-8编码的设置也能完美适配,不会再出现类似的解码错误。另外,使用Gmail的SMTP服务记得开启低安全性应用权限(或者用App Password,如果你开启了两步验证的话),不然会出现登录失败的问题。
内容的提问来源于stack exchange,提问作者War Stormrage
相关产品推荐
相关产品推荐

