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

Python发送邮件时主题无法正常显示、出现在正文问题求助

问题原因

你将邮件主题头错误拼接进了MIMEText的正文参数中:MIMEText的第一个入参仅作为邮件正文内容解析,你手动写的Subject: {0}不会被识别为标准邮件头,只会被当成正文开头展示。

修复代码

import smtplib
from email.mime.text import MIMEText
from django.conf import settings # 若使用其他配置框架替换为对应引入即可

def SendEmailNotHTML(EmailToList,EmailBody,EmailSubject):
    mail_from = settings.SMTP_USER
    try:
        for current_mail_to in EmailToList:
            fromaddr = settings.SMTP_USER
            toaddrs  = current_mail_to
            # 直接传入正文内容初始化MIMEText
            my_email = MIMEText(EmailBody, "plain", "utf-8")
            # 单独设置标准邮件头
            my_email["Subject"] = EmailSubject
            my_email["From"] = fromaddr
            my_email["To"] = toaddrs
            username = settings.SMTP_USER
            password = settings.SMTP_PASSWORD
            # Gmail SMTP推荐用587端口,避免多数运营商封禁25端口
            server = smtplib.SMTP('smtp.gmail.com', 587)
            server.ehlo()
            server.starttls()
            server.login(username,password)
            server.sendmail(fromaddr, toaddrs, my_email.as_string())
            server.quit()
    except Exception as e:
        print('cant send email' + str(e))

核心修改说明

  • 移除手动拼接Subject的逻辑,改为直接给MIMEText实例的Subject属性赋值,会被自动识别为邮件主题
  • 补充From、To标准邮件头,降低被邮件服务商判定为垃圾邮件的概率
  • 新增utf-8编码声明,避免中文等非ASCII内容出现乱码
  • 可选优化:将Gmail SMTP端口改为更通用的587端口,适配更多网络环境

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 04:42:03