2009-09-21 60 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); 
相关问题