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
相关产品推荐
相关产品推荐

