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

求助:Python发送邮件时出现UnicodeDecodeError错误的解决方法

修复UnicodeDecodeError及代码语法错误方案

嘿,我来帮你搞定这个问题!你碰到的UnicodeDecodeError和代码里的小语法问题咱们一起解决:

问题分析

  1. 语法错误:你的代码里初始化SMTP_SSL连接的那行少了一个闭合括号,这会先导致代码无法正常运行。
  2. 编码问题: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:50:27