using System; using System.Collections.Generic; using System.Linq; using System.Text; using Quartz; using System.Data; //using NFine.Data.Extensions; using System.Configuration; using ICSSoft.FromERP; //using ICSSoft.SendMail; using System.Data.SqlClient; using System.Net; using System.Net.Mail; using System.Security.Cryptography.X509Certificates; using System.Net.Security; namespace ICSSoft.FromERP { //邮件 public class ICSSendEmail : IJob { private static object key = new object(); private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public void Execute(IJobExecutionContext context) { try { lock (key) { log.Info("开始……………………………………………………………………"); Execute(); log.Info("结束……………………………………………………………………"); } } catch (Exception ex) { log.Error(ex.ToString()); } } public void Execute() { string erpName = ICSHelper.GetConfigString()["ERPDB"]; string conStr = ICSHelper.GetConnectString(); string Namespace = this.GetType().Namespace; //string Class = this.GetType().Name; DataTable dt = ICSHelper.GetERPDB(conStr); foreach (DataRow dr1 in dt.Rows) { string WorkPoint = dr1["WorkPointCode"].ToString(); string Class = this.GetType().Name + WorkPoint; erpName = string.Format(erpName, WorkPoint); string sql = @"SELECT a.ASNID, a.STNO,a.VENDORCODE,b.cVenName AS VENDORNAME,a.Auditor,CONVERT(NVARCHAR(50),a.CREATETIME,23) as CREATETIME, a.CREATEUSER,a.ADDITION1,a.ADDITION2,CONVERT(NVARCHAR(50), a.EXPARRIVALDATE,23) as EXPARRIVALDATE, CASE WHEN c.cCode IS NULL THEN a.STSTATUS ELSE '3' END AS STATUS FROM dbo.ICSASN a LEFT JOIN dbo.ICSVendor b ON a.VENDORCODE=b.cVenCode and a.WOrkPoint=b.WorkPoint LEFT JOIN ICSPOArrive c ON a.STNO = c.STNO where datediff( dd, EXPARRIVALDATE,getdate())>=3 and a.STSTATUS='2' and c.cCode IS NULL "; DataTable dtInInfo = ICSHelper.ExecuteTable(conStr, sql); if (dtInInfo.Rows.Count > 0) { string MailOpen = ICSHelper.GetConfigString("MailOpen"); if (MailOpen == "true") { string SendHost = ICSHelper.GetConfigString("SendHost"); string StrSendPort = ICSHelper.GetConfigString("SendPort"); int SendPort = 25; if (!string.IsNullOrEmpty(StrSendPort)) SendPort = Convert.ToInt32(ICSHelper.GetConfigString("SendPort")); string SendDisplayName = ICSHelper.GetConfigString("SendDisplayName"); string SendAddress = ICSHelper.GetConfigString("SendAddress"); string SendPassword = ICSHelper.GetConfigString("SendPassword"); foreach (DataRow dr in dtInInfo.Rows) { string cVenCode = dr["VENDORCODE"].ToString(); string PersonCode = dr["Auditor"].ToString(); string sqls = " SELECT F_Email FROM dbo.Sys_SRM_User WHERE F_Account= '" + cVenCode + "' or F_Account='" + PersonCode + "'"; DataTable dts = ICSHelper.ExecuteTable(conStr, sqls); string Email = string.Empty; foreach (DataRow drs in dts.Rows) { Email += drs["F_Email"].ToString() + ","; } string TOAddress = Email.TrimEnd(','); string CCAddress = ""; string Subject = "有来自华恒SRM平台送货订单信息"; bool isBodyHtml = false; string VenName = dr["VENDORNAME"].ToString(); string STNO = dr["STNO"].ToString(); string NowDate = DateTime.Now.GetDateTimeFormats('D')[0].ToString(); string body = VenName + ":"; body += "\r\n"; body += " 您好!有来自华恒SRM送货订单:" + STNO + " ,已超3天未入库,请联系相关人员查询!"; body += "\r\n"; body += " 顺颂商祺!"; body += "\r\n"; body += " 昆山华恒焊接股份有限公司"; body += "\r\n"; body += " " + NowDate; //string StrConn = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString; SendEmail(conStr, SendHost, SendPort, SendDisplayName, SendAddress, SendPassword, TOAddress, CCAddress, Subject, isBodyHtml, body); //ICSHelper.ExecuteTable(conStr, null, sql); } } } } } public static void SendEmail(string ConnectionString, string SendHost, int SendPort, string SendDisplayName, string SendAddress, string SendPassword, string TOAddress, string CCAddress, string Subject, bool IsBodyHtml, string Body) { try { SmtpClient smtpClient = new SmtpClient { //EnableSsl = false, UseDefaultCredentials = false, Host = SendHost, Port = SendPort, Credentials = new NetworkCredential(SendAddress, SendPassword) }; MailMessage mailMessage = new MailMessage { Subject = Subject, SubjectEncoding = Encoding.GetEncoding("utf-8"), BodyEncoding = Encoding.GetEncoding("utf-8"), From = new MailAddress(SendAddress, SendDisplayName), IsBodyHtml = IsBodyHtml, Body = Body }; string[] array = TOAddress.Split(new char[] { ',' }); string[] array2 = array; for (int i = 0; i < array2.Length; i++) { string text = array2[i]; if (!string.IsNullOrEmpty(text)) { mailMessage.To.Add(text); } } string[] array3 = CCAddress.Split(new char[] { ',' }); array2 = array3; for (int i = 0; i < array2.Length; i++) { string text2 = array2[i]; if (!string.IsNullOrEmpty(text2)) { mailMessage.CC.Add(text2); } } ServicePointManager.ServerCertificateValidationCallback = ((object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) => true); smtpClient.Send(mailMessage); InsertData(ConnectionString, SendHost, SendPort, SendDisplayName, SendAddress, SendPassword, TOAddress, CCAddress, Subject, IsBodyHtml, Body, "1", null); } catch (Exception ex) { InsertData(ConnectionString, SendHost, SendPort, SendDisplayName, SendAddress, SendPassword, TOAddress, CCAddress, Subject, IsBodyHtml, Body, "2", ex.Message); throw; } } private static void InsertData(string ConnectionString, string SendHost, int SendPort, string SendDisplayName, string SendAddress, string SendPassword, string TOAddress, string CCAddress, string Subject, bool IsBodyHtml, string Body, string Status, string Message) { try { try { string text = "INSERT INTO ICSSendMail(ID, SendHost, SendPort, SendDisplayName, SendAddress, \r\n SendPassword, TOAddress, CCAddress, Subject, IsBodyHtml, \r\n Body, Retry, Status, Message, MUSER, MUSERName, CreatTIME, ModifyTIME)\r\n VALUES(NEWID(),'{0}','{1}','{2}','{3}',\r\n '{4}','{5}','{6}','{7}','{8}',\r\n '{9}','0','{10}','{11}','','',GETDATE(),GETDATE())"; text = string.Format(text, new object[] { SendHost, SendPort, SendDisplayName, SendAddress, SendPassword, TOAddress, CCAddress, Subject, IsBodyHtml, Body.Replace("'", "''"), Status, Message }); ExecuteDate(ConnectionString, text); } catch (Exception ex) { throw ex; } } catch (Exception ex) { throw ex; } } private static void ExecuteDate(string conStr, string sql) { try { using (SqlConnection sqlConnection = new SqlConnection(conStr)) { sqlConnection.Open(); try { using (SqlTransaction sqlTransaction = sqlConnection.BeginTransaction()) { using (SqlCommand sqlCommand = new SqlCommand()) { sqlCommand.Connection = sqlConnection; sqlCommand.Transaction = sqlTransaction; sqlCommand.CommandText = sql; try { int num = sqlCommand.ExecuteNonQuery(); sqlTransaction.Commit(); } catch (Exception ex) { sqlTransaction.Rollback(); throw ex; } } } } catch (Exception ex) { throw ex; } finally { if (sqlConnection.State == ConnectionState.Open) { sqlConnection.Close(); } sqlConnection.Dispose(); } } } catch (Exception ex) { throw ex; } } } }