Action Mailer MVC3 - отправка почты с пользовательским вводом - PullRequest
0 голосов
/ 06 августа 2011

Я использую 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 был «Дай мне миллион долларов!», Тогда отправленное электронное письмо будет Hello.Тема: Дай мне миллион долларов!

Я могу сделать это в "VerificationEmail.thx.cshtml" и посмотреть правильный вывод, но я бы хотел сделать это прямо вТекстовая область EmailModel View.

Вопрос: как я могу это сделать?

1 Ответ

0 голосов
/ 07 августа 2011

Я не уверен, как это сделать в actionmailer, но я знаю, как это сделать с помощью проекта RazorEngine из Nuget. Это позволит вам передать шаблон строки.

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

Тогда просто отправьте результат как тело письма.

Это может привести к ошибкам, если пользователь заставляет свой собственный шаблон внутри текстовой области, например, если он неправильно набрал заглавные буквы при вводе @model. Поэтому, если вы используете этот метод, обязательно включите его в обработку ошибок.

...