使用 FluentEmail 发送电子邮件时,正确使用和引用部分模板的方法是什么?

问题描述 投票:0回答:1

我在 .NET 6 项目中使用 FluentEmail 库,它可以很好地完成我需要它做的大部分事情。

我有一个布局文件 _DefaultEmailLayout.cshtml,其中包含基本页眉和页脚,因此在我的模板文件 ForgotPassword.cshtml 之一中,我引用了此布局文件。

@model SharedLibrary.Models.Shared.EmailTemplate

@{
     Layout = Model.LayoutLocation; //contains location of layout file
}

<tr>
    <td class="mceBlockContainer" valign="top" style="background-color:#ffffff; padding-top:21px; padding-bottom:7px; padding-right:25px; padding-left:25px">
        <div class="mceText" id="dataBlockId-40" style="width:100%">
            <p class="last-child">
                <strong>Your password</strong>
            </p>
        </div>
    </td>
</tr>
<tr>
    <td class="mceBlockContainer" valign="top" style="background-color:#ffffff; padding-top:7px; padding-bottom:40px; padding-right:25px; padding-left:25px">
        <div class="mceText" id="dataBlockId-25" style="width:100%">
            <p>Hi @Model.FirstName,</p>
        </div>
    </td>
</tr>
<tr>
    <td class="mceBlockContainer" valign="top" style="background-color:#ffffff; padding-top:21px; padding-bottom:7px; padding-right:25px; padding-left:25px">
        <div class="mceText" id="dataBlockId-40" style="width:100%">
            <p class="last-child">
                <strong>Need Help?</strong>
            </p>
        </div>
    </td>
</tr>
<tr>
    <td class="mceBlockContainer" valign="top" style="background-color:#ffffff; padding-top:7px; padding-bottom:40px; padding-right:25px; padding-left:25px">
        <div class="mceText" id="dataBlockId-25" style="width:100%">
            <p>
            </p>
            <p class="last-child">
                If you need any assistance, our Client Support Team are here to help. Feel free to reach out to our team via email on XXX
            </p>
        </div>
    </td>
</tr>

在代码本身中,当我使用 FluentEmail.UsingTemplateFromFile().SendAsync() 时,它成功发送电子邮件,并且收到的电子邮件看起来与布局文件页眉和页脚符合预期。

我遇到的问题是,我的一些电子邮件共享您在 ForgotPassword.cshtml 文件中看到的“需要帮助”部分,因此我没有将其复制到所有这些文件中,而是将其放置在一个名为的单独文件中_NeedHelpLayout.cshtml

现在,如果我用下面的内容替换 ForgotPassword.cshtml 中的该部分,那么当电子邮件发送时,该部分不仅不会被解析,而且无法在任何地方找到,电子邮件模板只是不包含它。我在这里做错了什么吗?

<partial name="xxx" />
c# .net razor razor-pages fluent
1个回答
0
投票

如果您在 FluentMail 中使用 Razor 渲染器,则模板渲染器是 RazorLight 引擎而不是 MS Razor 引擎。这意味着部分标记将被忽略。相反,请使用 RazorLight 引擎中的 IncludeAsync 方法(有关详细信息,请参阅 RazorLight 文档)。 在模板文件中:

  1. 添加在顶部

    @using RazorLight

  2. 哪里应该是部分标签,把这个:

    @{ await IncludeAsync("path_to_the_partial_view.cshtml", Model);}

© www.soinside.com 2019 - 2024. All rights reserved.