[C#] 寄送含有會議的信件至outlook


Posted by mike-hsieh on 2023-12-01

如題,最近需要處理一個需求,在寄信時附上會議,讓使用者可以點擊使Calander產生會議,避免忘記會議,以下紀錄。

該方式主要使用的物件是 AlternateView,請參考以下程式碼。

  1. 寄送會議提醒

    /// <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);
         }
     }
    }
    
  2. 寄送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);
         }
     }
    }
    
  3. 也可以同時寄送有Html和Meeting的信件,就是把 AlternateViews Add 就可以了
    mailMessage.AlternateViews.Add(avCalendar);
    mailMessage.AlternateViews.Add(avHtmlBody);
    

#C# #outlook #html #meeting #AlternateViews







Related Posts

 Laradock (2) : 設定

Laradock (2) : 設定

雜談 - 關於設計:TDD 邪教論

雜談 - 關於設計:TDD 邪教論

[筆記] Linux 基礎安裝與架站(基於 CentOS7.9.2009 示範)

[筆記] Linux 基礎安裝與架站(基於 CentOS7.9.2009 示範)


Comments