2010-01-21 2 views
6

그것은과 같이 텍스트/HTML 콘텐츠 형식 문자열을 할당하여 HTML 형식 (아웃룩) 이메일을 보내 좋은 작품 :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); 
    } 
} 

이메일이 제대로 (2003) Outlook에서 HTML로 인식되고 있습니다.
하지만 서식있는 텍스트하려고하면 :

MediaTypeNames.RichText; 

Outlook이이를 감지하지 않습니다, 그것은 다시 일반 텍스트로 떨어진다.
이메일을 서식있는 텍스트 형식으로 보내려면 어떻게해야합니까?

+0

메일의 소스를 보여주세요, 그래서 우리는 그것이 Outlook 또는 .net 프레임 워크의 문제인지 여부를 판단 할 수 있습니다. http://www.outlook-tips.net/howto/view_source.htm – Heinzi

+0

@Heinzi, 이것은 Exchange 내부에 있으므로 미안합니다. 일하지 마라. –

+0

이메일 소스를 볼 수있는 다른 방법이 있습니까? –

답변

9

결론은 System.Net.Mail을 사용하여 쉽게 수행 할 수 없다는 것입니다.

Outlook의 서식있는 텍스트는 (Exchange 외부의) SMTP 세계에서 winmail.dat 파일로 보내집니다.

winmail.dat 파일은 TNEF 메시지입니다. 따라서 winmail.dat 파일 내에 richtext를 만들어야합니다 (TNEF 규칙에 따라 형식화 됨).

그러나 그게 전부는 아닙니다. Outlook에서는 압축 된 RTF의 특수 버전을 사용하기 때문에 RTF가 winmail.dat 파일에 추가되기 전에 RTF를 압축해야합니다.

결론은 어렵다. 클라이언트가 정말로이 기능을 필요로하지 않는다면, 나는 그것을 재고해야한다.

이것은 .NET에서 몇 줄의 코드로 할 수있는 것이 아닙니다.

+0

예, 저는 이것을 더 자세히 조사한 결과 같은 결론을 얻었습니다. Exchange SDK에는 몇 가지 도우미 메서드가 있지만 이러한 요소는 자유롭게 배포 할 수없는 관리되는 Exchange 어셈블리에 따라 다릅니다. –

1

당신은 또한 다음과 같이 캘린더보기 전에 다른 대체 뷰를 추가하여이 작업을 수행 할 수 있습니다 : 이것은 나를 위해 일한

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

감사합니다. 이제이 방법을 사용하여 서식있는 텍스트 메일을 보낼 수 있습니다. – Sak

0

..

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