Action Mailer MVC3 - 使用用户输入发送邮件

时间:2011-08-06 10:32:59

标签: asp.net-mvc-3 actionmailer

我正在使用ActionMailer发送带有用户输入的电子邮件,如下所示:

这是我的MailController:

public EmailResult VerificationEmail(EmailModel model)
    {
          To.Add(model.To);
          From = model.From;
          Subject = model.Subject;
          return Email("VerificationEmail", model);
    }

这是我的EmailModel:

public string To { get; set; }
public string From { get; set; }
public string Subject { get; set; }
public string Body { get; set; }

这是我的VerificationEmail.txt.cshtml

@model ...Models.EmailModel
@Model.Body

这是我的EmailModel视图:

<div class="editor-field">
    @Html.TextAreaFor(x => x.Body)
    @Html.ValidationMessageFor(x => x.Body)
</div>

这可以按预期工作,用户可以修改电子邮件正文的内容并发送自定义电子邮件。但我想要实现的是让用户写下类似的内容:

你好。主题是:@ Model.Subject

..并在发送的电子邮件中查看正确的输出。例如,如果EmailModel.Subject是“Gimme一百万美元!”,那么发送的电子邮件将是 Hello。主题是:给我一百万美元!

我可以在“VerificationEmail.thx.cshtml”中执行此操作并查看正确的输出,但我希望能够直接在EmailModel View的textarea中执行此操作。

问题是:我该怎么做?

1 个答案:

答案 0 :(得分:0)

我不知道如何在动作管理器中执行此操作,但我知道如何使用Nuget的RazorEngine项目来完成它。它会让你传入一个字符串模板。

RazorEngine.Razor.Compile(template, typeof(EmailModel), "EmailModel")
var result = RazorEngine.Razor.Run<EmailModel>(model, "EmailModel")

然后只需将结果作为电子邮件正文发送。

如果您让用户在textarea中创建自己的模板,这将是容易出错的,例如,如果他们在键入@model时输入大写错误。因此,如果您使用此方法,请确保将其包装在一些错误处理中。

相关问题