Что делает MailMessage.IsBodyHtml?

Я тестирую отправку некоторых электронных писем через С#, но не могу сказать, какой эффект имеет значение IsBodyHtml to true. Независимо от значения, все, что я посылаю в своем теле, появляется с типом контента "text/plain", а мой HTML показывает теги и все в моем почтовом клиенте (gmail). Что должен делать этот флаг?

ПРИМЕЧАНИЕ. Я могу отправить HTML-письмо просто отлично, создав AlternateView с типом контента "text/html", я просто хочу понять, как должна работать настройка тела.

Ответы

Ответ 1

Вот отрывок для моего помощника SMTP, который я использую каждый день....

public bool SendMail(string strTo, string strFrom, string strCc, string strBcc, string strBody, string strSubject)
{

    bool isComplete = true;

    SmtpClient smtpClient = new SmtpClient();
    MailMessage message = new MailMessage();

    try
    {
        //Default port will be 25
        smtpClient.Port = 25;

        message.From = new MailAddress(smtpEmailSource);
        message.To.Add(strTo);
        message.Subject = strSubject;

        if (strCc != "") { message.Bcc.Add(new MailAddress(strCc)); }
        if (strBcc != "") { message.Bcc.Add(new MailAddress(strBcc)); }

        message.IsBodyHtml = true;

        string html = strBody;  //I usually use .HTML files with tags (e.g. {firstName}) I replace with content.  This allows me to edit the emails in VS by opening a .HTML file and it easy to do string replacements.

        AlternateView htmlView = AlternateView.CreateAlternateViewFromString(html, new ContentType("text/html"));

        message.AlternateViews.Add(htmlView);


        // Send SMTP mail
        smtpClient.Send(message);
    }
    catch
    {
        isComplete = false;
    }

    return isComplete;
}

[ОБНОВЛЕНИЕ]

Ключевыми моментами, которые я изначально оставил...

  • IsBodyHtml заявляет, что ваше сообщение отформатировано в формате HTML. Если вы отправляете только один вид HTML, это все, что вам нужно.

  • AlternateView используется для хранения моего HTML-кода, это не требуется для отправки HTML-сообщения, но оно требуется, если вы хотите отправить сообщение с HTML и обычным текстом, если получатель не сможет отобразить HTML-код.

Я вынул свой plainView выше, так что это не очевидно, извините...

Ключевым моментом здесь является то, что если вы хотите отправить сообщение в формате HTML, вам нужно использовать IsBodyHtml = true (по умолчанию - false), чтобы ваш контент отображался как HTML.

Ответ 2

Я просто боролся с этой же проблемой. Лучшим решением было избежать установки свойства Body объекта MailMessage. Вместо этого просто добавьте два AlternateView s, сначала простой текст, а затем HTML. Обязательно добавьте версию обычного текста, потому что стандарт MIME говорит, что:

Форматы упорядочены, насколько они верны оригиналу, с наименее верными первыми и самыми верными последними.

Это означает, что вы сначала ставите текстовую версию, поэтому клиенты должны использовать HTML-версию, если это возможно.

Ответ 3

IsBodyHtml - укажите, содержит ли текст текст или HTML.

Тело содержит текстовую или html-разметку, которая должна быть идентифицирована IsBodyHtml.