发送格式化电子邮件Asp.Net

时间:2011-11-14 12:19:04

标签: c# asp.net email

MailAddress to = new MailAddress(emailTo, emailToName);
MailMessage message = new MailMessage(from, to);
message.Subject = dtlSubscribe.Rows[i]["NewsLetter_Title"].ToString().Trim();
message.IsBodyHtml = true;
string msgBody = "<html><body>" + dtlSubscribe.Rows[i]["NewsLetter_Body"].ToString().Trim() + "</body></html>";
Console.WriteLine(msgBody);
message.Body = msgBody;
SmtpClient client = new SmtpClient(SMTPServer, 25);
client.Send(message);
message.Dispose();

这就是我在代码中编写电子邮件的方式。

msgBody中,我放<html><body>然后放置从数据库中检索的记录。

这就是我得到的。

<ol> <li>Number1</li> <li>Number2</li> <li><p>Number3</p> </li> </ol> <p><a title="/NHGD/assets/0/71/90/92/b834e617-473d-49e8-beb1-ecade3afdd2f.jpg" onkeypress="this.onclick();" onclick="try{window.open('/NHGD/assets/0/71/90/92/b834e617-473d-49e8-beb1-ecade3afdd2f.jpg', 'MyImage', 'resizable=yes, scrollbars=yes, width=790, height=580')}catch(e){};return false;" href="#"><img title="DiagnosticsService1" border="0" alt="DiagnosticsService1" src="/NHGD/assets/0/71/90/92/thumb_b834e617-473d-49e8-beb1-ecade3afdd2f.jpg" /></a></p> <p> </p> <p>End<br /></p>

除了我自己放入的<html><body>之外......我的数据库记录没有格式化。

所以,我调试了一下......发现了这个..

<html><body>&lt;ol&gt;
&lt;li&gt;Number1&lt;/li&gt;
&lt;li&gt;Number2&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Number3&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a title=&quot;/NHGD/assets/0/71/90/92/b834e617-473d-49e8-beb1-ecade
3afdd2f.jpg&quot; onkeypress=&quot;this.onclick();&quot; onclick=&quot;try{windo
w.open('/NHGD/assets/0/71/90/92/b834e617-473d-49e8-beb1-ecade3afdd2f.jpg', 'MyIm
age', 'resizable=yes, scrollbars=yes, width=790, height=580')}catch(e){};return
false;&quot; href=&quot;#&quot;&gt;&lt;img title=&quot;DiagnosticsService1&quot;
 border=&quot;0&quot; alt=&quot;DiagnosticsService1&quot; src=&quot;/NHGD/assets
/0/71/90/92/thumb_b834e617-473d-49e8-beb1-ecade3afdd2f.jpg&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;End&lt;br /&gt;&lt;/p&gt;</body></html>
<html><body>&lt;ol&gt;
&lt;li&gt;Number1&lt;/li&gt;
&lt;li&gt;Number2&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Number3&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a title=&quot;/NHGD/assets/0/71/90/92/b834e617-473d-49e8-beb1-ecade
3afdd2f.jpg&quot; onkeypress=&quot;this.onclick();&quot; onclick=&quot;try{windo
w.open('/NHGD/assets/0/71/90/92/b834e617-473d-49e8-beb1-ecade3afdd2f.jpg', 'MyIm
age', 'resizable=yes, scrollbars=yes, width=790, height=580')}catch(e){};return
false;&quot; href=&quot;#&quot;&gt;&lt;img title=&quot;DiagnosticsService1&quot;
 border=&quot;0&quot; alt=&quot;DiagnosticsService1&quot; src=&quot;/NHGD/assets
/0/71/90/92/thumb_b834e617-473d-49e8-beb1-ecade3afdd2f.jpg&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;End&lt;br /&gt;&lt;/p&gt;</body></html>

发现当它存储到数据库中时,所有特殊字符都已更改为。

这就是保存到数据库时没有错误的原因。

现在,我的问题是如何将它们改回原来的角色?

这样,它将被正确格式化..

非常感谢..

3 个答案:

答案 0 :(得分:2)

您可以使用HttpUtility.HtmlDecode

答案 1 :(得分:1)

是的,这是真的你无法将html数据保存到数据库。您必须使用Server.HtmlEncode将字符串转换为html编码的字符串,以避免页面验证错误等。

如果您从数据表中访问Html编码数据,请使用Server.HtmlDecode()。

请按照以下方式获取更多信息:

Server.HtmlEncode:http://msdn.microsoft.com/en-us/library/ms525347%28v=vs.90%29.aspx

Server.HtmlDecode:http://msdn.microsoft.com/en-us/library/hwzhtkke.aspx

String msgBody = "<html><body>" + Server.HtmlDecode(dtlSubscribe.Rows[i]["NewsLetter_Body"].ToString().Trim()) + "</body></html>";

答案 2 :(得分:0)

您可以使用HttpUtility HtmlDecode/HtmlEncode方法来获得所需内容。

使用System.Web;

var encoded = HttpUtility.HtmlEncode(未编码);

此外,还有一篇有趣的文章Here

可替换地

public static string CustomHtmlEncode(string value) 
{    
   char[] chars = HttpUtility.HtmlEncode(YourDbString).ToCharArray(); 
   StringBuilder encodedValue = new StringBuilder(); 
   foreach(char c in chars) 
   { 
      if ((int)c > 127) // above normal ASCII 
         encodedValue.Append("&#" + (int)c + ";"); 
      else 
         encodedValue.Append(c); 
   } 
   return encodedValue.ToString(); 
}