Ответ 1
Что вы хотите сделать, это использовать свойство AlternateViews в MailMessage
http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.alternateviews.aspx
Я отправляю почту из своего приложения С#, используя SmtpClient. Отлично работает, но я должен решить, хочу ли я отправить почту как обычный текст или HTML. Интересно, есть ли способ отправить оба? Я думаю, что это называется multipart.
Я немного поработал с Google, но большинство примеров по сути не использовали SmtpClient, но составили все SMTP-тело, что немного "страшно", поэтому мне интересно, что-то построено в .NET Framework 3.0?
Если нет, есть ли действительно хорошо используемая/надежная сторонняя библиотека для отправки электронных писем?
Что вы хотите сделать, это использовать свойство AlternateViews в MailMessage
http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.alternateviews.aspx
Документация 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);
Просто хочу добавить, что вы можете использовать определенные константы MediaTypeNames.Text.Html
и MediaTypeNames.Text.Plain
вместо "text/html"
и "text/plain"
, что всегда предпочтительнее. Он находится в пространстве имен System.Net.Mime
.
Итак, в приведенном выше примере это будет:
AlternateView htmlView = AlternateView.CreateAlternateViewFromString(htmlContent, null, MediaTypeNames.Text.Html);
Я просто собираюсь записать здесь для всех, у кого есть проблемы, и находит свой путь к этой странице - иногда серверы SMTP Outlook будут переконвертировать исходящую электронную почту. Если вы видите, что ваше тело простого текста полностью исчезает, и ничего, кроме основанных на base64 вложений, возможно, потому, что ваш сервер перекодирует электронное письмо. Google SMTP-сервер не переписывает электронную почту - попробуйте отправить туда и посмотреть, что произойдет.
В дополнение к представлениям AlternateViews для добавления как html, так и открытого текстового представления убедитесь, что вы также не устанавливаете тело объекта Mail Message.
// do not do this:
var msg = new MailMessage(model.From, model.To);
msg.Body = compiledHtml;
Как только ваша электронная почта будет содержать содержимое html в обоих представлениях, переопределение альтернативных представлений.
Для людей (таких как я), у которых была проблема gmail, отображающая часть открытого текста вместо части html.
Кажется, что Gmail всегда отображает последнюю часть вашего сообщения.
Итак, если вы добавили часть html перед вашим простым текстовым фрагментом, возможно, gmail всегда будет показывать вариант с открытым текстом.
Чтобы исправить это, вы можете просто добавить часть обычного текста перед вашей частью html.