using OT.COM.LogisticsUtil; using OT.COM.SignalerMessage; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Mail; using System.Text; using System.Text.RegularExpressions; namespace CounsellorBL { public class MailService : MessageBase { Util u = new Util(); public CResponseMessage SendMail(CRequestMessage i_crm) { CResponseMessage crm = null; string sMsg = null; try { do { string sSubject = _fetchString(i_crm, BLWording.SUBJECT); string sBody = _fetchString(i_crm, BLWording.BODY); string sSender = _fetchString(i_crm, BLWording.SENDERNAME); string sReceiver = _fetchString(i_crm, BLWording.RECEIVERS); string sUseSSL = u.GetSettingString("USESSL"); Mailer m = new Mailer(); m.SMTP = u.GetSettingString("SMTPURL"); // "smtp.gmail.com"; m.FromAddress = u.GetSettingString("MAILOWNERADDRESS"); //"ot.syssender@gmail.com"; m.Account = u.GetSettingString("MAILACCOUNT"); //"ot.syssender@gmail.com"; m.Password = u.GetSettingString("MAILPASS"); // "XXXXXX"; m.Name = sSender; m.Port = Convert.ToInt32(u.GetSettingString("MAILPORT")); // "587" m.SSL = sUseSSL != null ? sUseSSL.ToLower().StartsWith("y") : false; m.MyEncoding = Encoding.GetEncoding("UTF-8"); string [] saMailAddress = sReceiver.Split(",;".ToCharArray()); List l = new List(); foreach (string sMailAddress in saMailAddress) { l.Add(new Mailer.MailAccountInfo() { EMail = sMailAddress }); } sMsg = m.Send(sSubject, sBody, l); if (null != sMsg) { break; } crm = new CSuccessResponseMessage(null, i_crm) { MSG = "SEND SUCCESS" }; } while (false); } catch (Exception e) { sMsg = u.GetLastExceptionMsg(e); } if (null != sMsg) { crm = new CResponseMessage(i_crm) { RESULT = EResponseResult.RR_FALSE, MSG = sMsg }; } return crm; } /// /// 同步發送電子郵件 /// /// 電子郵件 /// public bool SendMailNET(System.Net.Mail.MailMessage o_myMessage) { try { //mo_Log.Debug("發送郵件開始"); //重構在 GetEmailConfig() System.Net.Mail.SmtpClient o_myMailServer = GetEmailConfig(); //new SmtpClient(sServer);//寄件服務器地址,端口 System.Net.Mail.MailAddress o_MailFrom = new System.Net.Mail.MailAddress("service@origtek-mail.com", o_myMessage.From.DisplayName); //Add by Alina 需要把發件者的信息添加到抄送人中 Regex reg = new Regex(@"(\w*)(\()*"); string strFromName = o_myMessage.From.DisplayName;//人員名稱 Match m = reg.Match(strFromName); strFromName = m.Groups[1].Value; string strFromMail = o_myMessage.From.Address;//人員Mail System.Net.Mail.MailAddress o_MailTo = new System.Net.Mail.MailAddress(strFromMail, strFromName); o_myMessage.CC.Add(o_myMessage.From);//把發件者的信息添加到抄送人中 o_myMessage.From = o_MailTo;//發件者的信息 //發送Mail //mo_Log.Debug("FormName:" + o_myMessage.From.DisplayName); //mo_Log.Debug("FormMail:" + o_myMessage.From.Address); o_myMailServer.Send(o_myMessage); return true; } catch (System.Net.Mail.SmtpException ex) { //ErrorMessages = ex.Message; //mo_Log.Error(ex); return false; } } #region SendMailNET_NoSelf /// /// 同步發送電子郵件 /// /// 電子郵件 /// public bool SendMailNET_NoSelf(System.Net.Mail.MailMessage o_myMessage) { try { //mo_Log.Debug("發送郵件開始"); System.Net.Mail.SmtpClient o_myMailServer = GetEmailConfig(); //new SmtpClient(sServer);//寄件服務器地址,端口 System.Net.Mail.MailAddress o_MailFrom = new System.Net.Mail.MailAddress("service@origtek-mail.com", o_myMessage.From.DisplayName); //發送Mail //mo_Log.Debug("FormName:" + o_myMessage.From.DisplayName + ";FormMail:" + o_myMessage.From.Address); o_myMailServer.Send(o_myMessage); return true; } catch (System.Net.Mail.SmtpException ex) { //ErrorMessages = ex.Message; //mo_Log.Error(ex); return false; } } #endregion #region "GetEmailConfig" /// /// 提供本類中其它公有郵件功能,取得基本smtp設定. /// /// private SmtpClient GetEmailConfig() { string sMailEncoding = u.GetSettingString("MailEncoding"); //設置字集防止亂碼 string sFromName = u.GetSettingString("FromName").Trim(); //顯示發件人的名字代替Mail地址 string sFromEmail = u.GetSettingString("FromEmail").Trim(); //發件人地址 string sFromUserid = u.GetSettingString("FromUserId").Trim(); //發件人的帳號 string sFromPassword = u.GetSettingString("FromPassword").Trim(); //發件人的密碼 string sServer = u.GetSettingString("Server").Trim(); //發送郵件服務器的IP地址 int i32ServerPort = 0; int.TryParse(u.GetSettingString("ServerPort"), out i32ServerPort); //發送郵件服務器的端口 int iTimeout = 0; int.TryParse(u.GetSettingString("Timeout"), out iTimeout); //發送郵件超時時間 bool blSSLYES = u.GetSettingString("SSL").Trim().Equals("true") ? true : false;//是否開啟SSL驗證 System.Net.Mail.SmtpClient o_myMailServer = new SmtpClient(sServer);//寄件服務器地址,端口 o_myMailServer.Host = sServer; if (i32ServerPort != 0) { o_myMailServer.Port = i32ServerPort; } o_myMailServer.EnableSsl = blSSLYES;//是否開啟SSL驗證 if (iTimeout != 0) { o_myMailServer.Timeout = iTimeout * 1000; //若郵件過大,請手動加長時間, 1000約等於1秒 } if (!sFromPassword.Equals("")) { o_myMailServer.UseDefaultCredentials = false; o_myMailServer.Credentials = new System.Net.NetworkCredential(sFromUserid, sFromPassword);//登錄會員名和密碼 } return o_myMailServer; } #endregion private class Mailer { public class MailAccountInfo { public string EMail { get; set; } public string Name { get; set; } } public string SMTP { get; set; } public string FromAddress { get; set; } public string Account { get; set; } public string Password { get; set; } public string Name { get; set; } public int Port { get; set; } public string ErrorMessage { get; set; } public bool SSL { get; set; } public Encoding MyEncoding { get; set; } /// /// 建構子 /// public Mailer() { MyEncoding = Encoding.GetEncoding("UTF-8"); } /// /// 寄信動作 /// /// 主旨 /// 信件內容 /// 收件者 /// /// 附件 /// CC /// BCC /// public string Send(string strSubject, string strBody, List arrayStrToAddressAndName, bool bHTML = true, List arrayStrCCAddressAndName = null, List arrayStrBCCAddressAndName = null) { string sMsg = null; try { System.Net.Mail.MailMessage mm = new System.Net.Mail.MailMessage(); if (string.IsNullOrWhiteSpace(this.FromAddress) == false) { mm.Sender = new System.Net.Mail.MailAddress(string.Format("{1}<{0}>", this.FromAddress, this.Name)); mm.From = new System.Net.Mail.MailAddress(string.Format("{1}<{0}>", this.FromAddress, this.Name)); } mm.Subject = strSubject; mm.IsBodyHtml = bHTML; mm.Body = strBody; mm.BodyEncoding = this.MyEncoding; //加入收件者 if (arrayStrToAddressAndName != null) { for (int i = 0; i < arrayStrToAddressAndName.Count; i++) { MailAccountInfo mai = arrayStrToAddressAndName[i]; if (null != mai.EMail) { mm.To.Add(mai.EMail); } } } //加入CC //string strCC = ""; if (arrayStrCCAddressAndName != null) { for (int i = 0; i < arrayStrCCAddressAndName.Count; i++) { //strCC += (i == 0 ? "" : ",") + string.Format("{1}<{0}>", arrayStrCCAddressAndName[i, 0], arrayStrCCAddressAndName[i, 1]); MailAccountInfo mai = arrayStrCCAddressAndName[i]; if (null != mai.EMail) { mm.CC.Add(mai.EMail); } } } //if (strCC != "") // mm.CC.Add(strCC); //string strBCC = ""; //加入BCC if (arrayStrBCCAddressAndName != null) { for (int i = 0; i < arrayStrBCCAddressAndName.Count; i++) { //strBCC += (i == 0 ? "" : ",") + string.Format("{1}<{0}>", arrayStrBCCAddressAndName[i, 0], arrayStrBCCAddressAndName[i, 1]); MailAccountInfo mai = arrayStrBCCAddressAndName[i]; if (null != mai.EMail) { mm.Bcc.Add(mai.EMail); } } } //if (strBCC != "") // mm.Bcc.Add(strBCC); System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(this.SMTP, this.Port); if (!string.IsNullOrWhiteSpace(this.Account) && !string.IsNullOrWhiteSpace(this.Password)) { smtp.Credentials = new NetworkCredential(this.Account, this.Password); } smtp.EnableSsl = this.SSL; mm.Body = strBody; smtp.Send(mm); mm.Dispose(); } catch (Exception ex) { sMsg = new Util().GetLastExceptionMsg(ex); } return sMsg; } } } }