2010-03-13 20 views
5

Ho trovato questo piccolo codice che invia email agli utenti di Gmail. Mi piacerebbe che il corpo della mail contenga html (ad esempio, decodifica un link per mantenere un testo diverso dall'URL a cui punta).invia posta smtp compreso l'html all'account gmail

Sto usando C# .net 3.5. Ho usato queste classi nel mio codice:

  • MailMessage
  • SmtpClient

Come si può fare?

Ecco una copia del mio codice:

  MailMessage message = new MailMessage("[email protected]", WebCommon.UserEmail, "Test", context.Server.HtmlEncode("<html> <body> <a href='www.cnn.com'> test </a> </body> </html> ")); 
      System.Net.NetworkCredential cred = new System.Net.NetworkCredential("[email protected]", "myPwd"); 
      message.IsBodyHtml = true; 

      System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.gmail.com"); 

      smtp.UseDefaultCredentials = false; 
      smtp.EnableSsl = true; 
      smtp.Credentials = cred; 
      smtp.Port = 587; 

      smtp.Send(message); 

Grazie!

+1

Che lingua/piattaforma/quadro, almeno sarebbe stato un aiuto, una sorta di impossibile rispondere, senza alcun dettaglio. –

+0

ok, modificato. grazie – vondip

+0

Inserisci il codice che hai completato e un esempio di ciò che stai cercando di realizzare. In generale, dovresti solo passare l'HTML, è compito del destinatario decidere cosa fare con esso. Potrebbe essere necessario impostare un'intestazione, ma senza vedere il tuo codice non posso dire. – GrayWizardx

risposta

8

Qualcosa del genere dovrebbe funzionare:

Nota che MailMessage si riferisce a System.Net.MailMessage. C'è anche lo System.Web.MailMessage, che non ho mai usato e, per quanto ne so, è obsoleto.

MailMessage message = new MailMessage(); 
// Very basic html. HTML should always be valid, otherwise you go to spam 
message.Body = "<html><body><p>test</p></body></html>"; 
// QuotedPrintable encoding is the default, but will often lead to trouble, 
// so you should set something meaningful here. Could also be ASCII or some ISO 
message.BodyEncoding = Encoding.UTF8; 
message.IsBodyHtml = true; 
// No Subject usually goes to spam, too 
message.Subject = "Some Subject"; 
// Note that you can add multiple recipients, bcc, cc rec., etc. Using the 
// address-only syntax, i.e. w/o a readable name saves you from some issues 
message.To.Add("[email protected]"); 

// SmtpHost, -Port, -User, -Password must be a valid account you can use to 
// send messages. Note that it is very often required that the account you 
// use also has the specified sender address associated! 
// If you configure the Smtp yourself, you can change that of course 
SmtpClient client = new SmtpClient(SmtpHost, SmtpPort) { 
      Credentials = new NetworkCredential(SmtpUser, SmtpPassword), 
      EnableSsl = enableSsl; 
     }; 

     try { 
      // It might be necessary to enforce a specific sender address, see above 
      if (!string.IsNullOrEmpty(ForceSenderAddress)) { 
       message.From = new MailAddress(ForceSenderAddress); 
      } 
      client.Send(message); 
     } 
     catch (Exception ex) { 
      return false; 
     } 

Per soluzioni di templating più sofisticate che rendono il codice HTML corpo piuttosto che hard-Codin esso, v'è, ad esempio, il EMailTemplateService in MvcContrib che si può usare come linea guida.

+0

ok, non sono sicuro del motivo per cui il mio codice non ha funzionato prima. Ho copiato il tuo codice qui e funziona benissimo, grazie! – vondip

+0

@AaronPatten: Posso suggerire di formularlo come una nuova domanda? Riacquistare una discussione di 5 anni spesso non è così promettente perché le cose cambiano abbastanza nel tempo e solo poche persone riceveranno una notifica ... Inoltre, "non rende in prospettiva" non è molto preciso - cosa sembra, esattamente, quali sono le intestazioni mostrate in Outlook, puoi salvare/caricare il file .eml, in quale ambiente viene eseguito il tuo codice, ecc. sarebbero i punti che la tua domanda dovrebbe indirizzare (non qui, in una nuova domanda). – mnemosyn

3

Un modo per farlo è quello di creare una vista html alternativo della e-mail:

MailMessage message = new MailMessage(); 
message.Body = //plain-text version of message 
//set up message... 

//create html view 
string htmlBody = "<html>...</html>"; 
htmlView = AlternateView.CreateAlternateViewFromString(htmlBody, null, "text/html"); 
message.AlternateViews.Add(htmlView); 

//send message 
smtpClient.Send(message); 
Problemi correlati