Отправка почты как в формате HTML, так и в виде обычного текста в .net - PullRequest
51 голосов
/ 05 сентября 2008

Я отправляю почту из моего приложения на C #, используя SmtpClient. Прекрасно работает, но я должен решить, хочу ли я отправить письмо в виде обычного текста или HTML. Интересно, есть ли способ отправить оба? Я думаю, что это называется multipart.

Я немного погуглил, но в большинстве примеров, по сути, не использовался SmtpClient, а были собраны все элементы SMTP-Body, что немного «страшно», поэтому мне интересно, встроено ли что-то в .net Framework 3.0?

Если нет, то есть ли действительно хорошо используемая / надежная сторонняя библиотека для отправки электронных писем?

Ответы [ 6 ]

58 голосов
/ 05 сентября 2008

Документация MSDN, кажется, упускает одну вещь, хотя мне пришлось установить тип контента вручную, но в остальном он работает как чудо: -)

MailMessage msg = new MailMessage(username, nu.email, subject, body);
msg.BodyEncoding = Encoding.UTF8;
msg.SubjectEncoding = Encoding.UTF8;

AlternateView htmlView = AlternateView.CreateAlternateViewFromString(htmlContent);
htmlView.ContentType = new System.Net.Mime.ContentType("text/html");
msg.AlternateViews.Add(htmlView);
44 голосов
/ 05 сентября 2008

Что вы хотите сделать, это использовать свойство AlternateViews в MailMessage

http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.alternateviews.aspx

30 голосов
/ 24 августа 2009

Просто хочу добавить, что вы можете использовать определенные константы MediaTypeNames.Text.Html и MediaTypeNames.Text.Plain вместо "text/html" и "text/plain", что всегда является предпочтительным способом. Он находится в System.Net.Mime пространстве имен.

Итак, в приведенном выше примере это будет:

AlternateView htmlView = AlternateView.CreateAlternateViewFromString(htmlContent, null, MediaTypeNames.Text.Html);
11 голосов
/ 28 сентября 2009

Я просто собираюсь разместить здесь заметку для всех, у кого возникли проблемы, и которые попадают на эту страницу - иногда SMTP-серверы Outlook преобразуют исходящую электронную почту. Если вы видите, что ваше текстовое тело полностью исчезло, и в нем нет ничего, кроме вложений в кодировке base64, возможно, ваш сервер перекодирует электронную почту. SMTP-сервер Google не перекодирует электронную почту - попробуйте отправить его туда и посмотреть, что получится.

7 голосов
/ 25 июня 2016

Помимо использования представлений AlternateViews для добавления html и представления в виде простого текста, убедитесь, что вы также не устанавливаете тело объекта Mail Message .

// do not do this: 
var msg = new MailMessage(model.From, model.To);
msg.Body = compiledHtml;  

Поскольку ваша электронная почта будет содержать html-содержимое в обоих представлениях, переопределяя альтернативные представления.

4 голосов
/ 20 октября 2017

Для людей (таких как я), у которых была проблема с отображением в gmail открытого текста вместо html-части.

Gmail, кажется, всегда отображает последнюю часть вашего сообщения.

Так что, если вы добавили html-часть до того, как ваши шансы на использование открытого текста будут представлены, gmail всегда будет показывать вариант в виде простого текста.

Чтобы это исправить, вы можете просто добавить текстовую часть перед HTML-частью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...