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

Python发送邮件特殊字符编码异常问题求助

解决Python发送邮件特殊字符乱码问题

这个乱码问题我太熟了!本质是你手动拼接的邮件内容和头信息没有明确指定UTF-8编码,导致收件端用了错误的编码解析像ã这类特殊字符,才会出现decisão这种乱码。给你两种解决方案,从快速修复到更规范的写法都有:

方案一:手动修复邮件头与编码声明

直接修改你原来的代码,添加编码相关的头信息,同时确保内容以UTF-8编码发送:

if myresult > 0:
    import smtplib
    from email.header import Header

    remetente = 'xxxxxxxx@gmail.com'
    senha = 'xxxxx'
    destinatario = ['xxxxx@xxxxxxx.xx']
    assunto = Header('Encomendas', 'utf-8').encode()
    texto = 'Existem Encomendas na plataforma aguardar decisão.'
    
    # 修正邮件头,添加编码声明,同时把收件人列表转成字符串格式
    msg = '\r\n'.join([
        'From: %s' % remetente,
        'To: %s' % ', '.join(destinatario),
        'Subject: %s' % assunto,
        'Content-Type: text/plain; charset=utf-8',
        'Content-Transfer-Encoding: 8bit',
        '',
        texto
    ])
    
    server = smtplib.SMTP('smtp.gmail.com:587')
    server.starttls()
    server.login(remetente, senha)
    # 发送时将整个邮件内容编码为UTF-8
    server.sendmail(remetente, destinatario, msg.encode('utf-8'))
    server.quit()

关键改动点:

  • 用Header类处理邮件主题,确保主题的编码正确
  • 添加Content-Type头明确指定内容为UTF-8编码
  • 将收件人列表转为逗号分隔的字符串,避免To字段显示异常
  • 发送时把整个邮件内容编码为UTF-8后再传输

方案二:使用Python内置email库(推荐)

手动拼接邮件很容易遗漏格式细节,Python内置的email库能帮你规范处理邮件结构和编码,后续扩展HTML邮件、附件等也更方便:

if myresult > 0:
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header

    remetente = 'xxxxxxxx@gmail.com'
    senha = 'xxxxx'
    destinatario = ['xxxxx@xxxxxxx.xx']
    assunto = 'Encomendas'
    texto = 'Existem Encomendas na plataforma aguardar decisão.'

    # 构造MIMEText对象,直接指定内容格式和编码
    msg = MIMEText(texto, 'plain', 'utf-8')
    # 分别设置发件人、收件人、主题的编码
    msg['From'] = Header(remetente, 'utf-8')
    msg['To'] = Header(', '.join(destinatario), 'utf-8')
    msg['Subject'] = Header(assunto, 'utf-8')

    server = smtplib.SMTP('smtp.gmail.com:587')
    server.starttls()
    server.login(remetente, senha)
    # 转成字符串发送即可,库会自动处理编码细节
    server.sendmail(remetente, destinatario, msg.as_string())
    server.quit()

这个方案更健壮,MIMEText会自动帮你生成正确的Content-Type和编码声明,不用再手动拼接复杂的邮件头,出错概率低很多。

另外提一句:如果后续遇到Gmail登录失败的情况,检查下是否开启了两步验证,要是开了的话需要用应用专用密码代替原密码登录SMTP服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:35:20