2009-08-25 7 views
39

Comment envoyer un e-mail HTML? J'utilise le code dans this answer pour envoyer des emails avec SmtpClient, mais ils sont toujours en texte brut, de sorte que le lien dans le message d'exemple ci-dessous n'est pas formaté en tant que tel.Envoyer un e-mail HTML via C# avec 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> 

Comment activer le code HTML dans les messages électroniques que j'envoie?

+1

ropstah: TBH j'étais confus et a écrit dans un de vos commentaires qu'il n'y a pas IsBodyHtml dans SmtpClient. Josiah est qui m'a montré pour le faire avec MailMessage. –

Répondre

8

Appliquez le codage correct du corps de courrier.

mail.IsBodyHtml = true; 
18

je crois qu'il était quelque chose comme:

mailObject.IsBodyHtml = true; 
+0

ropstah: TBH j'ai été confus et j'ai écrit dans l'un des deux commentaires qu'il n'y a pas IsBodyHtml dans SmtpClient. Josiah est qui m'a montré pour le faire avec MailMessage. –

81

Voici ce que je fais:

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

Notez que je mets le message html true: mail.IsBodyHtml = true;

+5

Il convient de noter que 'MailMessage' et' SmtpClient' implémentent 'IDisposable' et doivent être éliminés en conséquence. – djs

1

J'ai une idée, vous pouvez ajouter une case à cocher à votre projet pour l'envoi de courriels en HTML comme une option pour l'utilisateur, et ajoutez ce code pour l'activer:

  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 est sans aucun doute la partie la plus importante.

Mais si vous voulez fournir un email à la fois un texte/partie simple et un texte/partie html composé comme suppléants, il est également possible d'utiliser la classe 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

Le 'AlternateView' pour' htmlView' est-il vraiment nécessaire? Parce que vous avez déjà défini le corps comme 'htmlText'. N'est-il pas redondant de le définir à nouveau comme vue alternative? –

+1

Non seulement c'est nécessaire, mais il est également important qu'il soit ajouté après l'autre vue. voir http://stackoverflow.com/questions/5188605/gmail-displays-plain-text-email-instead-html. Mais spécifier Body et IsBodyHtml n'est pas nécessaire si vous avez ajouté l'affichage alternatif html. – FunkyOne

Questions connexes