Отправка составной электронной почты в ASP.NET с помощью System.Net.Mail - полученная электронная почта не имеет тела

Меня очень смущает проблема с отправкой составных писем в ASP.NET. Я использую код, который, я уверен, работал раньше, но в полученном электронном письме нет тела.

Ключевой бит кода таков:

message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(plainBody, null, MediaTypeNames.Text.Plain));
message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html));

Я могу убедиться, что plainBody является допустимым текстом, а htmlBody — допустимым HTML. Кроме того, я создаю очень простое MailMessage с темой, от и до. Я не устанавливаю никаких других свойств MailMessage и отправляю с помощью стандартного System.Net.Mail.SmtpClient, используя учетные данные Google, которые я использовал много раз раньше.

Когда письмо приходит, оно оказывается совершенно пустым.

Если я заменю две приведенные выше строки следующими (без других изменений), то электронное письмо в формате HTML будет получено правильно.

message.Body = htmlBody;
message.IsBodyHtml = true;

Так что может быть причиной моих пустых электронных писем? Я попытался упростить HTML вплоть до одного слова, заключенного в теги <b>, чтобы оно не было связано с содержимым тела, и, как я уже сказал, я использовал подобный код много раз и без проблем. Я проверил получение электронных писем в GMail и Office 365, оба с одинаковым результатом.

Предложения очень приветствуются.


person Tom Troughton    schedule 26.10.2015    source источник
comment
В коде, который вы показываете, нет ничего плохого. Возможно, это еще один фрагмент кода, в котором есть проблема. Можете ли вы привести полный пример? Кроме того, на принимающей стороне вы можете открыть сообщение как текст (просмотреть сообщение как сообщение MIME) и посмотреть, содержит ли оно тела?   -  person Yacoub Massad    schedule 27.10.2015


Ответы (2)


Почему бы вам не разбить этот фрагмент кода на два объекта.

AlternateView alternate = AlternateView.CreateAlternateViewFromString(body, mimeType);
message.AlternateViews.Add(alternate);

Поставьте точку останова во второй строке и посмотрите, что находится в альтернативном объекте. Возможно, это может дать вам немного больше понимания того, что происходит в вашем коде.

person JEuvin    schedule 26.10.2015

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

person David BS    schedule 26.10.2015