Python实现邮件显示From/To字段与实际收发地址分离的方法
解决SMTP发送邮件时自定义From显示地址的问题
问题核心
Gmail的SMTP服务器存在安全策略,会强制将From字段覆盖为登录邮箱地址,这是导致你设置的test@gmail.com无法显示的原因。以下是几种可行的解决思路:
方案1:Gmail别名授权+调整邮件头
先在Gmail后台添加目标地址为授权别名,再通过格式调整实现显示效果:
- 登录Gmail账号,进入「设置」→「账户和导入」→「发送邮件为」,添加
test@gmail.com作为别名并完成验证。 - 修改代码如下:
import smtplib from email.message import EmailMessage EMAIL_ADDRESS_G = 'ayush.warikoo77@gmail.com' EMAIL_PASSWORD_G = '你的Gmail应用密码' # 注意:Gmail需使用应用密码而非原密码 with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp: smtp.login(EMAIL_ADDRESS_G, EMAIL_PASSWORD_G) msg = EmailMessage() msg["Subject"] = "Test" msg["To"] = 'test@gmail.com' # 已添加别名的情况下,用此格式可显示目标地址 msg['From'] = 'test@gmail.com <ayush.warikoo77@gmail.com>' # 可选:添加回复地址,收件人回复时默认发送到test@gmail.com msg['Reply-To'] = 'test@gmail.com' msg.set_content("Test body") smtp.send_message(msg, from_addr=EMAIL_ADDRESS_G, to_addrs='test@gmail.com')
方案2:使用简化邮件库yagmail
yagmail对Gmail别名支持更友好,操作更简洁:
- 安装库:
pip install yagmail - 代码示例:
import yagmail # 初始化客户端 yag = yagmail.SMTP(user='ayush.warikoo77@gmail.com', password='你的应用密码', host='smtp.gmail.com', port=465) # 直接指定显示的发件人(需先在Gmail添加别名) yag.send(to='test@gmail.com', subject='Test', contents='Test body', sender='test@gmail.com')
方案3:使用第三方邮件服务(如SendGrid)
如果Gmail的别名策略无法满足需求,可选择支持完全自定义发件人的服务(需完成域名SPF/DKIM验证):
import sendgrid from sendgrid.helpers.mail import Mail, From, To, Subject, PlainTextContent sg = sendgrid.SendGridAPIClient(api_key='你的SendGrid API密钥') from_email = From('test@gmail.com', 'Test Sender') to_email = To('test@gmail.com') subject = Subject('Test') content = PlainTextContent('Test body') mail = Mail(from_email, to_email, subject, content) response = sg.client.mail.send.post(request_body=mail.get())
内容的提问来源于stack exchange,提问作者Ayush W
相关产品推荐
相关产品推荐

