2009-08-25 3 views
39

Как отправить HTML-письмо? Я использую код в this answer для отправки писем с SmtpClient, но они всегда являются обычным текстом, поэтому ссылка в приведенном ниже примере сообщения не отформатирована как таковая.Отправить HTML-адрес электронной почты через C# с помощью SmtpClient

<p>Welcome to SiteName. To activate your account, visit this URL: <a href="http://SiteName.com/a?key=1234">http://SiteName.com/a?key=1234</a>.</p> 

Как включить HTML в сообщения электронной почты, которые я отправляю?

+1

ropstah: ТВНЫ я был смущен и написал в одном из ваших комментариев, что в SmtpClient нет IsBodyHtml. Иосия, который показал мне сделать это с MailMessage. – 2009-08-26 04:02:18

ответ

8

Применить правильную кодировку Mailbody.

mail.IsBodyHtml = true; 
18

Я считаю, что это было что-то вроде:

mailObject.IsBodyHtml = true; 
+0

ropstah: TBH я был в замешательстве и написал в одном из двух комментариев, что в SmtpClient нет IsBodyHtml. Иосия, который показал мне сделать это с MailMessage. – 2009-08-26 04:02:56

81

Это то, что я делаю:

MailMessage mail = new MailMessage(from, to, subject, message); 
mail.IsBodyHtml = true; 
SmtpClient client = new SmtpClient("localhost"); 
client.Send(mail); 

Обратите внимание, что я установил почтовое сообщение HTML истину: mail.IsBodyHtml = true;

+5

Стоит отметить, что как MailMessage, так и 'SmtpClient' реализуют' IDisposable' и должны быть соответствующим образом размещены. – djs

1

У меня есть идея, вы можете добавить флажок в свой проект для отправка по электронной почте, как HTML в качестве опции для пользователя, и добавить этот код, чтобы включить его:

  MailMessage mail = new MailMessage(from, to, subject, message); 

     if(checkBox1.CheckState == CheckState.Checked) 
      { 
       mail.IsBodyHtml = true; 
      } 

     SmtpClient client = new SmtpClient("localhost"); 

     client.Send(mail); 
13

IsBodyHtml = true, несомненно, является наиболее важной частью.

Но если вы хотите, чтобы обеспечить электронную почту как с текстом/равнинной частью и текст/HTML частью, составленной чередуется, также возможно с помощью AlternateView класса:

MailMessage msg = new MailMessage(); 
AlternateView plainView = AlternateView 
    .CreateAlternateViewFromString("Some plaintext", Encoding.UTF8, "text/plain"); 
// We have something to show in real old mail clients. 
msg.AlternateViews.Add(plainView); 
string htmlText = "The <b>fancy</b> part."; 
AlternateView htmlView = 
    AlternateView.CreateAlternateViewFromString(htmlText, Encoding.UTF8, "text/html"); 
msg.AlternateViews.Add(htmlView); // And a html attachment to make sure. 
msg.Body = htmlText; // But the basis is the html body 
msg.IsBodyHtml = true; // But the basis is the html body 
+0

Действительно ли 'AlternateView' для' htmlView' действительно нужен? Поскольку вы уже установили тело как 'htmlText'. Разве это лишнее, чтобы снова установить его в качестве альтернативного вида? –

+1

Не только это необходимо, но и важно, чтобы он был добавлен после простого альтернативного вида. см. http://stackoverflow.com/questions/5188605/gmail-displays-plain-text-email-instead-html. Но указание Body и IsBodyHtml не требуется, если вы добавили альтернативный вид html. – FunkyOne

Смежные вопросы