21

我正在测试通过 C# 发送一些电子邮件,但我不知道设置有什么IsBodyHtml效果true。无论值如何,我在正文中发送的任何内容都会以“文本/纯文本”的内容类型显示,而我的 HTML 会显示标签,并且全部显示在我的电子邮件客户端 (gmail) 中。那面旗帜实际上应该做什么?

注意:我可以通过创建内容类型为“text/html”的邮件来发送 HTML 电子邮件AlternateView,我只是想了解设置正文应该如何工作。

4

3 回答 3

21

这是我每天使用的 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;
}

[更新]

我最初离开的关键点......

  1. IsBodyHtml 声明您的消息是 HTML 格式的。如果您只发送一个 HTML 视图,这就是您所需要的。

  2. AlternateView 用于存储我的 HTML,这不是发送 HTML 消息所必需的,但如果您想发送包含 HTML 和纯文本的消息,则它是必需的,以防接收者无法呈现 HTML。

我在上面拿出了我的plainView,所以这并不明显,对不起......

这里的关键是,如果您想发送 HTML 格式的消息,您需要使用 IsBodyHtml = true(默认为 false)将您的内容呈现为 HTML。

于 2010-04-01T06:34:00.530 回答
16

我只是在与同样的问题搏斗。我最好的解决方案是完全避免设置对象的Body属性MailMessage。相反,只需添加两个AlternateViews,首先是纯文本,然后是 HTML。确保首先添加纯文本版本,因为 MIME 标准规定:

这些格式按照它们对原作的忠实程度排序,最不忠实的在前,最忠实的在后。

这意味着,您将纯文本版本放在首位,因此客户端应尽可能使用 HTML 版本。

于 2010-06-19T00:42:15.783 回答
-4

IsBodyHtml – 指定正文是否包含文本或 HTML 标记。

正文包含应由 IsBodyHtml 识别的文本或 html 标记。

于 2015-11-24T10:14:42.787 回答