2009-08-25 11 views
39

Wie sende ich eine HTML-E-Mail? Ich verwende den Code in this answer, um E-Mails mit SmtpClient zu senden, aber sie sind immer nur Text, daher ist der Link in der Beispielnachricht unten nicht als solcher formatiert.Senden Sie HTML-E-Mail über C# mit 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> 

Wie aktiviere ich HTML in den E-Mail-Nachrichten, die ich sende?

+1

ropstah: TBH ich war verwirrt und schrieb in einem deiner Kommentare, dass es in SmtpClient kein IsBodyHtml gibt. Josiah ist der, der mir gezeigt hat, dass ich es mit MailMessage machen soll. –

Antwort

8

Wenden Sie die korrekte Codierung des Mailbody an.

mail.IsBodyHtml = true; 
18

Ich glaube, es war so etwas wie:

mailObject.IsBodyHtml = true; 
+0

ropstah: TBH Ich war verwirrt und schrieb in einem der beiden Kommentare, dass es in SmtpClient kein IsBodyHtml gibt. Josiah ist der, der mir gezeigt hat, dass ich es mit MailMessage machen soll. –

81

Das ist, was ich tue:

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

Bitte beachte, dass ich die Mail-Nachricht html auf true gesetzt: mail.IsBodyHtml = true;

+5

Beachten Sie, dass sowohl "MailMessage" als auch "SmtpClient" "IDisposable" implementieren und entsprechend entsorgt werden müssen. – djs

1

Ich habe eine Idee, Sie können ein Kontrollkästchen für Ihr Projekt hinzufügen als Option für den Benutzer E-Mail als HTML senden und diesen Code hinzufügen, um es zu aktivieren:

  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 zweifellos der wichtigste Teil ist.

Aber wenn Sie als Stellvertreter eine E-Mail mit sowohl einem text/plain Teil und einem text/html Teil zusammen bieten wollen, ist es auch möglich ist, die AlternateView-Klasse:

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

Ist 'AlternateView' für' htmlView' wirklich notwendig? Weil Sie den Körper bereits als 'htmlText' festgelegt haben. Ist es nicht überflüssig, es erneut als alternative Ansicht festzulegen? –

+1

Nicht nur ist es notwendig, sondern auch wichtig, dass es nach der einfachen alternativen Ansicht hinzugefügt wird. siehe http://stackoverflow.com/questions/5188605/gmail-displays-plain-text-email-inste-html. Die Angabe von Body und IsBodyHtml ist jedoch nicht erforderlich, wenn Sie die HTML-Alternativansicht hinzugefügt haben. – FunkyOne

Verwandte Themen