发送格式化的电子邮件

本文关键字:电子邮件 格式化 | 更新日期: 2023-09-27 18:14:37

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>

发现在存入数据库时,所有的特殊字符都变成了那个

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

现在,我的问题是如何把它们变回原来的字符??

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

发送格式化的电子邮件

您可以使用HttpUtility。HtmlDecode

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

,如果你是从数据表中访问Html编码的数据,那么使用Server.HtmlDecode()。

查看更多信息:

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

服务器。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>";

您可以使用HttpUtility HtmlDecode/HtmlEncode方法来实现您所需要的。

使用包含

;

var encoded = httutility . htmlcode(未编码);

还有,这里有一篇有趣的文章

交替

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(); 
}