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

ASP.NET Core 注册页IEmailSender未触发 无法发送注册确认邮件

问题修复方案

核心根因:IEmailSender接口命名空间冲突

你自定义的IEmailSender接口和ASP.NET Core Identity 内置的Microsoft.AspNetCore.Identity.UI.Services.IEmailSender是完全独立的两个接口:

  • RegisterModel中注入的是微软官方内置的IEmailSender
  • 你在Startup中注册的是自定义命名空间下的IEmailSender,和前者不匹配
    ASP.NET Core Identity 内置了IEmailSender的空实现NoOpEmailSender,当DI容器找不到对应的自定义实现时,会默认使用这个空实现,所有方法无任何执行逻辑,因此你的断点无法命中,也不会有邮件发出。

修复步骤

1. 统一接口引用(二选一即可)

方案1:适配官方接口

删除你自定义的IEmailSender接口,修改EmailSender实现类直接继承官方的IEmailSender:

using Microsoft.AspNetCore.Identity.UI.Services;

public class EmailSender : IEmailSender
{
    // 原有发送逻辑保持不变
}

方案2:使用自定义接口

修改RegisterModel中的引用,删除对Microsoft.AspNetCore.Identity.UI.Services的引用,替换为你自定义IEmailSender所在的命名空间。

2. 修复Program.cs冗余代码(附加问题)

你当前的Main方法第一行存在冗余的启动代码,Run()为阻塞方法,会导致后续的NLog配置、异常捕获逻辑完全无法执行,直接删除该行即可:

public static void Main(string[] args)
{
    // 删掉下面这行冗余代码
    // CreateHostBuilder(args).Build().Run();
    var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
    try
    {
        logger.Debug("init main");
        CreateHostBuilder(args).Build().Run();
    }
    // 后续原有逻辑保持不变
}

3. 可选检查:确认邮箱验证配置

确保你在Startup.ConfigureServices中添加Identity服务时,邮箱验证配置符合预期:

services.AddDefaultIdentity<Svc27MUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<你的IdentityDbContext实现类>();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:27:01