【问题标题】:SmtpClient sending raw HtmlSmtpClient 发送原始 Html
【发布时间】:2012-10-28 13:49:53
【问题描述】:

谁能告诉我为什么以下代码以原始 Html 发送电子邮件?就像您查看页面源时的电子邮件一样。

我已将代码删减,以免包含附件和地址。

如果我禁用带有备用视图的行,电子邮件会正确呈现,但我还想发送纯文本版本。

using (SmtpClient client = GetSmtpClient(settings)) {
    using (MailMessage message = new MailMessage()) {
        message.IsBodyHtml = true;
        message.BodyEncoding = System.Text.Encoding.GetEncoding("iso-8859-1");
        message.To.Add(toList);
        message.Subject = subject;
        message.Body = htmlTemplate;
        message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(textTemplate, new ContentType("text/plain")));
        client.Send(message);
     }
}

编辑:消息最初是发送文本作为主体,html 作为替代视图,但我遇到了here 所述重音和外来字符的问题,并想设置@ 987654323@ 为 true,这迫使我将 html 设置为主视图。

【问题讨论】:

  • 您是否尝试过将邮件正文设置为文本版本,然后将 HTML 作为备用视图?

标签: c# html smtp sendmail


【解决方案1】:

我也遇到了这个问题,但这里有一个非常适合我的代码版本......

   private MailMessage CreateEmailMessage(string emailAddress) {

        MailMessage msg = new MailMessage();

        msg.From = new MailAddress(FromEmailAddress, FromName);
        msg.To.Add(new MailAddress(emailAddress));
        msg.Subject = "Msg Subject here";

        string textBody = File.ReadAllText(TextTemplateFile);


        string htmlBody = "";
        if (EmailFormat == "html") {
            htmlBody = File.ReadAllText(HtmlTemplateFile);

            foreach (Attachment inline in InlineAttachments) {
                inline.ContentDisposition.Inline = true;
                msg.Attachments.Add(inline);
            }

            AlternateView alternateHtml = AlternateView.CreateAlternateViewFromString(htmlBody,
                                                                                      new ContentType("text/html"));
            msg.AlternateViews.Add(alternateHtml);

            AlternateView alternateText = AlternateView.CreateAlternateViewFromString(textBody,
                                                                                      new ContentType("text/plain"));
            msg.AlternateViews.Add(alternateText);

        }
        else {
            msg.Body = textBody;
        }

        return msg;
    }

【讨论】:

  • 假设您只需要 EmailFormat=="html" 选项,这是否也可以解决您的重音字符问题?
【解决方案2】:

最后我意识到传递给方法的“htmlTemplate”字符串在电子邮件的头部定义了charset=ISO-8859-1,因此覆盖了我在代码中所做的任何更改。

我将字符集更改为UTF-8,并将我的代码恢复为:

using (SmtpClient client = GetSmtpClient(settings)) {
  using (MailMessage message = new MailMessage()) {
    message.To.Add(toList);
    message.Subject = subject;
    message.Body = textTemplate;          
    message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(htmlTemplate, new ContentType("text/html")));
    client.Send(message);
  }
}

现在可以发送文本和 html 模板以及解决重音字符问题。

【讨论】:

  • 如何更改?
猜你喜欢
  • 2013-12-28
  • 1970-01-01
  • 2018-06-04
  • 2021-06-23
  • 1970-01-01
  • 2012-07-28
  • 2014-08-09
相关资源
最近更新 更多