Манипулировать строкой Rebex.MailMessage Html

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

Я попытался использовать построитель строк для этого, однако я обнаружил, что мое тело сообщения является строкой на основе HTML.

Я хочу знать, если есть способ, которым я могу добавить значения, которые я хочу добавить в определенный момент в этой строке HTML?

Ниже приведен раздел HTML-строки, которой я хочу манипулировать. Мой текст должен быть вставлен непосредственно после тега body.

 <body lang=EN-GB link=blue vlink=purple>
   <div class=WordSection1>
     <p class=MsoNormal>
       <span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";color:black'>Another test for AppendLine();<o:p></o:p>
       </span>
     </p>

Вот как я пытался это сделать:

 StringBuilder sb = new StringBuilder();

            sb.Append("From: ");
            sb.Append(message.From.ToString());
            sb.AppendLine();
            sb.Append("Sent: ");
            sb.Append(message.Date.ToString());
            sb.AppendLine();
            sb.Append("To: ");
            sb.Append(message.To.ToString());
            sb.AppendLine();
            sb.Append("Subject: ");
            sb.Append(message.Subject);
            sb.AppendLine();
            sb.Append(message.BodyHtml);

К сожалению, это просто напечатало мои значения From, Sent, To, Subject в одну строку, а затем вывел раздел html.

Если потребуется дополнительная информация, пожалуйста, дайте мне знать, и я предоставлю ее.

1 ответ

Решение

Вместо добавления основного HTML, попробуйте это регулярное выражение заменить:

StringBuilder sb = new StringBuilder();

sb.Append("From: ");
sb.Append(message.From.ToString());
...
sb.Append("Subject: ");
sb.Append(message.Subject);
sb.AppendLine();

// not guaranteed to work with arbitrary HTML strings
Regex regex = new Regex(@"(<body[^>]*>)", RegexOptions.IgnoreCase);
message.BodyHtml = regex.Replace(message.BodyHtml, "$1\r\n" + sb.ToString());

Отказ от ответственности: имейте в виду, что обработка HTML с помощью регулярных выражений обычно считается плохой идеей. Хотя приведенный выше код может работать в 98% случаев, регулярные выражения не подходят для анализа произвольного HTML. HTML слишком сложен для регулярных выражений. Если вам нужно обрабатывать произвольные HTML-тела (не только те, что указаны выше), я настоятельно рекомендую использовать надлежащий HTML-анализатор, такой как HTML Agility Pack, даже для, казалось бы, простых операций, таких как вставка текста после body тег.

Другие вопросы по тегам