From 31ad5fe63605f4af9b25df06fd955f06387b3919 Mon Sep 17 00:00:00 2001 From: iyak Date: Tue, 21 Jan 2025 08:36:45 +0000 Subject: [PATCH] =?UTF-8?q?6432.=20SMTP=20=EC=98=A4=EB=A5=98=20FOCommon.Fi?= =?UTF-8?q?ndMe()=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20BaseController.SendEm?= =?UTF-8?q?ailNew()=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Base/Controller/BasePartialController.cs | 72 +++++++++++++++++++++++- Base/Controller/FOCommon.cs | 47 +++++++--------- 2 files changed, 88 insertions(+), 31 deletions(-) diff --git a/Base/Controller/BasePartialController.cs b/Base/Controller/BasePartialController.cs index f60aa92..0e712eb 100644 --- a/Base/Controller/BasePartialController.cs +++ b/Base/Controller/BasePartialController.cs @@ -14,6 +14,8 @@ using NP.Model; using System.Net.Http; using OfficeOpenXml; using System.Collections; +using System.Net.Mail; +using System.Net; namespace NP.Base { @@ -1073,8 +1075,7 @@ namespace NP.Base System.Web.Mail.MailMessage mail = null; switch (SendType) { - case 1: - break; + case 1: break; default: break; @@ -1122,9 +1123,74 @@ namespace NP.Base SetError("emailfail:" + rcvEmail + ":" + ex.Message + ex.StackTrace); return 0; } + return 1; } + /// + /// 메일발송 (추가) + /// + /// + /// + /// + /// + protected int SendEmailNew(string title, string Html, string toEmail) + { + // 2025-01-21 (SendEmail 이 더이상 사용되지 않는 코드로 보여지기에 새로 생성) + try + { + /* + Web.config에서 설정된 값을 가져온다 (배열순서) + => + */ + + string[] masterEmail = GetConfig("masteremail").Split(';'); + string smtpHost = masterEmail[1]; + int smtpPort = Convert.ToInt32(masterEmail[2]); + string smtpUser = masterEmail[3]; + string smtpPassword = masterEmail[4]; + string fromEmail = masterEmail[0]; + + using (var smtpClient = new SmtpClient(smtpHost, smtpPort)) + { + // 타임아웃 설정 추가 + smtpClient.Timeout = 30000; // 10초 + + smtpClient.Credentials = new NetworkCredential(smtpUser, smtpPassword); + smtpClient.EnableSsl = true; + + // SSL/TLS 설정 명시 + smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; + + using (var mailMessage = new System.Net.Mail.MailMessage()) + { + mailMessage.From = new MailAddress(fromEmail, "영남건설기술교육원"); + mailMessage.Subject = title; + mailMessage.Body = Html; + mailMessage.IsBodyHtml = true; + mailMessage.To.Add(toEmail); + + smtpClient.Send(mailMessage); + } + } + + return 1; + } + catch (SmtpException ex) + { + // SMTP 특정 예외 처리 + Logger.Error($"SMTP 에러: {ex.Message}"); + return 0; + } + catch (Exception ex) + { + // 일반 예외 처리 + Logger.Error($"메일발송 에러 : {ex.Message}"); + return 0; + } + } + + /// /// SendMailTemplate /// @@ -1148,7 +1214,7 @@ namespace NP.Base try { - MailMessage mail = new MailMessage(); + var mail = new System.Web.Mail.MailMessage(); mail.From = sdEmail; mail.To =rcvEmail; mail.Subject = title; diff --git a/Base/Controller/FOCommon.cs b/Base/Controller/FOCommon.cs index 82bda9f..413c747 100644 --- a/Base/Controller/FOCommon.cs +++ b/Base/Controller/FOCommon.cs @@ -331,46 +331,37 @@ namespace NP.Base.Controllers } } - //else - //{ - // users = Dao.Get("users.findme", new Hashtable() { { "Mobile1", em }, { "Mobile2", em.Replace("-", "") } }).ToList(); - //} + if (users.Count() != 1) { //검색결과 2개 개정이라면 보내면 안됨..다른사람일 수도 return JsonOK(-1); } var user = users.First(); + //메시지 전송시간 기록 Random r = new Random(); int pwcallno = r.Next(1, 30000); Dao.Save("users.pwcalltime", new Hashtable() { { "userno", user.userno }, { "pwcallno", pwcallno } }); var masteremail = GetConfig("masteremail"); String fronturl = GetConfig("fronturl"); - //if (IsEmail) - //{ - //var et = Dao.Get("mm.mailtp.get", 1).FirstOrDefault(); - //var MHtml = ""; - //if (et != null) - //{ - // MHtml = et.MHtml.Replace("src=\"/Files/Editor", "src=\"" + fronturl + "/Files/Editor").Replace("^비밀번호링크^", fronturl + "/Account/FindMe?PWCallNo=" + pwcallno + "&UserNo=" + user.UserNo).Replace("^회원명^", user.UserName).Replace("../img/", fronturl + "/img/").Replace("^fronturl^", fronturl); - //} - //else - //{ - var MHtml = "\"\"

안녕하세요, " + user.username + "님,
당신의 영남건설기술교육원 비밀번호를 재설정하기 위한 링크를 전달합니다.
" + - "아래 링크를 클릭하셔서 비밀번호를 재설정해주세요.

" + - "비밀번호 재설정

이 링크는 24시간 뒤 만료됩니다."; - //} - //return JsonOK(SendEmail(0, user.userid, null, null, user.username + "님, 유앤파트너즈 비밀번호를 재설정할 수 있는 링크를 전달합니다.", MHtml)); - return JsonOK(SendEmail(masteremail.Split(';')[1], GetInt(masteremail.Split(';')[2]), masteremail.Split(';')[3], masteremail.Split(';')[4], 999, user.email, masteremail.Split(';')[0], "영남건설기술교육원 운영자", "[영남건설기술교육원] 비밀번호 찾기 안내", MHtml, "", "0:0")); - //} - //else - //{ - // var html = "회원님의 이메일주소는 " + user.UserId + " 아래 링크를 클릭해주셔서 인증을 완료해주세요. [" + fronturl + "/Account/FindMe?PWCallNo=" + pwcallno + "&UserNo=" + user.UserNo + "]"; - // return JsonOK(SendSms(null, user.Mobile, "[유앤파트너즈] 계정찾기", html, null, true, "7")); - // //Sms.Save("test", new Hashtable() { }); - // //return JsonOK(1); - //} + + if (IsEmail && users.Count == 1) + { + var MHtml = "\"\"

안녕하세요, " + user.username + "님,
당신의 영남건설기술교육원 비밀번호를 재설정하기 위한 링크를 전달합니다.
" + + "아래 링크를 클릭하셔서 비밀번호를 재설정해주세요.

" + + "비밀번호 재설정

이 링크는 24시간 뒤 만료됩니다."; + + int mailReuslt = SendEmailNew("[영남건설기술교육원] 비밀번호 찾기 안내", MHtml, email); + + + return JsonOK(mailReuslt == 1 ? 1000 : 0); + } + else + { + return JsonOK(0); + } + } [HttpPost] public JsonResult FindMeFinal(VMUser vm)