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
相关产品推荐
相关产品推荐

