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

ASP.NET项目中生成的邮件确认token未发送到用户邮箱问题

问题根因

你当前贴出的代码仅完成了邮箱确认token生成、确认链接拼接、日志写入三步操作,没有包含任何调用SMTP服务发送邮件的逻辑,邮件根本没有被发出,自然不存在被邮箱服务商拒收的情况,这是最核心的问题。


修复步骤

首先补全邮件发送逻辑,这里给出两种实现参考:

1. 临时测试简单实现(不推荐生产环境使用)

在你打日志的代码后补充以下发信逻辑:

// 需提前引入System.Net.Mail和System.Net命名空间
using var smtpClient = new SmtpClient("smtp.gmail.com", 587)
{
    Credentials = new NetworkCredential("你的发信邮箱地址", "你的邮箱应用专用密码"),
    EnableSsl = true
};

var mailContent = new MailMessage
{
    From = new MailAddress("你的发信邮箱地址"),
    Subject = "账号邮箱确认",
    Body = $"<p>请点击以下链接完成邮箱验证:<a href=\"{confirmationLink}\">确认邮箱</a></p>",
    IsBodyHtml = true
};
mailContent.To.Add(user.Email);

await smtpClient.SendMailAsync(mailContent);

2. 生产环境推荐实现

使用官方推荐的MailKit库实现发信,避免原生SmtpClient的兼容与安全问题:

  • 先通过NuGet安装MailKit和MimeKit包
  • 发信示例代码:
using MimeKit;
using MailKit.Net.Smtp;

var message = new MimeMessage();
message.From.Add(new MailboxAddress("站点名称", "你的发信邮箱地址"));
message.To.Add(new MailboxAddress("", user.Email));
message.Subject = "账号邮箱确认";

message.Body = new TextPart("html")
{
    Text = $"<p>请点击以下链接完成邮箱验证:<a href=\"{confirmationLink}\">确认邮箱</a></p>"
};

using var client = new SmtpClient();
await client.ConnectAsync("smtp.gmail.com", 587, MailKit.Security.SecureSocketOptions.StartTls);
await client.AuthenticateAsync("你的发信邮箱地址", "你的邮箱应用专用密码");
await client.SendAsync(message);
await client.DisconnectAsync(true);

发信逻辑补全后仍收不到的排查方向

  • 邮箱权限配置问题:Gmail自2022年起已完全停止支持「低安全性应用访问」开关,需要先给谷歌账号开启两步验证,随后在账号安全页面生成应用专用密码,用该密码作为SMTP认证密码而非账号主密码;Outlook邮箱同理,需要使用应用专用密码认证。
  • 网络与端口问题:确认服务器/本地开发环境的587端口未被防火墙、运营商拦截,也可尝试切换465端口(SSL加密)测试。
  • 反垃圾规则拦截:确保发信邮箱地址与SMTP认证地址完全一致,不要伪造发件人;邮件内容避免包含大量敏感词,可先发送纯文本内容测试;短时间内不要频繁向同一邮箱发信,避免被临时限流。
  • 异常日志排查:给发信逻辑包裹try-catch块,捕获SMTP通信过程中的所有异常并写入日志,可快速定位认证失败、连接超时等具体问题。

内容的提问来源于stack exchange,提问作者Yaakov Whise

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:36:04