產生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)