流利的电子邮件错误无法编译模板

时间:2013-11-03 04:10:49

标签: c# email asp.net-mvc-4 .net-4.5

我正在将我的mvc 3.0项目更新为.net 4.0和mvc 4.0,并发现Fluent电子邮件停止工作。 我尝试使用最新版本http://www.nuget.org/packages/fluent-email/1.2.2和预发布版本以及http://www.nuget.org/packages/fluent-email/1.3.0-RazorEngine

但是收到错误Unable to compile template

An exception of type 'RazorEngine.Templating.TemplateCompilationException' occurred in RazorEngine.dll but was not handled in user code

Additional information: Unable to compile template. Source file 'C:\Windows\TEMP\xrhyjmc5.0.cs' could not be found

可能有人知道如何解决这个问题?

我的主叫代码:

                    email = Email
                    .From(model.FromEmail, model.Username)
                    .To(betsTipsterEmail)
                    .Subject(emailSubject)
                    .UsingTemplateFromFile(emailBodyFile, model)
                    .Body(model.Body)
                    .UsingClient(client);

我的Confirmation.html模板:

<html>
    <body>
        <p>
            Hi @Model.Username,

            bla<br /><br />
            bla<br /><br />
            <a href="@Model.Url">@Model.Url</a><br /><br />
            bla
        </p>
        <p>
            Kind Regards,<br /><br />
            bla
        </p>
    </body>
</html> 

RazorEngine版本3.2.0 期待这篇文章http://www.britishdeveloper.co.uk/2011/07/razorengine-templatecompilationexceptio.html但没有帮助

2 个答案:

答案 0 :(得分:0)

我遇到过类似的问题。尝试用大括号包装每个@Model来电。例如。 @(Model.Username)。 1.3.0的最新稳定版刚刚发布,你也应该更新。

答案 1 :(得分:0)

对于那些在.Net Core中有此问题的人。 我使用EmbeddedResources作为电子邮件模板,并使用DI添加剃刀渲染,如下所示:services.AddRazorRenderer() 在检查了FluentEMail Razor和RazorLight doc的单元测试之后 我发现我应该将typeof(rootType)传递给services.AddRazorRenderer(typeof(rootType)),以使我的代码正常工作,否则RazorLight无法找到TemplateKey。

从FluentEmail Razor测试中获取的示例波纹管展示了如何添加RazorRender:

public void Should_be_able_to_use_project_layout_with_viewbag()
        {
            var projectRoot = Directory.GetCurrentDirectory();
            Email.DefaultRenderer = new RazorRenderer(projectRoot);

            string template = @"
@{
    Layout = ""./Shared/_Layout.cshtml"";
}
sup @Model.Name here is a list @foreach(var i in Model.Numbers) { @i }";

            dynamic viewBag = new ExpandoObject();
            viewBag.Title = "Hello!";
            var email = new Email(fromEmail)
                .To(toEmail)
                .Subject(subject)
                .UsingTemplate(template, new ViewModelWithViewBag{ Name = "LUKE", Numbers = new[] { "1", "2", "3" }, ViewBag = viewBag});

            Assert.AreEqual($"<h1>Hello!</h1>{Environment.NewLine}<div>{Environment.NewLine}sup LUKE here is a list 123</div>", email.Data.Body);
        }

FluentEmail提供3种添加RazorRenderer的方法,您可以选中FluentEmailRazorBuilderExtensions.cs,然后选择正确的方法。

如果遇到相同的问题,请参考FluentEmail Razor TestRazorLight DocFluentEmail issue