Проблема с электронной почтой MVC

#c# #asp.net-mvc #formatting

#c# #asp.net-mvc #форматирование

Вопрос:

Вот мои два действия для отправки электронных писем через MVC:

 [HttpGet]
    // GET: EmailForms
    public ActionResult EmailForm(int id)
    {
        EmailFormModel emailModel = new EmailFormModel();
        ChosenWT cwt = new ChosenWT();
        OInfo person= new OInfo();
        using (var db = new OWTEntities())
        {
            cwt = db.ChosenWTs.Find(id);
            person= db.OInfoes.Find(cwt.OID);
        }
        emailModel.Message = "This is paragraph 1.nnThis is paragraph 2.nnThis is paragraph 3." // issue deals with this property

        emailModel.FromEmail = User.Identity.Name.Split('\')[1]   "@domain.com";
        string Logon = Common.GetLogon(person.IBM);
        emailModel.ToEmail = Logon   "@domain.com";
        return View(emailModel);
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> EmailForm(EmailFormModel model)
    {
        if (ModelState.IsValid)
        {
            var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
            var message = new MailMessage();
            message.To.Add(new MailAddress(model.ToEmail));
            message.From = new MailAddress(model.FromEmail);
            message.Subject = "Test Program";
            message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message); // This doesn't keep the paragraph formatting like in the [HttpGet] Action.. Instead it just combines it all into 1 big paragraph..

            message.IsBodyHtml = true;

            using (var smtp = new SmtpClient())
            {
                smtp.Host = "smtp.test.server";
                await smtp.SendMailAsync(message);
                return RedirectToAction("Index", "OInfoes");
            }
        }
        return View(model);
    }
  

Если вы прочитали комментарии, которые я вставил в приведенный выше код, это проблема с этим кодом.

Я могу отформатировать Message так, чтобы при первом заходе пользователя на страницу строка форматировалась в виде абзаца .. но когда я нажимаю Отправить, HttpPost действие принимает сообщение и игнорирует nn и объединяет все это в один гигантский абзац.

Итак, я попытался включить <p></p> символы в строку, но когда я нажимаю отправить, я получаю сообщение об ошибке, в котором говорится, что эти символы потенциально опасны.

Есть ли способ, чтобы форматирование оставалось неизменным при отправке?

Любая помощь приветствуется.

Комментарии:

1. какова точная ошибка?

Ответ №1:

Причина, по которой вы получаете ошибку, заключается в том, что при отправке формы платформа asp.met mvc проверяет тело запроса на предмет наличия в нем потенциально опасного содержимого в виде HTML-разметки (подумайте о внедрении скрипта). Если он обнаружит какое-либо опасное содержимое, модуль проверки запроса выдаст сообщение об ошибке. Это сделано специально

Вы можете применить AllowHtml атрибут к свойству, которое содержит разметку html в вашем классе модели представления, чтобы платформа проверки запроса не отклоняла отправленные данные.

 public class EmailFormModel
{      
  [AllowHtml]
  public string Message { set;get;}

  public string FromEmail {set;get;}

  //Other properties of view model goes here

}
  

Комментарии:

1. Ах, это сработало. Я знал, что означает ошибка.. Я не имел в виду, что эта часть вопроса должна быть в центре внимания.. Я просто хотел знать, есть ли способ сохранить форматирование.

2. Если вы IsBodyHtml установили значение true и указали html-метку (например, <p> теги). Это должно сработать.