2010-01-21 47 views
6

Nó hoạt động tuyệt vời để gửi email (Outlook) ở định dạng HTML bằng cách gán text/html chuỗi kiểu nội dung như sau:Cách gửi email ở định dạng richtext tới 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); 
    } 
} 

Email được công nhận một cách chính xác dưới dạng HTML trong Outlook (2003).
Nhưng nếu tôi cố gắng rich text:

MediaTypeNames.RichText; 

Outlook không phát hiện điều này, nó rơi trở lại văn bản đơn giản.
Làm cách nào để gửi email ở định dạng văn bản đa dạng thức?

+0

Hãy thể hiện nguồn gốc của thư, do đó chúng tôi có thể xác định xem đó có phải là sự cố trong Outlook hay trong khung .net: http://www.outlook-tips.net/howto/view_source.htm – Heinzi

+0

@Heinzi, xin lỗi vì điều này nằm trong Exchange nên các hướng dẫn bạn đã liên kết với doesn 't làm việc. –

+0

Có cách nào khác để xem nguồn email không? –

Trả lời

9

Điểm mấu chốt là, bạn không thể thực hiện điều này dễ dàng bằng System.Net.Mail.

Văn bản đa dạng trong Outlook được gửi dưới dạng tệp winmail.dat trong thế giới SMTP (bên ngoài Exchange).

Tệp winmail.dat là thông báo TNEF. Vì vậy, bạn sẽ cần phải tạo richtext của bạn bên trong của tập tin winmail.dat (được định dạng theo quy tắc TNEF).

Tuy nhiên, đó không phải là tất cả. Outlook sử dụng một phiên bản đặc biệt của RTF nén, vì vậy, bạn cũng sẽ cần phải nén RTF của bạn xuống, trước khi nó được thêm vào tệp winmail.dat.

Điểm mấu chốt, điều này rất khó thực hiện và trừ khi khách hàng thực sự thực sự cần chức năng này, tôi sẽ suy nghĩ lại.

Đây không phải là điều bạn có thể làm với một vài dòng mã trong .NET.

+0

Có, tôi đã điều tra thêm về điều này và tôi đã đi đến cùng một kết luận. Có một số phương thức trợ giúp trong Exchange SDK, nhưng chúng phụ thuộc vào các hội đồng Exchange được quản lý, không được phân phối tự do. –

1

Bạn cũng có thể đạt được điều này bằng cách thêm một quan điểm thay thế trước khi xem lịch của bạn như sau:

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

Cảm ơn, Bây giờ tôi có thể gửi thư văn bản phong phú bằng cách sử dụng phương pháp này. – Sak

0

này đã làm việc cho tôi ..

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) 
     { 
     } 
    } 
Các vấn đề liên quan