using Education.Report; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Mail; using System.Text; using System.Web; using System.Web.Services.Description; using WebLib; namespace Education { public class 發送郵件 { public HttpContext Context; private string CheckMark(bool value) { return value ? "☑" : "☐"; } public void 發送報名成功郵件(string 收件人姓名, string 收件人Email, DateTime 訓練日期, DateTime 訓練日期迄, string 訓練名稱) { if (string.IsNullOrEmpty(收件人Email)) return; string content = File.ReadAllText(Context.Server.MapPath("~/Template/報名郵件.html")); MailMessage mm = new MailMessage(); mm.Subject = String.Format("【辦訓系統報名成功通知】{0} {1}", 訓練課程企劃.Get訓練日期Str(訓練日期, 訓練日期迄, "yyyy-MM-dd"), 訓練名稱); mm.BodyEncoding = Encoding.UTF8; mm.IsBodyHtml = true; mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; mm.Body = content .Replace("{訓練日期}", 訓練課程企劃.Get訓練日期Str(訓練日期, 訓練日期迄)) // .ToString("yyyy年MM月dd日(dddd)") + (訓練日期迄.Ticks > 0 ? "至" + 訓練日期迄.ToString("yyyy年MM月dd日(dddd)") : "")) .Replace("{訓練名稱}", 訓練名稱); mm.To.Add(new MailAddress(收件人Email, 收件人姓名)); MailService.Send(mm, String.Format("報名成功郵件,對象={0} 訓練日期={1} 訓練名稱={2}", 收件人姓名, 訓練課程企劃.Get訓練日期Str(訓練日期, 訓練日期迄, "yyyy-MM-dd"), 訓練名稱)); } public void 發送取消報名郵件(string 收件人姓名, string 收件人Email, DateTime 訓練日期, DateTime 訓練日期迄, string 訓練名稱) { if (string.IsNullOrEmpty(收件人Email)) return; string content = File.ReadAllText(Context.Server.MapPath("~/Template/取消報名郵件.html")); MailMessage mm = new MailMessage(); mm.Subject = String.Format("【辦訓系統取消報名通知】{0} {1}", 訓練課程企劃.Get訓練日期Str(訓練日期, 訓練日期迄, "yyyy-MM-dd"), 訓練名稱); mm.BodyEncoding = Encoding.UTF8; mm.IsBodyHtml = true; mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; mm.Body = content .Replace("{取消日期}", DateTime.UtcNow.AddHours(8).Date.ToString("yyyy年MM月dd日")) .Replace("{訓練日期}", 訓練課程企劃.Get訓練日期Str(訓練日期, 訓練日期迄)) .Replace("{訓練名稱}", 訓練名稱); mm.To.Add(new MailAddress(收件人Email, 收件人姓名)); MailService.Send(mm, String.Format("取消報名郵件,對象={0} 訓練日期={1} 訓練名稱={2}", 收件人姓名, 訓練課程企劃.Get訓練日期Str(訓練日期, 訓練日期迄, "yyyy-MM-dd"), 訓練名稱)); } public void 發送學員行前通知郵件(string 收件人姓名, string 收件人Email, string 聯絡人姓名, string 聯絡人電話, string 聯絡人Email, string 公司名稱, DateTime 訓練日期, DateTime 訓練日期迄, string 訓練名稱, string 訓練地點, int 訓練時數, 訓練課程內容List 課程內容List, string 附件檔名, Stream 附件內容) { if (string.IsNullOrEmpty(收件人Email)) return; string content = File.ReadAllText(Context.Server.MapPath("~/Template/學員行前通知.html")); string 課程內容 = ""; // 拿課程類別來存放講師姓名 foreach (訓練課程內容 item in 課程內容List) { 課程內容 += String.Format("{0}{1}{2}{3}", item.節次, item.課程名稱, item.時數, item.課程類別); } MailMessage mm = new MailMessage(); mm.Subject = String.Format("【辦訓系統學員行前通知】{0} {1}", 訓練課程企劃.Get訓練日期Str(訓練日期, 訓練日期迄, "yyyy-MM-dd"), 訓練名稱); mm.BodyEncoding = Encoding.UTF8; mm.IsBodyHtml = true; mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; mm.Body = content .Replace("{公司名稱}", 公司名稱) .Replace("{訓練日期}", 訓練課程企劃.Get訓練日期Str(訓練日期, 訓練日期迄)) .Replace("{訓練名稱}", 訓練名稱) .Replace("{訓練地點}", 訓練地點) .Replace("{訓練時數}", 訓練時數.ToString()) .Replace("{課程內容}", 課程內容); mm.To.Add(new MailAddress(收件人Email, 收件人姓名)); if (!string.IsNullOrEmpty(聯絡人Email)) mm.ReplyTo = new MailAddress(聯絡人Email, 聯絡人姓名); if (附件內容 != null) { mm.Attachments.Add(new Attachment(附件內容, 附件檔名, "octet/application")); } MailService.Send(mm, String.Format("學員行前通知郵件,對象={0} 訓練日期={1} 訓練名稱={2}", 收件人姓名, 訓練課程企劃.Get訓練日期Str(訓練日期, 訓練日期迄, "yyyy-MM-dd"), 訓練名稱)); } public void 發送學員異動通知郵件(string 收件人姓名, string 收件人Email, string 聯絡人姓名, string 聯絡人電話, string 聯絡人Email, string 公司名稱, DateTime 訓練日期, DateTime 訓練日期迄, string 訓練名稱, string 訓練地點, int 訓練時數, string 異動內容) { if (string.IsNullOrEmpty(收件人Email)) return; string content = File.ReadAllText(Context.Server.MapPath("~/Template/學員異動通知.html")); MailMessage mm = new MailMessage(); mm.Subject = String.Format("【辦訓系統課程異動通知】{0} {1}", 訓練課程企劃.Get訓練日期Str(訓練日期, 訓練日期迄, "yyyy-MM-dd"), 訓練名稱); mm.BodyEncoding = Encoding.UTF8; mm.IsBodyHtml = true; mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; mm.Body = content .Replace("{公司名稱}", 公司名稱) .Replace("{訓練日期}", 訓練課程企劃.Get訓練日期Str(訓練日期, 訓練日期迄)) .Replace("{訓練名稱}", 訓練名稱) .Replace("{訓練地點}", 訓練地點) .Replace("{訓練時數}", 訓練時數.ToString()) .Replace("{異動內容}", 異動內容); mm.To.Add(new MailAddress(收件人Email, 收件人姓名)); if (!string.IsNullOrEmpty(聯絡人Email)) mm.ReplyTo = new MailAddress(聯絡人Email, 聯絡人姓名); MailService.Send(mm, String.Format("學員課程異動通知郵件,對象={0} 訓練日期={1} 訓練名稱={2}", 收件人姓名, 訓練課程企劃.Get訓練日期Str(訓練日期, 訓練日期迄, "yyyy-MM-dd"), 訓練名稱)); } public void 發送講師行前通知郵件(講師行前郵件Data data) { if (string.IsNullOrEmpty(data.收件人Email)) return; string content = File.ReadAllText(Context.Server.MapPath("~/Template/講師行前通知.html")); MailMessage mm = new MailMessage(); mm.Subject = String.Format("【辦訓系統講師行前通知】{0} {1}", 訓練課程企劃.Get訓練日期Str(data.訓練日期, data.訓練日期迄, "yyyy-MM-dd"), data.訓練名稱); mm.BodyEncoding = Encoding.UTF8; mm.IsBodyHtml = true; mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; content = content .Replace("{公司名稱}", data.公司名稱) .Replace("{講師姓名}", data.收件人姓名) .Replace("{訓練名稱}", data.訓練名稱) .Replace("{訓練地點}", data.訓練地點) .Replace("{訓練地址}", data.訓練地址) .Replace("{是否交通圖}", CheckMark(data.附件內容 != null)) .Replace("{訓練日期}", 訓練課程企劃.Get訓練日期Str(data.訓練日期, data.訓練日期迄)) .Replace("{訓練時間}", data.訓練時間) .Replace("{訓練時間迄}", data.訓練時間迄) .Replace("{備課時間}", data.備課時間) .Replace("{聯絡人姓名}", data.聯絡人姓名) .Replace("{聯絡人電話}", data.聯絡人電話) .Replace("{聯絡人Email}", data.聯絡人Email) .Replace("{受訓對象}", "") .Replace("{是否攜帶筆電}", CheckMark(data.是否攜帶筆電)) .Replace("{是否攜帶簡報}", CheckMark(data.是否攜帶簡報)) .Replace("{是否攜帶其他}", CheckMark(data.是否攜帶其他)) .Replace("{攜帶其他}", data.攜帶其他) .Replace("{是否場地投影機}", CheckMark(data.是否場地投影機)) .Replace("{是否場地麥克風}", CheckMark(data.是否場地麥克風)) .Replace("{是否場地雷射筆}", CheckMark(data.是否場地雷射筆)) .Replace("{是否場地筆電}", CheckMark(data.是否場地筆電)) .Replace("{是否場地座位安排}", CheckMark(data.是否場地座位安排)) .Replace("{是否場地白紙}", CheckMark(data.是否場地白紙)) .Replace("{是否場地其他}", CheckMark(data.是否場地其他)) .Replace("{場地其他}", data.場地其他) .Replace("{是否講師費}", CheckMark(data.是否講師費)) .Replace("{講師費}", data.講師費) .Replace("{是否交通費}", CheckMark(data.是否交通費)) .Replace("{交通費}", data.交通費) .Replace("{合計}", data.合計) .Replace("{是否現金}", CheckMark(data.是否現金)) .Replace("{是否匯款}", CheckMark(data.是否匯款)) .Replace("{給付日}", data.給付日.Ticks > 0 ? data.給付日.ToString("yyyy年MM月dd日") : "") .Replace("{是否交通安排}", CheckMark(data.是否交通安排)) .Replace("{交通安排}", data.交通安排) .Replace("{是否用餐}", CheckMark(data.是否用餐)) .Replace("{用餐}", data.用餐); AlternateView htmlView = AlternateView.CreateAlternateViewFromString(content, Encoding.UTF8, "text/html"); mm.AlternateViews.Add(htmlView); mm.To.Add(new MailAddress(data.收件人Email, data.收件人姓名)); if (!string.IsNullOrEmpty(data.聯絡人Email)) { mm.CC.Add(new MailAddress(data.聯絡人Email, data.聯絡人姓名)); mm.ReplyTo = new MailAddress(data.聯絡人Email, data.聯絡人姓名); } if (data.附件內容 != null) { mm.Attachments.Add(new Attachment(data.附件內容, data.附件檔名, "octet/application")); } MailService.Send(mm, String.Format("講師行前通知郵件,對象={0} 訓練日期={1} 訓練名稱={2}", data.收件人姓名, 訓練課程企劃.Get訓練日期Str(data.訓練日期, data.訓練日期迄, "yyyy-MM-dd"), data.訓練名稱)); } private void 發送簽核相關郵件(int 簽核ID, bool 撤簽, string 收件人姓名, string 收件人Email) { if (string.IsNullOrEmpty(收件人Email)) return; DAC_表單簽核主檔 Dao表單簽核主檔 = new DAC_表單簽核主檔(); 表單簽核主檔List d = Dao表單簽核主檔.SelectOne(簽核ID); string content; if (!撤簽) content = File.ReadAllText(Context.Server.MapPath("~/Template/簽核通知.html")); else content = File.ReadAllText(Context.Server.MapPath("~/Template/撤簽通知.html")); if (d.Count > 0) { string 表單ID = d[0].表單ID格式.Replace("
", " "); MailMessage mm = new MailMessage(); if (!撤簽) mm.Subject = String.Format("【辦訓系統簽核通知】表單類別:{0} 表單:{1}", d[0].表單類別ID, 表單ID); else mm.Subject = String.Format("【辦訓系統撤簽通知】表單類別:{0} 表單:{1}", d[0].表單類別ID, 表單ID); mm.BodyEncoding = Encoding.UTF8; mm.IsBodyHtml = true; mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; mm.Body = content.Replace("{表單類別}", d[0].表單類別ID) .Replace("{表單}", d[0].表單ID格式); mm.To.Add(new MailAddress(收件人Email, 收件人姓名)); MailService.Send(mm, String.Format("辦訓系統簽核通知,對象={0} 表單類別={1} 單號={2}", 收件人姓名, d[0].表單類別ID, 表單ID)); } } public void 發送簽核郵件(int 簽核ID, string 收件人姓名, string 收件人Email) { 發送簽核相關郵件(簽核ID, false, 收件人姓名, 收件人Email); } public void 發送撤簽郵件(int 簽核ID, string 收件人姓名, string 收件人Email) { 發送簽核相關郵件(簽核ID, true, 收件人姓名, 收件人Email); } public void 發送滿意度催填郵件(string 收件人姓名, string 收件人Email, string 訓練名稱, DateTime 訓練日期, DateTime 訓練日期迄, string 手機版網址) { if (string.IsNullOrEmpty(收件人Email)) return; string 日期Str = 訓練課程企劃.Get訓練日期Str(訓練日期, 訓練日期迄, "yyyy-MM-dd"); MailMessage mm = new MailMessage(); mm.Subject = "【辦訓系統】滿意度調查填寫通知"; mm.BodyEncoding = Encoding.UTF8; mm.IsBodyHtml = false; mm.Body = String.Format( @"{0} 您好, 您參加的「{1}」({2})課程已結束,請於期限內填寫滿意度調查表。 請透過手機點選以下連結填寫: {3} 感謝您的配合! 辦訓系統 敬上", 收件人姓名, 訓練名稱, 日期Str, 手機版網址); mm.To.Add(new MailAddress(收件人Email, 收件人姓名)); MailService.Send(mm, String.Format("滿意度催填郵件,對象={0} 課程={1}", 收件人姓名, 訓練名稱)); } public void 發送簽核跟催郵件(int 簽核ID, string 收件人姓名, string 收件人Email, int 天數, string templatePath) { if (string.IsNullOrEmpty(收件人Email)) return; DAC_表單簽核主檔 Dao表單簽核主檔 = new DAC_表單簽核主檔(); 表單簽核主檔List d = Dao表單簽核主檔.SelectOne(簽核ID); string content = File.ReadAllText(templatePath + @"\簽核跟催通知.html"); if (d.Count > 0) { string 表單ID = d[0].表單ID格式.Replace("
", " "); MailMessage mm = new MailMessage(); mm.Subject = String.Format("【辦訓系統簽核通知】表單類別:{0} 表單:{1}", d[0].表單類別ID, 表單ID); mm.BodyEncoding = Encoding.UTF8; mm.IsBodyHtml = true; mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; mm.Body = content.Replace("{表單類別}", d[0].表單類別ID) .Replace("{表單}", d[0].表單ID格式) .Replace("{天數}", 天數.ToString()); mm.To.Add(new MailAddress(收件人Email, 收件人姓名)); MailService.Send(mm, String.Format("辦訓系統簽核跟催通知,對象={0} 表單類別={1} 單號={2} 天數={3}", 收件人姓名, d[0].表單類別ID, 表單ID, 天數)); } } public bool 發送扣繳明細表郵件(string 寄件人, DateTime? 起日, DateTime? 迄日, 扣繳匯總郵件Item mailData, out string message) { try { message = String.Empty; if (string.IsNullOrEmpty(寄件人)) { message = "未提供寄件人郵箱"; return false; } if (mailData == null) { message = string.Format("寄給 {0} 的未提供扣繳明細表資料", mailData.收件人姓名); return false; } if (string.IsNullOrEmpty(mailData.收件人郵箱)) { message = string.Format("寄給 {0} 的未提供未提供收件人郵箱", mailData.收件人姓名); return false; } string content = File.ReadAllText(Context.Server.MapPath("~/Template/扣繳明細郵件.html")) .Replace("{主旨}", mailData.主旨) .Replace("{內文}", mailData.內文.Replace("\r\n", "
").Replace("\r", "
").Replace("\n", "
")); var report = new 扣繳領據明細郵件附件(); report.data = mailData.明細; report.起日 = 起日; report.迄日 = 迄日; var attachment = report.DoReport(); var attachStream = new MemoryStream(attachment); MailMessage mm = new MailMessage(); mm.Subject = mailData.主旨.Replace("\r", "").Replace("\n", ""); mm.BodyEncoding = Encoding.UTF8; mm.IsBodyHtml = true; mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; mm.Body = content; var 收件人郵箱 = mailData.收件人郵箱.Replace("\r", "").Replace("\n", "").Trim(); var 收件人姓名 = mailData.收件人姓名.Replace("\r", "").Replace("\n", "").Trim(); mm.To.Add(new MailAddress(收件人郵箱, 收件人姓名)); mm.Attachments.Add(new Attachment(attachStream, string.Format("{0}_扣繳領據明細.xlsx", mailData.收件人姓名))); MailService.Send(mm , comment: String.Format("扣繳明細,對象={0}", mailData.收件人姓名) , UpdateTable: "領據" , KeyField: "編號" , KeyValue: string.Join("|", mailData.明細.Select(x => x.編號.ToString()).ToArray()) , UpdateField: "郵件已發送" , UpdateValue: "1" ); return true; } catch (Exception ex) { message = ex.Message; return false; } } } public class 講師行前郵件Data { public string 收件人姓名; public string 收件人Email; public string 聯絡人姓名; public string 聯絡人電話; public string 聯絡人Email; public string 公司名稱; public DateTime 訓練日期; public DateTime 訓練日期迄; public string 訓練時間; public string 訓練時間迄; public string 備課時間; public string 訓練名稱; public string 訓練地點; public string 訓練地址; public bool 是否攜帶筆電; public bool 是否攜帶簡報; public bool 是否攜帶其他; public string 攜帶其他; public bool 是否場地投影機; public bool 是否場地麥克風; public bool 是否場地雷射筆; public bool 是否場地筆電; public bool 是否場地座位安排; public bool 是否場地白紙; public bool 是否場地其他; public string 場地其他; public bool 是否講師費; public string 講師費; public bool 是否交通費; public string 交通費; public string 合計; public bool 是否現金; public bool 是否匯款; public DateTime 給付日; public bool 是否交通安排; public string 交通安排; public bool 是否用餐; public string 用餐; public string 附件檔名; public Stream 附件內容; } }