SMTP发送邮件时如何将发件人显示为指定名称而非邮箱地址?
解决Python SMTP发件人显示自定义名称的问题
你遇到的问题是因为邮件头的From字段格式不正确,同时sendmail方法的参数不符合SMTP服务器要求,以下是修复方案:
核心修改点
- 规范
From字段格式:需要写成显示名称 <实际邮箱地址>的格式,收件人客户端才能正确解析并显示自定义名称。 sendmail发件人参数用真实邮箱:SMTP服务器需要验证发件人身份,必须传入你登录的真实邮箱地址,不能只传显示名称。
修改后的完整代码
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import sys message = MIMEMultipart() # 改为显示名称+邮箱的标准格式 message["From"] = "GORKIDEV <gorkemkayas435@gmail.com>" message["To"] = "gorkemkayas@hotmail.com" message["Subject"] = "About mail sending" my_message = "Sending mail via SMTP module with Python" text_message = MIMEText(my_message,"plain") message.attach(text_message) try: mail = smtplib.SMTP("smtp.gmail.com",587) mail.ehlo() mail.starttls() # Gmail需开启两步验证后使用应用专用密码登录 mail.login("gorkemkayas435@gmail.com","*********") # sendmail第一个参数传入真实登录邮箱 mail.sendmail("gorkemkayas435@gmail.com", message["To"], message.as_string()) print("Message is sent successfully !") mail.close() except Exception as e: # 增加异常信息便于调试 sys.stderr.write(f"An error occured: {str(e)}") sys.stderr.flush()
补充说明
- 若使用Gmail,必须先开启两步验证,并使用应用专用密码登录,否则会被谷歌的安全机制拦截。
- 邮件头的
From字段负责给收件人展示名称,而sendmail的发件人参数是给SMTP服务器做身份验证用的,二者作用不同,不能混淆。
内容的提问来源于stack exchange,提问作者gorkemkayas
相关产品推荐
相关产品推荐

