ASP.NET Core中使用FluentEmail无法发送Razor模板邮件求助
FluentEmail Razor模板发邮件失效排查方案
- 检查依赖包版本一致性
确保项目同时安装FluentEmail.Core、FluentEmail.Smtp、FluentEmail.Razor三个包,且三者的主版本号完全一致,跨版本混用会直接导致Razor渲染器无法正常工作。 - 替换匿名模型为显式公共类
ASP.NET Core中匿名类默认访问权限为internal,Razor渲染器无法跨程序集读取匿名类的属性值。你需要先定义公共的模型类:
调用public class PurchaseNoticeModel { public string FirstName { get; set; } public string ProductName { get; set; } }UsingTemplate时传入该类的实例,不要用匿名类。 - 调整FluentEmail注册逻辑
不要在发邮件的方法内临时给Email.DefaultSender、Email.DefaultRenderer静态属性赋值,这种写法在ASP.NET Core多请求场景下很容易出现作用域冲突。推荐在Program.cs中全局注册服务:
后续在业务类中注入// .NET 6+ 配置示例 builder.Services.AddFluentEmail("你的发件邮箱地址") .AddRazorRenderer() .AddSmtpSender(new SmtpClient("smtp.gmail.com") { UseDefaultCredentials = false, Port = 587, Credentials = new NetworkCredential("邮箱账号", "授权码"), EnableSsl = true });IFluentEmail接口调用发邮件方法即可。 - 补充csproj配置
针对.NET 6及更高版本的项目,除了已添加的<PreserveCompilationContext>true</PreserveCompilationContext>,还需要补充<PreserveCompilationReferences>true</PreserveCompilationReferences>配置,避免Razor编译依赖的引用集被发布裁剪。 - 捕获渲染异常定位问题
给发邮件逻辑加try-catch块,直接捕获Razor渲染阶段的错误信息,异常信息会明确提示是模板语法错误、模型访问失败还是依赖缺失:try { // 原有发邮件逻辑 } catch (Exception ex) { // 输出ex.ToString()查看完整错误栈 Debug.WriteLine(ex.ToString()); }
内容的提问来源于stack exchange,提问作者regulus735
相关产品推荐
相关产品推荐

