2010-03-13 12 views
5

Encontré este pequeño código que envía correos electrónicos a los usuarios de Gmail. Me gustaría que el cuerpo del correo contenga html (por ejemplo, decodificando un enlace para que contenga texto diferente a la URL a la que apunta).enviar correo smtp incluyendo html a la cuenta de gmail

Estoy usando C# .net 3.5. He usado estas clases en mi código:

  • MailMessage
  • SmtpClient

¿Cómo puede hacerse esto?

Aquí es una copia de mi código:

  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); 

Gracias!

+1

Qué lenguaje/plataforma/marco al menos habría una ayuda, una especie de imposible de responder sin ningún detalle. –

+0

bien, editado. gracias – vondip

+0

Por favor, publique el código que ha completado y un ejemplo de lo que está tratando de lograr. En general, solo debe pasar el HTML, depende del lado receptor para decidir qué hacer con él. Es posible que deba establecer un encabezado, pero sin ver su código, no puedo decir. – GrayWizardx

Respuesta

8

Algo como esto debería funcionar:

Tenga en cuenta que se refiere a MailMessageSystem.Net.MailMessage. También hay System.Web.MailMessage, que nunca he usado y que, por lo que sé, es 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; 
     } 

Para las soluciones de plantillas más sofisticadas que hacen que el cuerpo HTML en lugar de difícil Codin ella, hay, por ejemplo, el EMailTemplateService en MvcContrib que se puede utilizar como una guía.

+0

bien, no estoy seguro de por qué mi código no funcionó antes. Copié tu código aquí y funciona muy bien, ¡gracias! – vondip

+0

@ AaronPatten: ¿Puedo sugerir que formule eso como una nueva pregunta? Reanudar un hilo de 5 años a menudo no es tan prometedor porque las cosas cambian bastante con el tiempo, y solo muy pocas personas serán notificadas ... Además, "no se renderiza en perspectiva" no es muy preciso: qué ¿Se ve exactamente cómo son los encabezados que muestra la perspectiva, puede guardar/cargar el archivo .eml, en qué entorno se ejecuta el código, etc. serían los puntos que su pregunta debería abordar (no aquí, en una nueva pregunta) – mnemosyn

3

Una forma de hacerlo es crear una vista html alternativa del correo electrónico:

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); 
Cuestiones relacionadas