首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SmtpClient发送原始Html

SmtpClient发送原始Html
EN

Stack Overflow用户
提问于 2012-11-08 11:05:34
回答 2查看 4.7K关注 0票数 2

有人能告诉我为什么下面的代码是用原始Html发送电子邮件的吗?如图所示,当您查看页面源时,电子邮件看起来很像。

为了不包括附件和地址,我已经减少了代码。

如果我禁用行与备用视图,电子邮件呈现正确,但我也想发送一个纯文本版本。

代码语言:javascript
复制
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描述的重音字符和外文字符的问题,并希望将IsBodyHtml设置为true,这迫使我将html设置为主视图。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-08 14:22:24

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

我将字符集更改为UTF-8,并将代码还原为:

代码语言:javascript
复制
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模板,并覆盖重音字符问题。

票数 1
EN

Stack Overflow用户

发布于 2012-11-08 11:26:00

我在这方面也有问题,但是这里有一个非常精简的代码版本,对我来说很有用.

代码语言:javascript
复制
   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;
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13287801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档