使用C#寄發OUTLOOK直接辨識的ICS檔案

  • 1332
  • 0
  • C#
  • 2020-11-30

產生ICS檔後,寄到Outlook總是以附件方式夾檔,不能被Outlook當一般會議邀請處理的問題。

產生ICS檔案的範例在網路上很多,但我找到的大部份都是以附檔的方式傳送ICS檔,
也就是收到的會議通知是一封普通的Email,然後夾帶一個.ics的附檔。

由於我想要的是像一般Outlook寄送的會議通知一樣,收到的是行事曆邀請,而不是附檔,
找到的找到的線索關鍵只是一行設定:

//產生ICS字串
string myIcalString = CreateIcalString(myIcal);

//轉換字串為二進位
var calendarBytes = Encoding.UTF8.GetBytes(myIcalString);
MemoryStream ms = new MemoryStream(calendarBytes);

//轉換二進位為Email附件
Attachment attachment = Attachment.CreateAttachmentFromString(myIcalString, new System.Net.Mime.ContentType("text/calendar"));

//重點:設定附件為InLine模式,設定之後,Outlook收到,就會是行事曆模式的邀請
attachment.ContentDisposition.Inline = true;


//將附件加入到Email中
ContentType contype = new ContentType("text/calendar");
message.Attachments.Add(attachment);

之後就是寄出這封信就可以了。測試的結果,只要附件在InLine模式下,收到就是行事曆,
另,在InLine模式下,因為直接取代掉Mail本身,因此好幾個Mail本身欄位,及點開.ICS
會看到的欄位,在Outlook裡就會直接消失看不見了。

(Test @ Outlook2010)