Как включить теги `HTML` в` MailMessage` - PullRequest
0 голосов
/ 21 марта 2019

В моем приложении Asp.Net я пытаюсь отформатировать свое исходящее почтовое сообщение с помощью тегов html, чтобы оно выглядело правильно, когда получатель открывает его в своем почтовом ящике. Используя этот пост в качестве примера, я столкнулся с ошибками. Во-первых, у меня есть общий файл 'Utilities', в котором моя функция sendMail настроена на

Utilities.cs

 public static class Utility
{
   public static void sendEmail(string toaddress, string bodycontent, string subjectTxt, string ccAddress)
  {
      string sendEmail = string.Empty;
      try
      {
        System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();
        mailMessage.IsBodyHtml = true;
        System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
       ....
       }
    }
 }

Итак, мой mailMessage.IsBodyHtml устанавливается на true. В моем файле SendEmail.cs это называется, и соответствующие toaddress, bodycontent и т. Д. ... подключаются при нажатии SubmitBtn. bodycontent заполняется автоматически генерируемой строкой, основанной на выборе радиокнопки, и затем подключается к textarea. Из textarea назначается bodycontent. Он работает нормально, пока я не добавлю теги `в сообщение.

SendEmail.cs

protected void ButtonSend_Click(object sender, System.EventArgs e)
{
    ....
  Utility.sendEmail(userEmail, SpellTextBoxNotify.Text, TextBoxSubject.Text, ccClean);
...
}
protected void uxRadioButtonList_SelectedIndexChanged(object sender, EventArgs e)
{
   DataTable emailInfo = _emailDtr.GetTicketInfoByTicketNumber(Session["TicketNumber"].ToString());
   string email = emailInfo.Rows[0]["RequestorEmail"].ToString();
   string name = emailInfo.Rows[0]["RequestorName"].ToString();
   string phone = emailInfo.Rows[0]["RequestorPhone"].ToString();
             .....
   if (uxRadioButtonList.SelectedItem.Text == "Forward")
   {
     TextBoxTo.Text = userEmail;
     TextBoxSubject.Text = "BCA Helpline Request Detailed Response : " + s;
     string new_message = "Please email:steve.mcmaster@ideationinc.com**" +
       "Dear Steve,*<br />" +
       "This BC Helpline inquiry has been flagged as a Tier 4 request.**<br /><br />" +
       "Please see the inquiry below. This ticket will be closed out in our system. Please let us know if you’d like  * <br />" +
       "us to respond.   **<br />" +
       "Contact info: *<br />" +
        name + "*<br />" +
        "P: " + phone + "*<br />" +
        email + "**<br /><br />" +
        "Regards, **<br /><br />" + name + "(CTR) *" + "Dewberry Consultants LLC, Contractor<br />*Federal Emergency Management Agency*<br />FEMA HQ*<br />500 C. St., SW*Washington, D.C. 20472<br />*Email: " + userEmail;
        new_message = new_message.Replace("*", "" + System.Environment.NewLine);
        SpellTextBoxNotify.Text = new_message;
      }

      else if (uxRadioButtonList.SelectedItem.Text == "Interim Response")
      {
       ...
      }
        ....
    }
 }

Это все работает нормально, пока я не добавлю теги <br />. Затем функция кнопки onClick никогда не срабатывает, и в консоли браузера появляется следующее сообщение: "

Sys.WebForms.PageRequestManagerServerErrorException: потенциально Опасное значение Request.Form обнаружено клиентом (ctl00 $ ContentPlaceHolder1 $ SpellTextBoxNotify = "... tesinc.com
Любые предложения о том, как преодолеть эту проблему и заставить работать HTML-теги? ".

Ответы [ 2 ]

1 голос
/ 21 марта 2019

То, как вы его настроили, выглядит так, как будто пользователь вводит код в веб-форму, а это нет-нет.

Так что переместите весь этот код из защищенного void uxRadioButtonList_SelectedIndexChanged (отправитель объекта, EventArgs e) в защищенный void ButtonSend_Click (отправитель объекта, System.EventArgs e) и не беспокойтесь о том, чтобы установить текст текстового поля в тело письма.

Th

1 голос
/ 21 марта 2019

Ваша проблема здесь в том, что вы передаете строку HTML через свойство Text элемента управления на веб-странице.Веб-сервер отклоняет то, что выглядит как попытка внедрить HTML на вашу страницу.

Решением было бы сохранить TextBoxSubject.Text в виде простого текста и преобразовать символы новой строки в HTML в ButtonSend_Click* 1006.*

protected void ButtonSend_Click(object sender, System.EventArgs e)
{
....
  Utility.sendEmail(userEmail, SpellTextBoxNotify.Text, newlineToBR(TextBoxSubject.Text), ccClean);
...
}
...