2010-10-06 169 views
1

我正在開發一個帶有一個附件的電子郵件的asp.net c#應用程序。 附件是一個vCalendar文件。 下面的代碼:如何防止附件內容在郵件正文中顯示?

  StringBuilder sbCalendar = new StringBuilder(); 
      DateTime dtStart = eventDate; 
      DateTime dtEnd = eventDate; 

      sbCalendar.AppendLine("METHOD: REQUEST"); 
      sbCalendar.AppendLine("BEGIN:VCALENDAR"); 
      sbCalendar.AppendLine("PRODID:-//DP//NET"); 
      sbCalendar.AppendLine("MIMEDIR//ENVERSION:1.0"); 
      sbCalendar.AppendLine("METHOD:REQUEST"); 
      sbCalendar.AppendLine("BEGIN:VEVENT"); 
      sbCalendar.AppendLine("DTSTAMP:" + dtStart.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z")); 
      sbCalendar.AppendLine("DTSTART:" + dtStart.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z")); 
      sbCalendar.AppendLine("DTEND:" + dtEnd.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z")); 
      sbCalendar.AppendLine("LOCATION:" + eventLocation); 
      sbCalendar.AppendLine("DESCRIPTION;ENCODING=QUOTED-PRINTABLE:" + eventBody); 
      sbCalendar.AppendLine("SUMMARY:" + eventSubject); 
      sbCalendar.AppendLine("PRIORITY:3"); 
      sbCalendar.AppendLine("UID:" + Guid.NewGuid().ToString()); 
      sbCalendar.AppendLine("ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION:MAILTO:[email protected]"); 
      sbCalendar.AppendLine("ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:MAILTO:[email protected]"); 
      sbCalendar.AppendLine("CLASS:PUBLIC"); 
      sbCalendar.AppendLine("ORGANIZER:MAILTO:[email protected]"); 
      sbCalendar.AppendLine("SEQUENCE:0"); 
      sbCalendar.AppendLine("STATUS:TENTATIVE"); 
      sbCalendar.AppendLine("END:VEVENT"); 
      sbCalendar.AppendLine("END:VCALENDAR"); 

      byte[] byteArray = Encoding.UTF8.GetBytes(sbCalendar.ToString()); 

      Stream contentStream = new MemoryStream(byteArray); 

      SmtpClient smtp = new SmtpClient("localhost"); 

      MailMessage memo = new MailMessage(); 

      memo.IsBodyHtml = true; 

      memo.From = new MailAddress("[email protected]"); 

      foreach (string emailAddress in emailAddresses) 
      { 
       memo.To.Add(emailAddress); 
      } 

      memo.Body = messageBody; 
      memo.Subject = messageSubject; 

      Attachment attachment = new Attachment(contentStream, "termenLitigiu.ics", "text/calendar"); 
      attachment.TransferEncoding = System.Net.Mime.TransferEncoding.Base64; 
      memo.Attachments.Add(attachment); 
      smtp.Send(memo); 

這工作和做什麼是應該做的,它發出了一個工作vCalendar文件(由Outlook識別)。

的問題是,在郵件的正文中,除了消息體參數的內容,所附文件的內容同時出現,這樣的事情:

來源:發送發件人 :週二,10月05日,2010下午4:59 要:someemail

消息體的內容在這裏

方法:請求BEGIN :VCALENDAR PRODID: - // // DP NET MIMEDIR // ENVERSION:1.0 方法:REQUEST BEGIN:VEVENT DTSTAMP:20101006T135934Z DTSTART:20101006T135934Z DTEND:20101006T135934Z LOCATION:旅館距離Minstead 說明; ENCODING =引用打印:我的第一次會議摘要 :學習日曆和日程安排 PRIORITY:3 UID:721d9e3c-9010-47f5-9ad0-83c38cb0cbb7 ATTENDEE; ROLE = REQ-參與者; PARTSTAT =需要-ACTION:MAILTO:someemail ATTENDEE; ROLE = CHAIR; PARTSTAT = ACCEPTED:MAILTO:someemail CLASS :PUBLIC 組織者:MAILTO:someemail SEQUENCE:0 狀態:T ENTATIVE END:VEVENT END:VCALENDAR

我想擺脫文本的,並只顯示我的消息體參數的內容與剛剛附加到郵件消息vCalendar文件。 我該怎麼做?這是一個前景問題還是編碼問題?

編輯:我只對在Microsoft Outlook中顯示消息感興趣。我已經研究過該消息的來源(在Outlook中右鍵點擊>查看源代碼),我想擺脫的文本消息的找到解決的<body></body> HTML標記)

回答

1

內:

在附件的構造我換成"text/calendar"MediaTypeNames.Application.Octet,並設置DispositionTypeAttachment,而不是Inline這可能是默認值。

  Attachment attachment = new Attachment(contentStream, "termenLitigiu.ics", MediaTypeNames.Application.Octet); 
      attachment.ContentDisposition.DispositionType = DispositionTypeNames.Attachment; 

它現在給我一個乾淨的郵件消息,其中包含消息的正文和一個工作的.ics附件。

相關問題