2009-08-25 7 views
39

Come si invia un messaggio di posta elettronica HTML? Io uso il codice in this answer per inviare e-mail con SmtpClient, ma sono sempre di solo testo, quindi il collegamento nel messaggio di esempio di seguito non è formattato come tale.Invia email HTML via C# con 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> 

Come si abilita l'HTML nei messaggi di posta elettronica inviati?

+1

ropstah: TBH ero confuso e ha scritto in uno dei tuoi commenti che non esiste IsBodyHtml in SmtpClient. Josiah è chi mi ha mostrato di farlo con MailMessage. –

risposta

8

Applicare la codifica corretta del Mailbody.

mail.IsBodyHtml = true; 
18

Credo che sia stato qualcosa di simile:

mailObject.IsBodyHtml = true; 
+0

ropstah: TBH mi ha confuso e ha scritto in uno dei due commenti che non esiste IsBodyHtml in SmtpClient. Josiah è chi mi ha mostrato di farlo con MailMessage. –

81

Questo è quello che faccio:

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

Nota che ho impostato il messaggio di posta elettronica html su true: mail.IsBodyHtml = true;

+5

Vale la pena notare che sia 'MailMessage' che' SmtpClient' implementano 'IDisposable', e devono essere smaltiti di conseguenza. – djs

1

ho un'idea, è possibile aggiungere una casella di controllo al progetto per l'invio di e-mail in formato HTML come opzione per l'utente, e aggiungere questo codice per attivarlo:

  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 è senza dubbio la parte più importante.

Ma se si desidera fornire una e-mail sia con un testo/parte normale e una parte text/html composto come supplenti, è anche possibile utilizzare 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

Il 'AlternateView' per' htmlView' è davvero necessario? Perché hai già impostato il corpo come 'htmlText'. Non è ridondante impostarlo nuovamente come visualizzazione alternativa? –

+1

Non solo è necessario, ma è anche importante che venga aggiunto dopo la vista alternativa normale. vedi http://stackoverflow.com/questions/5188605/gmail-displays-plain-text-email-instead-html. Tuttavia, non è necessario specificare Body e IsBodyHtml se è stata aggiunta la vista alternativa HTML. – FunkyOne