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

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

Примечание: Я могу послать электронное письмо HTML очень хорошо путем создания AlternateView с типом контента "текста/HTML" я просто хочу понять, как установка тела, как предполагается, работает.

17
задан Eddie Deyo 31 March 2010 в 19:18
поделиться

2 ответа

Вот отрывок для моего 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's 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;
}

[UPDATE]

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

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

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

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

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

18
ответ дан 30 November 2019 в 12:35
поделиться

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

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

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

15
ответ дан 30 November 2019 в 12:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: