274 lines
9.8 KiB
C#
274 lines
9.8 KiB
C#
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 - LastUpdateTime;
|
|
if (ts.TotalMilliseconds <= 1000)
|
|
{
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
LastUpdateTime = DateTime.Now;
|
|
try
|
|
{
|
|
RunData();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
addmsg(ex.Message);
|
|
task.Wait(5000);
|
|
}
|
|
}
|
|
Task.Delay(Delaytime).Wait();
|
|
}
|
|
|
|
});
|
|
timer1.Start();
|
|
}
|
|
|
|
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 +=
|
|
"<p>" +
|
|
"<br />이 메일은 EET 프로그램에서 자동 발신 되었습니다." +
|
|
"<br />메일이 잘못 전송 되었다면 [<a href='chikyun.kim@amkor.co.kr'>chikyun.kim@amkor.co.kr</a>] 로 문의 주시기 바랍니다" +
|
|
"</p>";
|
|
|
|
|
|
//전송을 해야 함
|
|
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 = "MANAGER";
|
|
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)
|
|
LastUpdateTime = DateTime.Now.AddHours(-1);
|
|
}
|
|
|
|
private void timer1_Tick(object sender, EventArgs e)
|
|
{
|
|
if (task != null)
|
|
{
|
|
if (task.IsCompleted) this.toolStripButton1.Text = "완료";
|
|
else if (task.IsCanceled) this.toolStripButton1.Text = "취소";
|
|
else if (taskwait) this.toolStripButton1.Text = "대기상태";
|
|
else this.toolStripButton1.Text = "가동중";
|
|
this.toolStripButton1.Enabled = true;
|
|
}
|
|
else
|
|
{
|
|
this.toolStripButton1.Text = "사용불가";
|
|
this.toolStripButton1.Enabled = false;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|