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

Python实现邮件显示From/To字段与实际收发地址分离的方法

解决SMTP发送邮件时自定义From显示地址的问题

问题核心

Gmail的SMTP服务器存在安全策略,会强制将From字段覆盖为登录邮箱地址,这是导致你设置的test@gmail.com无法显示的原因。以下是几种可行的解决思路:

方案1:Gmail别名授权+调整邮件头

先在Gmail后台添加目标地址为授权别名,再通过格式调整实现显示效果:

  1. 登录Gmail账号,进入「设置」→「账户和导入」→「发送邮件为」,添加test@gmail.com作为别名并完成验证。
  2. 修改代码如下:
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别名支持更友好,操作更简洁:

  1. 安装库:pip install yagmail
  2. 代码示例:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:05:20