创建无需更改 C# .net MVC 中的代码即可修改的动态电子邮件模板的最佳方法是什么?

What is the best way to create a dynamic email template that can be modified without changing code in C# .net MVC?

我正在创建一个 Web 应用程序,它需要在操作完成时向用户发送电子邮件。在电子邮件正文中,我需要告知用户上次操作的交易详情。我知道如何向某人发送电子邮件以及如何通过将消息硬编码为字符串来添加交易详细信息。我想知道的是,如何通过在 JSON 文件或我的数据库中制作此电子邮件主题而不对其进行硬编码,以便更改电子邮件正文中的消息不需要我发布再次申请。

目前,我的想法是创建一个 JSON 文件,邮件正文包含在几个键中,并在应用程序中将键值组合成一个字符串。这是我目前正在考虑的 JSON 结构:

{
  "NewTransaction":{
    "EN":{
      "Greeting":"Dear ",
      "Introduction":"We found that a transaction was completed against your name on ",
      "Body1":". The following are some of your transaction details:",
      "Body2":"Kindly let us know if there is any discrepancy with this transaction"
    },
    "MY":""
  }
}

在尝试解决这个问题时,我发现 this 包似乎对创建邮件正文很有帮助。

是否还有其他更好的方法可能被我忽略了?

提前致谢!

EmailTemplateHelper templateHelper = new EmailTemplateHelper( HttpContext.Current.Request.MapPath("~/template_path/EMAIL_TEMPLATE.template"));

Dictionary<string, string> replaceMapper = new Dictionary<string, string>() 
{
    { "TAG1", emailInfo.name },
    { "TAG2", emailInfo.lastname}

};
mailMessage.Subject = templateHelper.GetSubject(replaceMapper);
mailMessage.Body = templateHelper.GetBody(replaceMapper);

mailMessage.IsBodyHtml = true;

在您的模板文件中,您应该将 %TAG1% 放在您要放置数据的位置。

每个以 "What is the best way to" 开头的问题都可能过于宽泛或基于观点。

在我看来,您可以创建一个 table(右侧的字段名称,左侧的示例数据)

id: 1
from: @@sysadress@@
to: @@useremail@@
subject: Trnasaction completed
body: Here goes your html body filled with @@data@@
... more fields as needed ...

查看@@这些东西@@ - 这些将是动态文本的占位符。

在您的操作 table 中,您将添加一列,例如 actionMessage 和 link 它到 Message table。更好的是创建 Action_Message table。

Id, ActionId, MessageId, ActionStatus

这将允许发送不同的消息,具体取决于您的操作是失败、完成还是推迟等等。

所以,这可能是一种方式。但是您不太可能找到 "the best way"。每一个最好的方法都可以改进。但这肯定会实现您的主要目标 - 无需重新编译即可更改消息。

您应该查看 Postal 邮件的发送。

要获取数据,为什么不直接使用 SQL,您可以将主题和内容存储在可以动态更新的字段中。