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

使用Python 3 smtplib发送邮件时遭遇UnicodeEncodeError错误求助

嘿,这个问题我太熟了!你遇到的UnicodeEncodeError是因为邮件内容里有ASCII编码范围之外的字符(比如中文、特殊符号这类),而smtplib默认会尝试用ASCII来编码整个邮件内容,这不就直接卡壳了嘛。

给你几个靠谱的解决办法:

1. 用MIME格式包装邮件内容(最推荐)

你需要把邮件内容转换成MIME类型的对象,明确指定UTF-8编码,这样就能完美支持非ASCII字符了。直接上代码示例:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 你的邮件内容,随便写中文或者其他特殊字符都没问题
email_content = "这是一封带中文的测试邮件,试试特殊符号:😎"
# 创建MIMEText对象,第一个参数是内容,第二个是格式(plain纯文本/html网页),第三个是编码
msg = MIMEText(email_content, 'plain', 'utf-8')
# 邮件标题也要用Header处理编码,避免标题里的非ASCII字符出问题
msg['Subject'] = Header('我的测试邮件', 'utf-8')
msg['From'] = "你的邮箱@example.com"
msg['To'] = "收件人邮箱@example.com"

# 发送邮件的常规操作
with smtplib.SMTP('你的SMTP服务器地址', 587) as server:
    server.starttls()  # 开启加密传输
    server.login('你的邮箱@example.com', '你的邮箱授权码')
    server.send_message(msg)

2. 如果要发HTML格式的邮件

只需要把MIMEText的第二个参数改成'html'就行,比如:

html_content = "<h1>这是HTML邮件标题</h1><p>里面可以写<b>加粗</b>的中文内容哦</p>"
msg = MIMEText(html_content, 'html', 'utf-8')

3. 为啥之前的代码会报错?

你之前应该是直接把纯字符串传给sendmail方法了,比如这种错误写法:

# 千万别这么写!
server.sendmail('发件人邮箱', '收件人邮箱', "带中文的邮件内容")

这种情况下smtplib会默认用ASCII编码整个内容,一旦碰到非ASCII字符就直接抛出你看到的那个错误,所以一定要用MIME对象来替代纯字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:33:55