2014-10-23

[ASP.NET] 能夠 Book Microsoft Outlook 行事曆的 Mail

當你申請出差或請假時,希望系統能自動 Book Microsoft Outlook 行事曆,但是能出現在行事曆上的 Mail,通常只有"會議邀請"格式的 Mail 才行。

以下來說明如何發一封有"會議邀請"格式的 Mail。

// 記得載入 Mail 的元件
using System.Net.Mail;

...

// 建立 SMTP Object
SmtpClient sc = new SmtpClient();

// 指定 SMTP Server IP
sc.Host = "192.168.192.1";

// 建立 Mail Object, 並指定好 From、To、Subject、Body
MailMessage msg = new MailMessage();
msg.From = new MailAddress("admin@tim.com.tw", "EIP System");
msg.To.Add(new MailAddress("tim@tim.com.tw", "Tim Lin"));
msg.Subject = "[EIP System] 出差/請假申請成功";
msg.Body = "此封信件是自動發出的,用於 Book Outlook 行事曆。";

// !!!==========重點==========!!!
// 定義 Mail 是會議邀請的格式。
StringBuilder str = new StringBuilder();
str.AppendLine("BEGIN:VCALENDAR");
str.AppendLine("PRODID:-//Tim Blog");
str.AppendLine("VERSION:2.0");
str.AppendLine("METHOD:REQUEST");
str.AppendLine("BEGIN:VEVENT");
// Book 的 起始時間。
str.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", Convert.ToDateTime(strSDate))); 
// 定義時區
str.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", DateTime.Now));
// Book 的 結束時間。
str.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", Convert.ToDateTime(strEDate)));
str.AppendLine("LOCATION: " + msg.Subject);
str.AppendLine(string.Format("UID:{0}", Guid.NewGuid()));
str.AppendLine(string.Format("DESCRIPTION:{0}", msg.Body));
str.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", msg.Body));
str.AppendLine(string.Format("SUMMARY:{0}", msg.Subject));
str.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", msg.From.Address));
str.AppendLine(string.Format("ATTENDEE;CN=\"{0}\";RSVP=TRUE:mailto:{1}", msg.To[0].DisplayName, msg.To[0].Address));
str.AppendLine("END:VEVENT");
str.AppendLine("END:VCALENDAR");

System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType("text/calendar");
ct.Parameters.Add("method", "REQUEST");
AlternateView avCal = AlternateView.CreateAlternateViewFromString(str.ToString(), ct);
msg.AlternateViews.Add(avCal);
// !!!==========重點==========!!!

// 發送 Mail
sc.Send(msg);




參考來源:StackOverflow

沒有留言:

張貼留言