是否有任何开源/免费框架可以解决在C#中构建HTML电子邮件的一些痛苦?
我维护了许多独立的ASP.NET Web表单,其主要功能是发送电子邮件。其中大部分都是纯文本格式,因为做一个漂亮的HTML演示文稿太繁琐了。
我也对解决同样问题的其他方法感兴趣。
编辑:要清楚,我有兴趣使用纯文本格式输入(名称,地址,电话号码)并将其放入HTML电子邮件模板中。这样,接收者将看到格式正确的消息,而不是我们当前给他们的原始文本输出。
编辑2:由于我正在考虑更多关于这个以及迄今为止产生的问题的答案,我对我正在寻找的内容有了更清晰的了解。理想情况下,我想要一个允许我去的新课程:
HtmlMessage body = new HtmlMessage();
body.Header(imageLink);
body.Title("Some Text That Will Display as a Header");
body.Rows.Add("First Name", FirstName.Text);
HtmlMessage类构建一个表,将图像放到适当的位置,并为我添加的每个字段添加新行。看起来好像难以写,所以如果那里什么都没有,也许我会去那条路
答案 0 :(得分:1)
Andrew Davey创建了Postal,它允许您使用任何ASP.NET MVC视图引擎进行模板化电子邮件。 Here's a video where he talks about how to use it
他的例子:
public class HomeController : Controller {
public ActionResult Index() {
dynamic email = new Email("Example");
email.To = "webninja@example.com";
email.FunnyLink = DB.GetRandomLolcatLink();
email.Send();
return View();
}
}
使用Razor的模板:
To: @ViewBag.To From: lolcats@website.com Subject: Important Message Hello, You wanted important web links right? Check out this: @ViewBag.FunnyLink <3
答案 1 :(得分:0)
我最近使用MarkDownSharp实现了您所描述的内容。这几乎是无痛的。
StackOverflow使用相同的框架(减去一些调整)来获取纯文本格式的帖子,使它们看起来很漂亮。
另一种选择是使用像TinyMCE这样的东西为用户提供WYWIWYG HTML编辑器。这会让他们对电子邮件的外观和感觉有更大的影响力,但它可能会使事情过于复杂。
请记住,用户生成的HTML也存在一些安全问题。无论您使用哪种策略,都需要确保清理用户的输入,以便他们不会在输入中包含可怕的内容,如脚本标记。
修改强>
抱歉,我没有意识到您正在寻找电子邮件模板解决方案。我提出的最简单的解决方案是在用户生成的内容电子邮件中启用文本“宏”。因此,例如,用户可以输入:
Dear {RecipientFirstName}, Thank you for your interest in {ClientCompanyName}. The position you applied for has the following minimum requirements: - B.S. or greater in Computer Science or related field - ...
然后我们会做一些简单的解析来将其分解为:
Dear {0}, Thank you for your interest in {1}. The position you applied for has the following minimum requirements: - B.S. or greater in Computer Science or related field - ...
......和......
0 = "RecipientFirstName"
1 = "ClientCompanyName"
...
我们将这两个组件存储在数据库中,每当我们准备从该模板创建新实例时,我们会评估给定属性名称的值,并使用标准格式字符串调用来生成实际内容。
string.Format(s, macroCodes.Select(c => EvaluateMacroCode(c, obj)).ToArray());
然后我使用MarkdownSharp以及一些HTML清理方法来生成格式良好的HTML电子邮件:
亲爱的约翰,
感谢您对Microsoft的关注。您申请的职位具有以下最低要求:
- B.S。或更高的计算机科学或相关领域
- ...
我很想知道那里是否有更好的东西,但我还没有找到任何东西。
答案 2 :(得分:0)
StringTemplate的C#端口对我来说效果很好。我强烈推荐它。模板文件可以有许多这样的命名标记:
...
<b>
Your information to login is as follows:<br />
Username: $username$<br />
Password: $password$<br />
</b>
...
...你可以加载这个模板并像这样填充它:
notificationTemplate.SetAttribute("username", Username);
notificationTemplate.SetAttribute("password", Password);
最后,您获得模板的ToString()
并将其分配给MailMessage.Body
属性。