2012-11-08 56 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