2009-09-21 43 views
4

我有一個ASP.Net/MVC應用程序,我試圖發送HTML電子郵件。我正在通過讀取帶有標記的HTML文件來完成此操作,然後替換標記。這部分是罰款和生成HTML這就是我想要的東西,但是當我發送電子郵件,就是我收到的樣子 -在C中使用SmtpClient發送電子郵件時出現問題#

<style type=3D"text/css">= 
=0D=0A.styleTitles=0D=0A{=0D=0Afont-weight:=bold;=0D=0A}=0D=0A 
.style1=0D=0A  {=0D=0A 

,應該看起來像

<style type="text/css"> 
    .styleTitles 
    { 
     font-weight: bold; 
    } 
    .style1 
    { 
     height: 15px; 
    } 

我已經看着網上,我似乎無法找到正確的語法來發送消息。我已經看到了一些解決方案,但似乎沒有任何工作。

我目前的測試代碼 -

SmtpClient smtpclient = new SmtpClient(); 
MailMessage message = new MailMessage(); 

MailAddress SendFrom = new MailAddress("[email protected]"); 
MailAddress SendTo = new MailAddress("[email protected]"); 
MailMessage MyMessage = new MailMessage(SendFrom, SendTo); 

var plainView = AlternateView.CreateAlternateViewFromString(msgBody,null,"text/html"); 
plainView.TransferEncoding = System.Net.Mime.TransferEncoding.SevenBit; 
MyMessage.AlternateViews.Add(plainView); 
MyMessage.IsBodyHtml = true; 
MyMessage.Subject = subjectLine; 
MyMessage.Body = msgBody; 
smtpclient.Send(MyMessage); 

有什麼建議?

回答

6

也許是這樣的:

var plainView = AlternateView.CreateAlternateViewFromString(msgBody, new ContentType("text/plain; charset=UTF-8")); 

MyMessage.AlternateViews.Add(plainView); 
MyMessage.BodyEncoding = Encoding.UTF8; 
MyMessage.IsBodyHtml = true; 
MyMessage.Subject = subjectLine; 
MyMessage.Body = msgBody; 
+0

這導致消息以base64編碼發送,它似乎工作。謝謝 我已經跟蹤了真正的問題,事實上默認情況下「Content-Transfer-Encoding:quoted-printable」設置會導致所有問題。 quoted-printable設計用= 0D取代\ n,\ r用= 0A和= as = 3D取代。我還沒有找到一個更好的方法來改變傳輸編碼,所以它是8位,這會更簡單。無論如何。謝謝。 – 2009-09-21 22:40:00

3

試試這個變化:

plainView.TransferEncoding = System.Net.Mime.TransferEncoding.Base64; 
+0

d編號似乎沒有任何影響 – 2009-09-21 21:15:21

0

這可能不是你所需要的答案,但你有沒有考慮過使用XSLT爲您的電子郵件的翻譯?我忙於發送電子郵件的項目,將XSLT作爲解決方案的一部分很不錯。也意味着將來可以使用行業標準化的方式輕鬆定製模板,也許您應該考慮進行更改?

+0

你確實有一點,但代碼已經比客戶想要的更好。所以重寫並不是真的有序。 但是,我會記住我的下一個項目 – 2009-09-21 21:16:36

3

設置傳輸編碼到8位,從here拍攝,你必須:

message.Body = null; 
using (AlternateView body = 
AlternateView.CreateAlternateViewFromString(
    "Some Message Body", 
    message.BodyEncoding, 
    message.IsBodyHtml ? "text/html" : null)) 
{ 
body.TransferEncoding = 
    TransferEncoding.SevenBit; 
message.AlternateViews.Add(body); 
} 
0

很奇怪,但更簡單的代碼是爲我工作:

var message = new MailMessage(Email, mailTo); 
message.IsBodyHtml = true; 
message.SubjectEncoding = message.BodyEncoding = Encoding.UTF8; 
message.Subject = "Subject"; 
message.Body = msgBody; 
smtpclient.Send(message); 
-1
string emailMessage="a skjdhak kdkand"; 
MailMessage mail = new MailMessage(); 
        mail.To.Add(obj_Artist.EmailAddress); 
        mail.From = new MailAddress(EmailList[0].FromEmail, "Sentric Music - Rights Management"); 
         mail.Subject = (EmailList[0].Subject); 

        if (EmailList[0].BCC1 != null && EmailList[0].BCC1 != string.Empty) 
        { 
         mail.Bcc.Add(EmailList[0].BCC1); 
        } 
        if (EmailList[0].BCC2 != null && EmailList[0].BCC2 != string.Empty) 
        { 
         mail.Bcc.Add(EmailList[0].BCC2); 
        } 
        if (EmailList[0].CC1 != null && EmailList[0].CC1 != string.Empty) 
        { 
         mail.CC.Add(EmailList[0].CC1); 
        } 
        if (EmailList[0].CC2 != null && EmailList[0].CC2 != string.Empty) 
        { 
         mail.CC.Add(EmailList[0].CC2);`enter code here` 
        } 


        string Body = emailMessage; 


        mail.Body = Body; 
        mail.BodyEncoding = System.Text.Encoding.GetEncoding("utf-8"); 
        mail.IsBodyHtml = true; 
        AlternateView plainView = AlternateView.CreateAlternateViewFromString 
        (System.Text.RegularExpressions.Regex.Replace(Body, @"<(.|\n)*?>", string.Empty), null, "text/plain"); 
        System.Net.Mail.AlternateView htmlView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(Body, null, "text/html"); 
        mail.AlternateViews.Add(plainView); 
        mail.AlternateViews.Add(htmlView); 
        SmtpClient smtp = new SmtpClient(); 
        smtp.EnableSsl = true; 
        smtp.Send(mail); 
相關問題