Подтвердить что ты не робот

Отправка почты как HTML, так и обычного текста в .net

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

Я немного поработал с Google, но большинство примеров по сути не использовали SmtpClient, но составили все SMTP-тело, что немного "страшно", поэтому мне интересно, что-то построено в .NET Framework 3.0?

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

4b9b3361

Ответ 2

Документация 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);

Ответ 3

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

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

AlternateView htmlView = AlternateView.CreateAlternateViewFromString(htmlContent, null, MediaTypeNames.Text.Html);

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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

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

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

Чтобы исправить это, вы можете просто добавить часть обычного текста перед вашей частью html.