2010-01-21 4 views
6

Es funktioniert großartig E-Mails zu senden (in Outlook) im HTML-Format, indem Sie den Text/html Inhaltstyp Zeichenfolge zuweisen wie folgt:Wie kann ich E-Mails im Richtext-Format an Outlook senden?

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

Die E-Mail wird als HTML in Outlook (2003) richtig erkannt.
Aber wenn ich Rich Text versuchen:

MediaTypeNames.RichText; 

Outlook dies nicht erkennt, fällt es zurück in Klartext.
Wie sende ich E-Mails im Rich-Text-Format?

+0

zeigen Sie bitte die Quelle der E-Mail, so dass wir können feststellen, ob es ein Problem in Outlook oder im .net-Framework ist: http://www.outlook-tips.net/howto/view_source.htm – Heinzi

+0

@Heinzi, tut mir leid, das ist innerhalb von Exchange, also die Anweisungen, die Sie mit doesn verbunden sind arbeite nicht. –

+0

Gibt es eine andere Möglichkeit, die E-Mail-Quelle anzuzeigen? –

Antwort

9

Die Quintessenz ist, Sie können dies nicht einfach mit System.Net.Mail tun.

Der Rich-Text in Outlook wird als winmail.dat-Datei in der SMTP-Welt (außerhalb von Exchange) gesendet.

Die winmail.dat-Datei ist eine TNEF-Nachricht. Sie müssten also Ihren Richtext innerhalb der Datei winmail.dat (formatiert nach TNEF-Regeln) erstellen.

Das ist jedoch nicht alles. Outlook verwendet eine spezielle Version von komprimiertem RTF, also müssen Sie auch Ihr RTF komprimieren, bevor es der winmail.dat-Datei hinzugefügt wird.

Die Quintessenz, ist dies schwierig zu tun, und wenn der Client wirklich diese Funktionalität wirklich braucht, würde ich es überdenken.

Dies ist nichts, was Sie mit ein paar Zeilen Code in .NET tun können.

+0

Ja, ich habe das weiter untersucht und bin zu demselben Schluss gekommen. Es gibt einige Hilfsmethoden im Exchange SDK, diese hängen jedoch von den verwalteten Exchange-Assemblys ab, die nicht frei verteilbar sind. –

1

Sie können dies auch erreichen, indem eine weitere alternative Ansicht hinzufügen, bevor die Kalenderansicht wie folgt:

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

Danke, jetzt kann ich Rich-Text-Mail mit dieser Methode senden. – Sak

0

Dieser arbeitete für mich ..

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) 
     { 
     } 
    } 
Verwandte Themen