2010-01-21 20 views
6

Funciona muy bien para enviar mensajes de correo electrónico de Outlook (a) en formato HTML mediante la asignación de la cadena de tipo de contenido text/html así:¿Cómo enviar un correo electrónico en formato richtext a Outlook?

using (MailMessage message = new MailMessage()) 
{ 
    message.From = new MailAddress("[email protected]"); 
    message.ReplyTo = new MailAddress("[email protected]"); 
    message.To.Add(new MailAddress("[email protected]")); 
    message.Subject = "This subject"; 
    message.Body = "This content is in plain text"; 
    message.IsBodyHtml = false; 

    string bodyHtml = "<p>This is the HTML <strong>content</strong>.</p>"; 

    using (AlternateView altView = AlternateView.CreateAlternateViewFromString(bodyHtml, 
    new ContentType(MediaTypeNames.Text.Html))) 
    { 
    message.AlternateViews.Add(altView); 
    SmtpClient smtp = new SmtpClient(smtpAddress); 
    smtp.Send(message); 
    } 
} 

El correo electrónico es reconocido correctamente como HTML en Outlook (2003).
Pero si trato de texto enriquecido:

MediaTypeNames.RichText; 

de Outlook no detecta esto, se cae de nuevo a texto sin formato.
¿Cómo envío un correo electrónico en formato de texto enriquecido?

+0

favor mostrar el origen del correo electrónico, de modo que podemos determinar si es un problema en Outlook o en el .NET Framework: http://www.outlook-tips.net/howto/view_source.htm – Heinzi

+0

@Heinzi, lo siento dentro de Exchange, por lo que las instrucciones a las que se vinculó no no funciona –

+0

¿Hay alguna otra manera de ver el origen del correo electrónico? –

Respuesta

9

La conclusión es que esto no se puede hacer fácilmente con System.Net.Mail.

El texto enriquecido en Outlook se envía como un archivo winmail.dat en el mundo SMTP (fuera de Exchange).

El archivo winmail.dat es un mensaje TNEF. Por lo tanto, necesitaría crear su richtext dentro del archivo winmail.dat (formateado según las reglas TNEF).

Sin embargo, eso no es todo. Outlook usa una versión especial de RTF comprimido, por lo que también necesitaría comprimir su RTF antes de agregarlo al archivo winmail.dat.

En pocas palabras, esto es difícil de hacer, y a menos que el cliente realmente realmente necesite esta funcionalidad, lo reconsideraría.

Esto no es algo que pueda hacer con unas pocas líneas de código en .NET.

+0

Sí, he investigado esto más a fondo y he llegado a la misma conclusión. Hay algunos métodos de ayuda en el SDK de Exchange, pero estos dependen de los ensamblados de Exchange administrados, que no se pueden distribuir libremente. –

1

También puede lograr esto mediante la adición de otro punto de vista alternativo antes de la vista del calendario de la siguiente manera:

var body = AlternateView.CreateAlternateViewFromString(bodyHtml, new System.Net.Mime.ContentType("text/html")); 
mailMessage.AlternateViews.Add(body); 
+0

Gracias, ahora puedo enviar correos de texto enriquecido usando este método. – Sak

0

Esto funcionó para mí ..

public void sendUsersMail(string recipientMailId, string ccMailList, string body, string subject) 
    { 
     try 
     { 
      MailMessage Msg = new MailMessage(); 
      Msg.From = new MailAddress("[email protected]", "Tracker Tool"); 
      Msg.To.Add(recipientMailId); 
      if (ccMailList != "") 
       Msg.CC.Add(ccMailList); 
      Msg.Subject = subject; 
      var AltBody = AlternateView.CreateAlternateViewFromString(body, new System.Net.Mime.ContentType("text/html")); 
      Msg.AlternateViews.Add(AltBody); 
      Msg.IsBodyHtml = true; 
      SmtpClient smtp = new SmtpClient("mail.xyz.com"); 
      smtp.Send(Msg); 
      smtp.Dispose(); 
     } 
     catch (Exception ex) 
     { 
     } 
    } 
Cuestiones relacionadas