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

如何使用Mailkit发送邮件?Asp.net Core中收发件人显示相同问题排查

问题原因

你遇到的发件人地址被篡改的核心原因是Gmail SMTP服务的反垃圾策略限制:
Gmail为了防范伪造发件人的垃圾邮件,会强制将所有通过其SMTP接口发送的邮件的发件人地址,替换为你在smtp.Authenticate方法中传入的认证账号邮箱。你代码中虽然给emailMessage.From设置了_userIdentity.Email对应的值,但只要这个地址没有在你认证用的Gmail账号中完成发件人验证,就会被自动覆盖为认证用的邮箱。如果此时你设置的收件人地址刚好和认证邮箱一致,就会出现发件人和收件人完全相同的情况。

解决方法
  • 如果你确实需要使用_userIdentity.Email作为发件人地址,需要先在认证用的Gmail账号中添加该邮箱为发件别名:
    1. 登录用来做SMTP认证的Gmail账号,进入设置页面
    2. 切换到「账号和导入」标签页
    3. 找到「发送邮件为」板块,点击「添加其他电子邮件地址」
    4. 按照页面指引完成该邮箱的所有权验证流程
      验证通过后Gmail就不会再覆盖你代码中设置的发件人地址
  • 如果你只是测试功能,也可以直接将smtp.Authenticate的第一个参数改为和_userIdentity.Email一致的邮箱,即可避免地址被覆盖
  • 如果不需要使用Gmail的发件能力,也可以更换为支持自定义发件人地址的其他邮件服务商SMTP服务
你的现有代码逻辑无问题,核心结构无需调整
MimeMessage emailMessage = new MimeMessage() ;
emailMessage.From.Add(MailboxAddress.Parse(_userIdentity.Email));
emailMessage.To.Add(MailboxAddress.Parse("my email"));
emailMessage.Subject = "Support email";

BodyBuilder emailBodyBuilder = new BodyBuilder();
emailBodyBuilder.TextBody = message;
emailMessage.Body = emailBodyBuilder.ToMessageBody();


var smtp = new MailKit.Net.Smtp.SmtpClient();
smtp.Connect("smtp.gmail.com" , 587, SecureSocketOptions.StartTls);
smtp.Authenticate("my email", "*********");
await smtp.SendAsync(emailMessage);
smtp.Disconnect(true);

内容的提问来源于stack exchange,提问作者Lujain Alskran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:36:04