using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Net.Mail; using System.Text; using System.Threading.Tasks; using ICSSoft.Base.Config.AppConfig; using ICSSoft.Base.Config.DBHelper; namespace ICSSoft.Frame.AutoSendMail { class AutoSendMail { static void Main(string[] args) { try { string connstring = System.Configuration.ConfigurationManager.ConnectionStrings["SysConnectionString"].ToString();//数据库链接 string days = ""; for (int i = 0; i < 2; i++) { string sql = @" select distinct d.WHCode 仓库编码, e.StorageName 仓库名称, d.BinCode 库位编码, f.StackName 库位名称, c.LotNO 条码, a.INVCODE 存货编码, b.INVNAME 存货名称, c.PRODUCTDATE 生产日期, a.EATTRIBUTE1 as 保质期, case when isnull(c.PRODUCTDATE,0)=0 then '' when isnull(a.EATTRIBUTE1,0)=0 then c.PRODUCTDATE ELSE DATEADD(day,cast(a.EATTRIBUTE1 as int),c.PRODUCTDATE) end as 到期日, a.MUSERName 维护人, d.LotQty 数量, b.INVUOM 单位, a.MTIME 维护时间 FROM dbo.ICSWareHouseLotInfo d inner join ICSITEMLot c on c.LotNO=d.LotNO inner join dbo.ICSINVInfo a on a.INVCODE=d.INVCODE inner join ICSINVENTORY b on a.INVCODE=b.INVCODE LEFT JOIN dbo.ICSStorage e ON d.WHCode=e.StorageCode left JOIN dbo.ICSStack f ON d.BinCode=f.StackCode where 1=1 and a.INVCODE<>'' and c.LotNO<>'' and d.LotQty>0 and datediff(day,DATEADD(day,cast(a.EATTRIBUTE1 as int),c.PRODUCTDATE),getdate()) BETWEEN 0 and {0}"; //7天和3天发送邮件 if (i == 0) { sql += " and ISNULL(d.IsMail1,0)=0"; days = System.Configuration.ConfigurationManager.AppSettings["MailDays1"].ToString();//天数 } else { sql += " and ISNULL(d.IsMail1,0)=1 and ISNULL(d.IsMail2,0)=0"; days = System.Configuration.ConfigurationManager.AppSettings["MailDays2"].ToString();//天数 } sql = string.Format(sql, days); DataTable dt = DBHelper.ExecuteDataset(connstring, CommandType.Text, sql).Tables[0]; if (dt == null || dt.Rows.Count == 0) continue; string html = @" "; html += "您好,库存中" + dt.Rows.Count + "条物料条码的保质期已不足" + days + "天,请注意及时处理。

"; html += @" "; int m = 0; foreach (DataRow dr in dt.Rows) { m++; html += @""; html += @""; html += @""; html += @""; html += @""; html += @""; html += @""; html += @""; html += @""; html += ""; } html += "智合诚物料条码到期预警邮件通知,如有疑问,请联系我们。"; html += @"
行号 仓库 库位 条码 物料编号 存货名称 数量 单位 到期日
" + m + "" + dr["仓库编码"].ToString() + "" + dr["库位编码"].ToString() + "" + dr["条码"].ToString() + "" + dr["存货编码"].ToString() + "" + dr["存货名称"].ToString() + "" + dr["数量"].ToString() + "" + dr["单位"].ToString() + "" + dr["到期日"].ToString() + "
"; html = html.Replace("'", "\""); string isMail = System.Configuration.ConfigurationManager.AppSettings["IsMail"].ToString(); if (isMail == "0") { return; } else if (isMail == "1") { string send = System.Configuration.ConfigurationManager.AppSettings["Send"].ToString();//发送邮箱地址 string sendAccount = System.Configuration.ConfigurationManager.AppSettings["SendAccount"].ToString();//发送邮箱账号 string sendPassWord = System.Configuration.ConfigurationManager.AppSettings["SendPassWord"].ToString();//发送邮箱账号 string[] to = System.Configuration.ConfigurationManager.AppSettings["To"].ToString().Split(',');//接受邮箱地址 string host = System.Configuration.ConfigurationManager.AppSettings["Host"].ToString();//邮件服务器 string port = System.Configuration.ConfigurationManager.AppSettings["Port"].ToString();//端口 默认25 MailMessage message = new MailMessage(); message.From = new MailAddress(send); foreach (string s in to) { message.To.Add(s); } message.Subject = "物料条码保质期预警-" + DateTime.Now.ToString("yyyy-MM-dd"); message.Body = html; message.SubjectEncoding = System.Text.Encoding.UTF8; //邮件标题编码 message.BodyEncoding = System.Text.Encoding.UTF8; //邮件内容编码 message.IsBodyHtml = true; //是否是HTML邮件 message.Priority = MailPriority.Normal; //邮件优先级 SmtpClient client = new SmtpClient(); client.Credentials = new System.Net.NetworkCredential(sendAccount, sendPassWord); client.Port = int.Parse(port); client.Host = host; client.Send(message); foreach (DataRow dr in dt.Rows) { if (i == 0) sql = @"update ICSWareHouseLotInfo set IsMail1=1 where LotNO='{0}' and WHCode='{1}' and BinCode='{2}'"; else sql = @"update ICSWareHouseLotInfo set IsMail2=1 where LotNO='{0}' and WHCode='{1}' and BinCode='{2}'"; sql = string.Format(sql, dr["条码"].ToString(), dr["仓库编码"].ToString(), dr["库位编码"].ToString()); DBHelper.ExecuteDataset(connstring, CommandType.Text, sql); } } else { return; } } } catch (Exception ex) { throw ex; } } } }