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

.NET 7中使用FluentEmail的UseTemplateFromFile()出现参数数量不匹配问题

.NET 7中FluentEmail结合Razor模板发送邮件时出现参数不匹配错误的解决方法

问题描述

在.NET 7项目中使用FluentEmail结合Razor模板发送用户邮件时,持续触发TargetParameterCountException: Parameter count mismatch.错误,怀疑是.UsingTemplateFromFile()方法导致。

项目配置(Startup.cs)

services.AddFluentEmail("noreply@rackemapp.com")
        .AddRazorRenderer()
        .AddSmtpSender(smtpsettings["Server"], Convert.ToInt32(smtpsettings["Port"]), smtpsettings["Username"], smtpsettings["Password"]);

控制器发送邮件代码

项目命名空间为RackEmApp,模板位于/Views/EmailTemplates目录:

var path = Directory.GetCurrentDirectory();
var email = FluentEmail.Core.Email
    .From("test@test.com")
    .To(sendto)
    .Subject(subject)
    .UsingTemplateFromFile(Directory.GetCurrentDirectory() + "/Views/EmailTemplates/NewUserAdminNotification.cshtml", mergefields);

可能的原因及解决方法

  • Razor模板模型类型不匹配
    检查NewUserAdminNotification.cshtml模板顶部的@model声明,确保其与传入的mergefields对象类型完全一致。例如模板声明@model RackEmApp.Models.UserNotificationModel,则mergefields必须是该类型的实例,不能是匿名对象或其他类型。

  • UsingTemplateFromFile参数误用
    FluentEmail的UsingTemplateFromFile方法针对Razor模板,要求传入单个模型对象,不能是多个零散参数。如果mergefields是多个值的集合而非统一实体类实例,就会触发参数不匹配错误。需将所有渲染字段封装到一个实体类中,传入该类的实例。

  • 模板路径拼接错误
    虽然报错指向参数问题,但仍需验证模板路径是否正确。推荐使用Path.Combine拼接路径避免字符串拼接错误:

    var templatePath = Path.Combine(Directory.GetCurrentDirectory(), "Views", "EmailTemplates", "NewUserAdminNotification.cshtml");
    
  • 依赖版本不兼容
    确认FluentEmail.Core、FluentEmail.Razor等相关包的版本与.NET 7兼容,更新到最新兼容版本可避免因版本差异导致的反射调用参数错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 00:26:05