You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python SMTP发送邮件遇UnicodeEncodeError,求解决方案

解决Python SMTP发送邮件的UnicodeEncodeError问题

问题原因

从报错回溯能明确看到,错误发生在SMTP的EHLO握手阶段——你的本地主机名(local_hostname)包含非ASCII字符(比如\xe9对应é),而smtplib默认用ASCII编码SMTP命令,导致编码失败。这个问题和邮件内容无关,你单独打印消息正常也验证了这一点。

修复方案

方案1:指定SMTP命令编码为UTF-8

创建SMTP对象时,显式设置command_encoding='utf-8',让SMTP命令支持非ASCII字符:

from email.message import EmailMessage
import smtplib

remitente = "email_sender"
destinatario = "email_receiver"
mensaje = "¡Hola, mundo!"

email = EmailMessage()
email["From"] = remitente
email["To"] = destinatario
email["Subject"] = "Correo de prueba"
email.set_content(mensaje)

# 新增command_encoding参数,指定UTF-8编码SMTP命令
smtp = smtplib.SMTP("smtp-mail.outlook.com", port=587, command_encoding='utf-8')
smtp.starttls()
smtp.login(remitente, "password")
smtp.send_message(email)  # 推荐用send_message替代sendmail,更适配EmailMessage对象
smtp.quit()

方案2:手动指定纯ASCII的本地主机名

如果不想修改编码配置,也可以直接指定local_hostname为纯ASCII字符串(比如localhost),绕开主机名的编码问题:

# 指定本地主机名为localhost
smtp = smtplib.SMTP("smtp-mail.outlook.com", port=587, local_hostname="localhost")

关于更换编程语言的建议

完全不需要更换语言,这只是smtplib默认配置导致的小问题,上面的方案就能彻底解决。Python的email和smtplib模块足够成熟,完全能满足邮件发送的需求。

内容的提问来源于stack exchange,提问作者shiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 11:26:08