using AegisImplicitMail; using System.Net.Mail; using ClientLib; using ClientLib.CommonService2; using DevExpress.XtraEditors; using Popbill.Fax; using PublicLib; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading; using System.Windows.Forms; namespace HANMI_SALE { partial class CustMailPopup : XtraForm { private string m_EMAIL, m_USER_ID, m_USER_PWD, m_SERVER_ADDR, m_BizNO; private int m_SERVER_PORT; private FaxService m_FaxService = null; public string m_CUST_CD; public string m_CUST_NN; public string m_TEL_NO; public string m_OWNER_TEL_NO; public string m_MGR_TEL_NO; public CustMailPopup(string cust_nm) { InitializeComponent(); m_BizNO = UtilClass.toStr(ConstClass._GET_USER_INFO("BIZ_NO")).Replace("-", ""); m_EMAIL = ""; m_USER_ID = ""; m_USER_PWD = ""; m_SERVER_ADDR = ""; m_SERVER_PORT = 0; textEdit_Search.ImeMode = System.Windows.Forms.ImeMode.Hangul; textEdit_Search.Text = cust_nm; this.Shown += (sender, e) => { progressBarControl_Send.Properties.DisplayFormat.FormatString = "{0:#,##0} / " + 0.ToString("#,##0"); progressBarControl_Send.Position = 0; progressBarControl_Send.Properties.Minimum = 0; progressBarControl_Send.Properties.Maximum = 0; progressBarControl_Send.Visible = true; Application.DoEvents(); DataView s06 = new DataView(ConstClass._DATA); s06.RowFilter = "CATE_CD = 'S' and GRP_CD = 'S01' and NO_CD = '06'"; DataView s07 = new DataView(ConstClass._DATA); s07.RowFilter = "CATE_CD = 'S' and GRP_CD = 'S01' and NO_CD = '07'"; DataView s11 = new DataView(ConstClass._DATA); s11.RowFilter = "CATE_CD = 'S' and GRP_CD = 'S01' and NO_CD = '11'"; if (s06.Count > 0 || s07.Count > 0 || s11.Count > 0) { string linkID = UtilClass.toStr(s06[0]["NO_CD_NM"]); string key = UtilClass.toStr(s07[0]["NO_CD_NM"]); if (!UtilClass.isNull(linkID) && !UtilClass.isNull(key)) { m_FaxService = new FaxService(linkID, key); m_FaxService.IsTest = s11.Count > 0 && UtilClass.isEqual(s11[0]["NO_CD_NM"], "Y"); } } if (m_FaxService != null) { double remainPoint = m_FaxService.GetBalance(m_BizNO); //labelControl_Point.Text = remainPoint.ToString("#,##0") + " P"; } DataView s01 = new DataView(ConstClass._DATA); s01.RowFilter = "CATE_CD = 'S' and GRP_CD = 'S01' and NO_CD = '01'"; if (s01.Count > 0) { m_EMAIL = UtilClass.toStr(s01[0]["NO_CD_NM"]); } DataView view = new DataView(ConstClass._DATA); view.RowFilter = "CATE_CD = 'S' and GRP_CD = 'S01' and NO_CD = '01'"; m_USER_ID = UtilClass.toStr(view[0]["NO_CD_NM"]); view.RowFilter = "CATE_CD = 'S' and GRP_CD = 'S01' and NO_CD = '02'"; m_USER_PWD = UtilClass.toStr(view[0]["NO_CD_NM"]); view.RowFilter = "CATE_CD = 'S' and GRP_CD = 'S01' and NO_CD = '03'"; m_SERVER_ADDR = UtilClass.toStr(view[0]["NO_CD_NM"]); view.RowFilter = "CATE_CD = 'S' and GRP_CD = 'S01' and NO_CD = '04'"; m_SERVER_PORT = UtilClass.toInt(view[0]["NO_CD_NM"]); searchProc(); }; textEdit_Search.KeyPress += (sender, e) => { if (e.KeyChar == '\r') { searchProc(); } }; simpleButton_Text_Clear.Click += (sender, e) => { textEdit_Search.Text = ""; }; simpleButton_Search.Click += (sender, e) => { searchProc(); }; radioGroup_CUST_KIND.EditValueChanged += (sender, e) => { searchProc(); }; radioGroup_ORDER_BY.EditValueChanged += (sender, e) => { searchProc(); }; radioGroup_CUST_NAME_GBN.EditValueChanged += (sender, e) => { searchProc(); }; gridView_Main.KeyPress += (sender, e) => { if (e.KeyChar == '\r') { DataRow row = gridView_Main.GetFocusedDataRow(); if (row != null) { m_CUST_CD = UtilClass.toStr(row["CUST_CD"]); m_CUST_NN = UtilClass.toStr(row["CUST_NM"]); m_TEL_NO = UtilClass.toStr(row["TEL_NO"]); m_OWNER_TEL_NO = UtilClass.toStr(row["OWNER_TEL_NO"]); m_MGR_TEL_NO = UtilClass.toStr(row["MGR_TEL_NO"]); this.DialogResult = DialogResult.Yes; this.Close(); } } }; gridView_Main.DoubleClick += (sender, e) => { DataRow row = gridView_Main.GetFocusedDataRow(); if (row != null) { m_CUST_CD = UtilClass.toStr(row["CUST_CD"]); m_CUST_NN = UtilClass.toStr(row["CUST_NM"]); m_TEL_NO = UtilClass.toStr(row["TEL_NO"]); m_OWNER_TEL_NO = UtilClass.toStr(row["OWNER_TEL_NO"]); m_MGR_TEL_NO = UtilClass.toStr(row["MGR_TEL_NO"]); this.DialogResult = DialogResult.Yes; this.Close(); } }; simpleButton_Cancel.Click += (sender, e) => { this.DialogResult = DialogResult.Cancel; this.Close(); }; } public void searchProc() { try { this.Cursor = Cursors.WaitCursor; gridControl_Main.DataSource = null; SerializedSqlParam[] aParam = new SerializedSqlParam[] { ClientClass.CreateSqlParameter("COMP_CD", SqlDbType.NVarChar, ConstClass._COMP_CD), ClientClass.CreateSqlParameter("CUST_KIND", SqlDbType.NVarChar, radioGroup_CUST_KIND.EditValue), ClientClass.CreateSqlParameter("ORDER_BY", SqlDbType.Int, radioGroup_ORDER_BY.EditValue), ClientClass.CreateSqlParameter("DEL_YN", SqlDbType.NVarChar, checkBox_DEL_YN.Checked ? 'N':'Y'), ClientClass.CreateSqlParameter("CUST_NAME_GBN", SqlDbType.Int, radioGroup_CUST_NAME_GBN.EditValue), ClientClass.CreateSqlParameter("SEARCH", SqlDbType.NVarChar, textEdit_Search.Text) }; ResultData resultData = ClientClass.GetData("GetCustSelectPopup_M", aParam); if (resultData.isError) { throw new Exception(resultData.ResultValue); } gridControl_Main.DataSource = resultData.TableData; gridView_Main.Focus(); this.Cursor = Cursors.Arrow; } catch (Exception ex) { this.Cursor = Cursors.Arrow; XtraMessageBox.Show(ex.Message); } } private void simpleButton_SelectAll_Click(object sender, EventArgs e) { DataTable aData = gridControl_Main.DataSource as DataTable; foreach (DataRow r in aData.Rows) { r["SEL_YN"] = "Y"; } } private void simpleButton1_Click(object sender, EventArgs e) { try { int count = 0; DataTable aData = gridControl_Main.DataSource as DataTable; foreach (DataRow r in aData.Rows) { if (UtilClass.toStr(r["SEL_YN"]) == "Y") { count++; } } progressBarControl_Send.Properties.DisplayFormat.FormatString = "{0:#,##0} / " + count.ToString("#,##0"); progressBarControl_Send.Position = 0; progressBarControl_Send.Properties.Minimum = 0; progressBarControl_Send.Properties.Maximum = count; progressBarControl_Send.Visible = true; Application.DoEvents(); if (XtraMessageBox.Show(count + " 건의 메일을 발송하시겠습니까? (담당자 이메일 주소가 없는 경우 전송되지 않습니다)", "메일 전송", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes) { return; } List lstAddr = new List(); int nSucc = 0; int nFail = 0; int nSkip = 0; int nJung = 0; foreach (DataRow r in aData.Rows) { if (UtilClass.toStr(r["SEL_YN"]) == "Y") { string strEMail = UtilClass.toStr(r["MGR_EMAIL"]).Trim(); //strEMail = "kang@signus.kr"; if (strEMail.Length > 0) { if (lstAddr.FirstOrDefault(x => x == strEMail) == null) { lstAddr.Add(strEMail); if (sendMail(strEMail)) nSucc++; else nFail++; } else { nJung++; } } else { nSkip++; } } progressBarControl_Send.Position++; Application.DoEvents(); } string strM = "메일 발송이 완료되었습니다."; strM += "\n\n전송 완료: " + nSucc.ToString(); strM += "\n\n전송 실패: " + nFail.ToString(); strM += "\n\n메일주소 중복: " + nJung.ToString(); strM += "\n\n메일주소 없음: " + nSkip.ToString(); XtraMessageBox.Show(strM); } catch (Exception ex) { XtraMessageBox.Show(ex.Message); } } private void simpleButton_SEND_FAX_Click(object sender, EventArgs e) { try { DataView s08 = new DataView(ConstClass._DATA); s08.RowFilter = "CATE_CD = 'S' and GRP_CD = 'S01' and NO_CD = '08'"; if (s08.Count < 1) { throw new Exception("팩스 전송을 위한 환경정보가 없습니다."); } string userID = UtilClass.toStr(s08[0]["NO_CD_NM"]); if (UtilClass.isNull(userID)) { throw new Exception("팩스 전송을 위한 팝빌 등록정보가 없습니다."); } object faxObj = ConstClass._GET_USER_INFO("FAX_NO"); string myFaxNo = UtilClass.toStr(faxObj); if (UtilClass.isNull(myFaxNo) || UtilClass.isNull(m_BizNO)) { throw new Exception("회사정보관리에서 팩스번호 및 사업자번호를 입력하신 후, 시스템을 재시작하시길 바랍니다."); } int count = 0; DataTable aData = gridControl_Main.DataSource as DataTable; foreach (DataRow r in aData.Rows) { if (UtilClass.toStr(r["SEL_YN"]) == "Y") { count++; } } progressBarControl_Send.Properties.DisplayFormat.FormatString = "{0:#,##0} / " + count.ToString("#,##0"); progressBarControl_Send.Position = 0; progressBarControl_Send.Properties.Minimum = 0; progressBarControl_Send.Properties.Maximum = count; progressBarControl_Send.Visible = true; Application.DoEvents(); if (XtraMessageBox.Show("팩스는 제목과 내용은 무시되고, 첨부 파일만 발송됩니다. 계속 하시겠습니까?", "팩스 발송", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes) { return; } if (XtraMessageBox.Show(count + " 건의 팩스를 발송하시겠습니까? (팩스 번호가 없는 경우 전송되지 않습니다)", "팩스 발송", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes) { return; } List lstAddr = new List(); int nSucc = 0; int nFail = 0; int nSkip = 0; int nJung = 0; foreach (DataRow r in aData.Rows) { if (UtilClass.toStr(r["SEL_YN"]) == "Y") { string strEMail = UtilClass.toStr(r["FAX_NO"]).Trim(); //strEMail = "0504-080-9514"; if (strEMail.Length > 0) { if (lstAddr.FirstOrDefault(x => x == strEMail) == null) { lstAddr.Add(strEMail); if (sendFax(userID, m_BizNO, myFaxNo, strEMail, UtilClass.toStr(r["CUST_NM"]), this.textEdit_Subject.Text)) nSucc++; else nFail++; } else { nJung++; } } else { nSkip++; } } progressBarControl_Send.Position++; Application.DoEvents(); } string strM = "팩스 발송이 완료되었습니다."; strM += "\n\n전송 완료: " + nSucc.ToString(); strM += "\n\n전송 실패: " + nFail.ToString(); strM += "\n\n팩스번호 중복: " + nJung.ToString(); strM += "\n\n팩스번호 없음: " + nSkip.ToString(); XtraMessageBox.Show(strM); } catch (Exception ex) { XtraMessageBox.Show(ex.Message); } } private void simpleButton_SelectNon_Click(object sender, EventArgs e) { DataTable aData = gridControl_Main.DataSource as DataTable; foreach (DataRow r in aData.Rows) { r["SEL_YN"] = "N"; } } private void simpleButton_FileFind_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Title = "파일열기"; if (openFileDialog.ShowDialog() != DialogResult.OK) return; this.textEdit_File.Text = openFileDialog.FileName; } private bool sendMail(string email) { ResultClass result = new ResultClass(); try { MimeMailMessage mail = new MimeMailMessage(); mail.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("EMAIL", Encoding.UTF8, "text/html")); mail.IsBodyHtml = false; mail.Body = this.textEdit_Content.Text; mail.BodyEncoding = Encoding.UTF8; mail.Subject = this.textEdit_Subject.Text; mail.SubjectEncoding = Encoding.UTF8; mail.Sender = new MimeMailAddress(m_EMAIL, getEncodeDisplayName(ConstClass._COMP_NM)); mail.From = new MimeMailAddress(m_EMAIL, getEncodeDisplayName(ConstClass._COMP_NM)); mail.To.Add(email); string fileName = this.textEdit_File.Text; if (System.IO.File.Exists(fileName)) { MimeAttachment attch = new MimeAttachment(fileName); Application.DoEvents(); mail.Attachments.Add(attch); Application.DoEvents(); } SmtpSocketClient smtp = new SmtpSocketClient(); smtp.Host = m_SERVER_ADDR; smtp.Port = m_SERVER_PORT; smtp.SslType = SslMode.Ssl; smtp.User = m_USER_ID; smtp.Password = m_USER_PWD; smtp.AuthenticationMode = AuthenticationType.Base64; smtp.SendCompleted += (sendere, ee) => { if (ee.Error != null) { throw new Exception(ee.Error.Message); } else { } }; smtp.SendMail(mail); return true; } catch (Exception ex) { //result.isError = true; //result.ResultStr = ex.Message; XtraMessageBox.Show(ex.Message); } return false; } private bool sendFax(string userID, string bizNo, string fromFax, string toFax, string toName, string strTitle) { ResultClass result = new ResultClass(); try { string requestNum = "HANMI" + DateTime.Now.ToString("yyyyMMddHHmmssfff"); string fileName = this.textEdit_File.Text; if (System.IO.File.Exists(fileName)) { DateTime? reserveDT = null; toName = toName + " 귀하"; m_FaxService.SendFAX(bizNo.Replace("-", "").Replace(" ", ""), fromFax, toFax, toName, fileName, reserveDT, userID, false, strTitle, requestNum); return true; } } catch (Exception ex) { //result.isError = true; //result.ResultStr = ex.Message; XtraMessageBox.Show(ex.Message); } return false; } private string getEncodeDisplayName(string str) { var fromEncoding = Encoding.UTF8; var encodingName = fromEncoding.BodyName.ToLower(); return "=?" + encodingName + "?B?" + TransferEncoder.ToBase64(fromEncoding.GetBytes(str)) + "?="; } } }