2012-11-08 65 views
2

任何人都可以告诉我为什么下面的代码发送原始Html中的电子邮件?如其中,当您查看页面源时,该电子邮件看起来像。SmtpClient发送原始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碰到一个问题,想设置IsBodyHtml为true,这迫使我将HTML设置为主视图。

+0

您是否尝试将消息正文设置为文本版本,然后将HTML作为备用视图? –

+0

请参阅编辑Justin – DevDave

回答

1

在我意识到,“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模板以及覆盖重音字符的问题。

+0

我该如何改变它? – Ron

2

我有这个问题,也不过这里有一个为我工作的代码非常缩减版本,...

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; 
    } 
+0

假设您只需要'EmailFormat ==“html”'选项,这是否也可以解决您的重音字符问题? – Vicki