Вы не предоставили образец данных тела сообщения или образец разметки источника сгенерированных писем, поэтому трудно быть на 100% основной причиной, но здесь есть несколько небольших проблем, которые могут способствовать:
1) Вы никогда не устанавливаете основной текст вашего письма.Вы устанавливаете альтернативные представления, но не базовое тело.Поэтому, даже если вы установили опцию IsBodyHtml, ей не на что действовать.
2) Вы добавили два идентичных альтернативных представления.Это, вероятно, не имеет значения, но это явно избыточно.Если вы установили тело в HTML, а затем фактически включили основной текст, вам в любом случае не понадобятся эти альтернативные представления.
3) Вышеприведенные слова - недоразумения, но я думаю, что это решающий аргумент: я настоятельноподозреваю, что вы неправильно поняли, что делает HttpUtility.HtmlEncode () .
Рассмотрим следующий пример:
string myString = "<b>Hello World</b>";
// Encode the string.
string myEncodedString = HttpUtility.HtmlEncode(myString);
Console.WriteLine($"HTML Encoded string is: {myEncodedString}");
StringWriter myWriter = new StringWriter();
// Decode the encoded string.
HttpUtility.HtmlDecode(myEncodedString, myWriter);
string myDecodedString = myWriter.ToString();
Console.Write($"Decoded string of the above encoded string is: {myDecodedString}");
Это выдаст:
HTML Encoded string is: <b>Hello World</b>
Decoded string of the above encoded string is: <b>Hello World</b>
Live Demo: https://dotnetfiddle.net/9j46WN
Как видите, кодирование строки, содержащей HTML, преобразует управляющие символы HTML в их закодированное представление.Это обычно используется, чтобы гарантировать, что символы не обрабатываются как HTML при просмотре (т.е. они рассматриваются как фрагменты текста, отображаемого на экране, а не как часть разметки документа HTML).Это полная противоположность того, что вы хотите.
Например, когда я помещаю эти две строки в эту HTML-страницу в виде необработанной разметки (а не в блоке «кода»), получаетсяas:
Кодированная строка HTML: Hello World
Декодированная строка указанной выше кодированной строки: Hello World
Обратите внимание, как кодированный отображает HTML, а не , используя it?
Так что я думаю, что вы можете отказаться от Html-кодировки.Предполагая, что вы уже предоставляете HTML-разметку для вашего метода в message.Body
, вы можете использовать ее как есть.И если вы настроите тело сообщения обычным способом, вы также сможете обойтись без альтернативных представлений.Вот то, что я думаю, ваш код должен быть изменен на:
void sendMail(IdentityMessage message)
{
MailMessage msg = new MailMessage();
msg.From = new MailAddress(ConfigurationManager.AppSettings["Email"].ToString());
msg.To.Add(new MailAddress(message.Destination));
msg.IsBodyHtml = true;
msg.Body = message.Body;
msg.Subject = message.Subject;
SmtpClient smtpClient = new SmtpClient("smtp-mail.outlook.com", Convert.ToInt32(587));
System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["Email"].ToString(), ConfigurationManager.AppSettings["Password"].ToString());
smtpClient.Credentials = credentials;
smtpClient.EnableSsl = true;
smtpClient.Send(msg);
}