要求是在我正在处理的应用程序中,我可以编辑所有可用的电子邮件。
显而易见的解决方案是将所有消息存储在数据库中,并使用文本编辑器为用户编辑消息。
但是我想知道如何在电子邮件消息中设置占位符。
邮件的占位符也必须存储在数据库中。消息可以包含许多占位符。占位符可以包含在许多消息中。
我可以允许用户在插入占位符时从占位符列表中选择占位符。
电子邮件消息需要包含占位符标记,通常为{0},{1}等,但出于显示目的,这需要更加用户友好,例如$ WebsiteLink $。 一些占位符是直截了当的,例如指向网站的链接,该链接仅根据部署或登录用户的名称而更改。
其他占位符更复杂。它们依赖于在特定时间从数据库获取信息,例如选定的团队成员名称。 所以对于这个占位符而不是保存一些静态文本,我需要调用一个方法或事件来获取该信息。
我不清楚如何做到这一点。你能帮忙吗?
我希望规范是明确的,如果没有,请告诉我?
答案 0 :(得分:3)
对于简单的String.Format
替换,请查看Phil Haack的this blog post(和后续内容)。
那里的解决方案意味着您可以使用{name}
或{date}
等命名占位符代替{0}
。
这并不能解决整个UI问题,但至少占位符更清晰。
答案 1 :(得分:1)
要么你可以像哥特所建议的那样去做(或者甚至看看this,我没有用它但看起来很甜),或者是另一种方式:
1.您构建了一个HTML模板,我们称之为mailTemplate.html
:
(小心,表......)
<table>
<tr>
<td>
<%MY_PLACEHOLDER%>
</td>
</tr>
</table>
2.然后您只需在方法中使用它,假设templatePath
是模板文件的物理路径:
var mailDefinition = new MailDefinition
{
BodyFileName = templatePath,
IsBodyHtml = true,
From = ... // you'll have to fill that
};
string replacementForPlaceholder = "Look at me!";
var replacements = new ListDictionary { { "<%MY_PLACEHOLDER%>", replacementForPlaceholder }};
string recipients = ... // well, specify recipients
var message = mailDefinition.CreateMailMessage(recipients, replacements, new LiteralControl());
您的邮件已准备好发送。如果你不对HTML表格和其他东西太过疯狂,如果收件人禁用了HTML,邮件会优雅地降级为文本。
答案 2 :(得分:0)
上个月,我实现了以下基于模板的EmailModule,它使用了Razor语法。它应该适用于您的情况。它很容易实现。
http://kazimanzurrashid.com/posts/use-razor-for-email-template-outside-asp-dot-net-mvc
感谢Kazi Manzur Rashid。
答案 3 :(得分:0)
C#现在支持插值。对于仍然担心这一点的人,请看一下here。