Отправка отформатированного электронного письма Asp.Net - PullRequest
2 голосов
/ 14 ноября 2011
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 ]

2 голосов
/ 14 ноября 2011

вы можете использовать HttpUtility.HtmlDecode

1 голос
/ 14 ноября 2011

да, это правда, вы не можете сохранить данные HTML в базу данных.Вы должны преобразовать свою строку в строку в кодировке html, используя Server.HtmlEncode, чтобы избежать ошибки проверки страницы и т. д.

, и если вы обращаетесь к данным, закодированным в формате 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>";
0 голосов
/ 14 ноября 2011

Вы можете использовать HttpUtility HtmlDecode/HtmlEncode метод для достижения того, что вам нужно.

с использованием System.Web;

var encoded = HttpUtility.HtmlEncode (uncocode);

Также есть интересная статья Здесь

Поочередно

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(); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...