using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace JobReportMailService { public partial class fSendMail : fChildBase { public fSendMail() { InitializeComponent(); } private void fJobReportDay_Load(object sender, EventArgs e) { this.Delaytime = 3000; task = Task.Run(() => { while (taskrun) { if (taskwait) { task.Wait(1000); continue; } var ts = DateTime.Now - ChkMakeSchDayWeekTime; if (ts.TotalMilliseconds <= 1000) { continue; } else { ChkMakeSchDayWeekTime = DateTime.Now; try { RunData(); } catch (Exception ex) { addmsg(ex.Message); task.Wait(5000); } } Task.Delay(Delaytime).Wait(); } }); timer1.Start(); if (Pub.setting.autoRunData) btRun.PerformClick(); } void RunData() { SendMail(); System.Threading.Thread.Sleep(1000); MakeAutoMail(); } void SendMail() { //그룹무관하게 모든 자료를 전송처리한다 var ta = new DataSet1TableAdapters.MailDataTableAdapter(); var sendList = ta.GetData(); //발송되지않은 메일목록 if (sendList.Rows.Count > 0) addmsg("Found : " + sendList.Rows.Count.ToString()); else addmsg("전송할 메일이 없습니다"); foreach (DataSet1.MailDataRow dr in sendList) { //전자메일 검증을 한다. var list_from = getMaillist(dr.fromlist); var list_to = getMaillist(dr.tolist); var list_bcc = getMaillist(dr.bcc); var list_cc = getMaillist(dr.cc); string sendMsg = ""; if (list_from == "") { sendMsg = ("보내는 주소가 없습니다"); } else if (dr.subject.Trim() == "") { sendMsg = ("메일 제목이 없습니다"); } else if (dr.body.Trim() == "") { sendMsg = ("본문이 없습니다"); } else if (list_to == "") { sendMsg = ("받는 주소가 없습니다"); } else { var body = dr.body; body += "

" + "
이 메일은 EET 프로그램에서 자동 발신 되었습니다." + "
메일이 잘못 전송 되었다면 [chikyun.kim@amkor.co.kr] 로 문의 주시기 바랍니다" + "

"; //전송을 해야 함 var mc = new System.Net.Mail.SmtpClient("10.101.10.6"); var msg = new System.Net.Mail.MailMessage (list_from, list_to, dr.subject, body); if (list_bcc != "") msg.Bcc.Add(list_bcc); if (list_cc != "") msg.CC.Add(list_cc); msg.IsBodyHtml = true; try { mc.Send(msg); Console.WriteLine("send mail to" + list_to + ",subject=" + dr.subject); sendMsg = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } catch (Exception eX) { sendMsg = eX.Message; } } Console.WriteLine(string.Format("Send Complete index={0},Msg={1}", dr.idx, sendMsg)); ta.UpdateSendOK(sendMsg, dr.idx); break; } } static DateTime ChkAutoDate = DateTime.Now.AddDays(-1); void MakeAutoMail() { var ts = DateTime.Now - ChkAutoDate; if (ts.TotalMinutes < 1) return; //10분마다 자동 생성 데이터를 처리한다 Console.WriteLine("Check Auto Make Mail"); var taData = new DataSet1TableAdapters.MailDataTableAdapter(); var taList = new DataSet1TableAdapters.MailAutoTableAdapter(); var dtList = taList.GetByAutoSend(); var dtInsert = new DataSet1.MailDataDataTable(); //대상 Console.WriteLine("Make Auto Send Mail Data (" + dtList.Rows.Count.ToString() + ")"); foreach (DataSet1.MailAutoRow dr in dtList) { //시간정보가 없는 애들은 처리 하지 않음 if (dr.stime.IndexOf(":") == -1) continue; if (dr.sday == null || dr.sday.Length < 2) continue; //발신시간을 넘어야 한다 var curTime = DateTime.Now.ToString("HH:mm"); if (string.Compare(curTime, dr.stime) < 0) continue; //지정된 시간 이전이면 생성 안한다 //자동생성 구분용 카테고리 var cate = string.Format("{0},{1}", dr.sday[0], dr.sday[1]); //동륵일 var pdate = DateTime.Now.ToString("yyyy-MM-dd"); //같은날, 같은 atime aidx pdate 의 같이 있으면 이미 생성된것이므로 추가하지 않는다 var existData = taData.FindAutoData(dr.idx, dr.stime, pdate, cate); var PreMakeCount = (int)(existData); if (PreMakeCount > 0) continue; //전송간격과 대상 if (dr.sday[0] == 1) { //week var bitString = Convert.ToString(dr.sday[1], 2).PadLeft(8, '0').ToArray(); var weeknum = (int)(DateTime.Now.DayOfWeek); if (bitString[weeknum + 1] == '0') continue; } else { //month if (dr.sday[1] != DateTime.Now.Day) continue; } //같은날, 같은 atime aidx pdate 의 같이 있으면 이미 생성된것이므로 추가하지 않는다 //생성해야할 자료라면 만들어 준다 var newdr = dtInsert.NewMailDataRow(); newdr.pdate = pdate;// DateTime.Now.ToString("yyyy-MM-dd"); newdr.gcode = dr.gcode; newdr.fromlist = dr.fromlist; newdr.tolist = dr.tolist; newdr.bcc = dr.bcc; newdr.cate = cate;// string.Format("{0},{1}", dr.sday[0], dr.sday[1]); //cate에 해당 자료를 기록한다. newdr.cc = dr.cc; newdr.subject = dr.subject; newdr.body = dr.body; newdr.aidx = dr.idx; newdr.atime = dr.stime; newdr.wuid = "DEV"; newdr.wdate = DateTime.Now; dtInsert.AddMailDataRow(newdr); try { taData.Update(newdr); Console.WriteLine("auto make : " + newdr.tolist + ",subject=" + newdr.subject); } catch (Exception eX) { Console.WriteLine("auto make error : " + eX.Message); } } ChkAutoDate = DateTime.Now; } string getMaillist(string org) { org = org.Replace(";", ",").Replace(":", ","); string list_to = ""; foreach (var item in org.Split(',')) { if (item.Trim() != "") { var atindex = item.IndexOf("@"); if (atindex != -1) { var dotindex = item.IndexOf(".", atindex + 1); if (dotindex != -1) { //정상이므로 추가한다. if (list_to != "") list_to += ","; list_to += item.Trim(); } } } } return list_to; } private void toolStripButton1_Click(object sender, EventArgs e) { taskwait = !taskwait; if (taskwait == false) ChkMakeSchDayWeekTime = DateTime.Now.AddHours(-1); } private void timer1_Tick(object sender, EventArgs e) { if (task != null) { if (task.IsCompleted) this.btRun.Text = "완료"; else if (task.IsCanceled) this.btRun.Text = "취소"; else if (taskwait) this.btRun.Text = "대기상태"; else this.btRun.Text = "가동중"; this.btRun.Enabled = true; } else { this.btRun.Text = "사용불가"; this.btRun.Enabled = false; } } } }