使用RazorEngine 这样的东西应该会有所帮助,非常简单:
public bool SendEmailMessage(string template, object viewModel, string to, string @from, string subject, params string[] replyToAddresses)
{
var compiledTemplate = LoadTemplate(template, viewModel);
return SendEmail(from, to, subject, compiledTemplate, from, null, replyToAddresses);
}
public bool SendEmailMessageWithAttachments(string template, object viewModel, string to, string @from, string subject, List<Attachment> attachedFiles, params string[] replyToAddresses)
{
var compiledTemplate = LoadTemplate(template, viewModel);
return SendEmail(from, to, subject, compiledTemplate, from, attachedFiles, replyToAddresses);
}
public string LoadTemplate(string template, object viewModel)
{
var templateContent = AttemptLoadEmailTemplate(template);
var compiledTemplate = Razor.Parse(templateContent, viewModel);
return compiledTemplate;
}
private string AttemptLoadEmailTemplate(string name)
{
if (File.Exists(name))
{
var templateText = File.ReadAllText(name);
return templateText;
}
var templateName = string.Format("~/Data/EmailTemplates/{0}.html", name); //Just put your path to a scpecific template
var emailTemplate = HttpContext.Current.Server.MapPath(templateName);
if (File.Exists(emailTemplate))
{
var templateText = File.ReadAllText(emailTemplate);
return templateText;
}
return null;
}
private bool SendEmail(string from, string to, string subject, string body, string replyTo, List<Attachment> attachedFiles, params string[] replyToAddresses)
{
replyTo = replyTo ?? from;
attachedFiles = attachedFiles ?? new List<Attachment>();
var message = new MailMessage(from, to, subject, body);
message.ReplyToList.Add(replyTo);
foreach (var attachedFile in attachedFiles)
message.Attachments.Add(attachedFile);
try
{
smtpClient.SendAsync(email, null);
return true;
}
catch (Exception exption)
{
return false;
}
}
希望对你有帮助
编辑:
假设您有一个名为“TestTemplate”的模板:
亲爱的@Model.Name
想象一下,如果这是一个普通的 cshtml 视图,并把你的模型属性像这样:@Model.SomeProperty
干杯。
使用位于我在辅助方法 AttempLoadEmailTemplate 中作为前缀的路径中的上一个模板,您可以发送这样的电子邮件:
var viewModel = new { Name = "Aks", SomeProperty = "Foo" };
mailService.SendEmailMessage("TestTemplate", viewModel, "aks@gmail.com", "daniel@gmail.com", "testing razor engine", null);