如題,最近需要處理一個需求,在寄信時附上會議,讓使用者可以點擊使Calander產生會議,避免忘記會議,以下紀錄。
該方式主要使用的物件是 AlternateView,請參考以下程式碼。
寄送會議提醒
/// <summary> /// 使用 AlternateViews 寄送會議提醒 /// </summary> private static void SendMeeting() { using (SmtpClient smtpClient = new SmtpClient("YourHost")) { using (MailMessage mailMessage = new MailMessage()) { // 發信人 = Mail Agent mailMessage.From = new MailAddress("寄件人信箱"); // 發信人 = Mail Agent mailMessage.To.Add("收件人信箱"); StringBuilder sb = new StringBuilder(); sb.AppendLine("BEGIN:VCALENDAR"); // 開始定義一個 vCalendar 物件 sb.AppendLine("PRODID:-//Your Company//Your Product//EN"); // 指定產品識別碼,通常包含公司和產品資訊 sb.AppendLine("VERSION:2.0"); // 指定 iCalendar 版本,這裡是 2.0 sb.AppendLine("METHOD:REQUEST"); // 設置日曆發佈方法,這裡是請求(用於會議邀請等) sb.AppendLine("BEGIN:VEVENT"); // 開始定義一個日曆事件 sb.AppendLine($"UID:{Guid.NewGuid()}"); // 生成並添加一個唯一識別碼,確保每個事件都是獨一無二的 sb.AppendLine($"DTSTART:{DateTime.Now.AddMinutes(10).ToUniversalTime().ToString("yyyyMMddTHHmmssZ")}"); // 設置事件開始時間,轉換為協調世界時間(UTC) sb.AppendLine($"DTEND:{DateTime.Now.AddMinutes(20).ToUniversalTime().ToString("yyyyMMddTHHmmssZ")}"); // 設置事件結束時間,轉換為協調世界時間(UTC) sb.AppendLine("LOCATION: 您的地點"); // 設置事件地點 sb.AppendLine($"DESCRIPTION: 事件描述"); // 設置事件描述 sb.AppendLine($"SUMMARY: 事件摘要"); // 設置事件摘要 sb.AppendLine("STATUS:CONFIRMED"); // 設置事件狀態為已確認 sb.AppendLine("SEQUENCE:0"); // 設置事件序列號,用於標識事件更新 sb.AppendLine($"ATTENDEE;CN=\"Participant Name\":mailto: abcd@gmail.com"); // 添加參與者,包括顯示名稱和郵件地址 sb.AppendLine("BEGIN:VALARM"); // 開始定義一個提醒 sb.AppendLine("TRIGGER:-PT10M"); // 提前 10 分鐘提醒 sb.AppendLine("ACTION:DISPLAY"); // 設置提醒動作為顯示通知 sb.AppendLine("DESCRIPTION:Reminder"); // 設置提醒描述 sb.AppendLine("END:VALARM"); // 結束提醒定義 sb.AppendLine("END:VEVENT"); // 結束事件定義 sb.AppendLine("END:VCALENDAR"); // 結束 vCalendar 物件定義 System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType("text/calendar"); ct.Parameters.Add("method", "REQUEST"); ct.Parameters.Add("name", "meeting.ics"); AlternateView avCalendar = AlternateView.CreateAlternateViewFromString(sb.ToString(), ct); // 加入檢視 mailMessage.AlternateViews.Add(avCalendar); // 發信 smtpClient.Send(mailMessage); } } }
寄送Html信件
/// <summary> /// 使用 AlternateViews 寄送 Html Mail /// </summary> private static void SendHtmlMail() { using (SmtpClient smtpClient = new SmtpClient("YourHost")) { using (MailMessage mailMessage = new MailMessage()) { // 發信人 = Mail Agent mailMessage.From = new MailAddress("寄件人信箱"); // 發信人 = Mail Agent mailMessage.To.Add("收件人信箱"); string emailBody = @" <div style='font-family: 微軟正黑體, sans-serif;'> Hello world! </div> "; var htmlContentType = new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Text.Html); AlternateView avHtmlBody = AlternateView.CreateAlternateViewFromString(emailBody, htmlContentType); // 加入檢視 mailMessage.AlternateViews.Add(avHtmlBody); // 發信 smtpClient.Send(mailMessage); } } }
- 也可以同時寄送有Html和Meeting的信件,就是把 AlternateViews Add 就可以了
mailMessage.AlternateViews.Add(avCalendar); mailMessage.AlternateViews.Add(avHtmlBody);