package itn.let.utl.user.service; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.apache.commons.validator.routines.EmailValidator; import org.springframework.stereotype.Service; import egovframework.rte.psl.dataaccess.util.EgovMap; import itn.let.cop.bbs.service.BoardMasterVO; import itn.let.cop.bbs.service.EgovBBSAttributeManageService; import itn.let.mjo.msg.service.MjonMsgService; import itn.let.mjo.msg.service.MjonMsgVO; import itn.let.mjo.msgdata.service.MjonMsgDataService; import itn.let.mjo.msgdata.service.MjonMsgReturnVO; import itn.let.sym.site.service.EgovSiteManagerService; import itn.let.sym.site.service.TermsVO; import itn.let.uat.uia.web.EmailVO; import itn.let.uat.uia.web.SendLogVO; import itn.let.uat.uia.web.SendMail; import itn.let.uss.umt.service.EgovMberManageService; import itn.let.uss.umt.service.EgovUserManageService; import itn.let.uss.umt.service.UserDefaultVO; /** * * 알림 전송 기능에 대한 Util 클래스 * @author 사업기술본부 원영현(ITN) * @since 2022.07.12 * @version 1.0 * @see * *
* << 개정이력(Modification Information) >>
*
*   수정일      수정자           수정내용
*  -------    --------    ---------------------------
*   2022.07.12  원영현          최초 생성 *   
*
* 
*/ @Service("mjonNoticeSendUtil") public class MjonNoticeSendUtil { /** userManageService */ @Resource(name = "userManageService") private EgovUserManageService userManageService; @Resource(name = "MjonMsgDataService") private MjonMsgDataService mjonMsgDataService; @Resource(name = "EgovBBSAttributeManageService") private EgovBBSAttributeManageService bbsAttrbService; @Resource(name = "mjonMsgService") private MjonMsgService mjonMsgService; /** mberManageService */ @Resource(name = "mberManageService") private EgovMberManageService mberManageService; @Resource(name = "egovSiteManagerService") EgovSiteManagerService egovSiteManagerService; /** * @Method Name : mjonInquiryNoticeSend * @작성일 : 2022. 7. 12. * @작성자 : WYH * @Method 설명 : 문의사항 알림전송( bbsId : 게시판 ID, nttSj : 문의 글 제목, nttCn : 문의 글 내용 ) */ public void mjonInquiryNoticeSend(String bbsId, String nttSj, String nttCn) throws Exception{ EmailVO mailSender = new EmailVO(); // 이메일 발송 내용 String contents = ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += "대량문자 발송 사이트 문자온 안내 메일 입니다."; contents += ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += "
"; contents += "
"; contents += "
"; contents += "

"; contents += "문자온 안내 메일입니다.

\"\""; contents += "
"; contents += "
"; contents += "

"; contents += "안녕하세요. 대량문자 발송 사이트 문자온입니다.

"; contents += "

%emailContents%

"; contents += "
"; contents += "

본 메일은 발신전용이며, 문의에 대한 회신은 처리되지 않습니다. 문자온 관련하여 궁금하신 점이나 불편한 사항은 고객센터를 통해 문의하여 주시기 바랍니다.

"; contents += "

주소 : (12248) 경기도 남양주시 다산순환로 20, A동 735호(다산동, 현대프리미어캠퍼스)
사업자 번호 : 653-87-00858 | 대표 : 유인식 | 통신판매등록번호 : 제 2021-다산-0422
문의전화 : 010-8432-9333 | E-mail : help@iten.co.kr

"; contents += "

Copyright 2020 ⓒ MUNJAON co. Ltd, All rights reserved.

"; contents += "
"; contents += "
"; contents += "
"; contents += "
"; contents += ""; contents += ""; contents += ""; String repContents = contents; mailSender.setContents(nttCn); String emailCont = mailSender.getContents().replace("\r\n", "
");//줄바꿈 변환해주기 repContents = repContents.replace("%emailContents%", emailCont); /*SimpleDateFormat format = new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분"); Date nowdate = new Date(); String date = format.format(nowdate); repContents = repContents.replace("%date%", date);*/ // 이메일로 보내기 SendMail sMail = new SendMail(); // 사용자 이메일 주소 mailSender.setSend_from("noreply@munjaon.co.kr"); String emailTitle = ""; //묻고답하기의 게시판들 가져오기 BoardMasterVO tempBoardMasterVO = new BoardMasterVO(); tempBoardMasterVO.setUrl("/web/cop/bbs/QnaList.do"); List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(tempBoardMasterVO); for(int i=0; i < boardMenuList.size(); i++) { if(boardMenuList.get(i).getBbsId().equals(bbsId)) { emailTitle = "[문자온] 1:1 문의 - ("+boardMenuList.get(i).getBbsNm()+") "+nttSj; break; } } // 메일 제목 mailSender.setTitle(emailTitle); // 메일 내용 mailSender.setContents(repContents); // cs 담당자 메일전송 여부 목록 조회 UserDefaultVO userSearchVO = new UserDefaultVO(); userSearchVO.setAuthorCode("ROLE_CS"); userSearchVO.setRecordCountPerPage(100000); userSearchVO.setFirstIndex(0); List resultList = userManageService.selectUserList(userSearchVO) ; for(int i=0; i < resultList.size(); i++) { if("Y".equals(((EgovMap)resultList.get(i)).get("emailSendYN"))) { String sandEmailAdres = ""; sandEmailAdres = (String)((EgovMap)resultList.get(i)).get("emailAdres"); // 발송자 이메일 주소 mailSender.setSend_to(sandEmailAdres); // 메일 발송하기 sMail.sendMail2(mailSender); //발송 이력 저장 로그 sendLogInsert("", "2" ,mailSender.getSend_from() ,mailSender.getSend_to(), repContents); } } } /** * @Method Name : csAdminEmailNoticeSend * @작성일 : 2022. 7. 12. * @작성자 : WYH * @수정일 : 2022. 7. 14. * @작성자 : JSP * @Method 설명 : CS관리자 이메일 알림전송( mberNm : 기업명, mberId : 가입아이디 , title : 이메일 제목) */ public void csAdminEmailNoticeSend(String mberNm, String mberId, String title) throws Exception{ try { EmailVO mailSender = new EmailVO(); // 이메일 발송 내용 [ 시작 ] String contents = ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += "대량문자 발송 사이트 문자온 안내 메일 입니다."; contents += ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += ""; contents += "
"; contents += "
"; contents += "
"; contents += "

"; contents += "문자온 안내 메일입니다.

\"\""; contents += "
"; contents += "
"; contents += "

"; contents += "안녕하세요. 대량문자 발송 사이트 문자온입니다.

"; contents += "

%emailContents%

"; contents += "
"; contents += "

본 메일은 발신전용이며, 문의에 대한 회신은 처리되지 않습니다. 문자온 관련하여 궁금하신 점이나 불편한 사항은 고객센터를 통해 문의하여 주시기 바랍니다.

"; contents += "

주소 : (12248) 경기도 남양주시 다산순환로 20, A동 735호(다산동, 현대프리미어캠퍼스)
사업자 번호 : 653-87-00858 | 대표 : 유인식 | 통신판매등록번호 : 제 2021-다산-0422
문의전화 : 010-8432-9333 | E-mail : help@iten.co.kr

"; contents += "

Copyright 2020 ⓒ MUNJAON co. Ltd, All rights reserved.

"; contents += "
"; contents += "
"; contents += "
"; contents += "
"; contents += ""; contents += ""; contents += ""; String repContents = contents; mailSender.setContents("기업명 : "+mberNm + "\r\n 가입 아이디 : " + mberId); String emailCont = mailSender.getContents().replace("\r\n", "
");//줄바꿈 변환해주기 repContents = repContents.replace("%emailContents%", emailCont); // 이메일로 보내기 SendMail sMail = new SendMail(); // 사용자 이메일 주소 mailSender.setSend_from("noreply@munjaon.co.kr"); // 메일 제목 String emailTitle = "[문자온] " + title + " - ("+mberNm+") "; mailSender.setTitle(emailTitle); // 메일 내용 mailSender.setContents(repContents); // cs 담당자 메일전송 여부 목록 조회 UserDefaultVO userSearchVO = new UserDefaultVO(); userSearchVO.setAuthorCode("ROLE_CS"); userSearchVO.setRecordCountPerPage(100000); userSearchVO.setFirstIndex(0); List resultList = userManageService.selectUserList(userSearchVO) ; for(int i=0; i < resultList.size(); i++) { if("Y".equals(((EgovMap)resultList.get(i)).get("emailSendYN"))) { String sandEmailAdres = ""; sandEmailAdres = (String)((EgovMap)resultList.get(i)).get("emailAdres"); if (StringUtils.isNotEmpty(sandEmailAdres)) { // 발송자 이메일 주소 mailSender.setSend_to(sandEmailAdres); // 메일 발송하기 sMail.sendMail2(mailSender); //발송 이력 저장 로그 sendLogInsert(mberId, "2" ,mailSender.getSend_from() ,mailSender.getSend_to(), repContents); } } } } catch (Exception e) { } } /** * @Method Name : csAdminSmsNoticeSend * @작성일 : 2022. 7. 12. * @작성자 : WYH * @수정일 : 2022. 7. 14. * @작성자 : JSP * @Method 설명 : CS관리자 SMS 알림전송( mberNm : 기업명, mberId : 가입아이디 , title : 문자 제목) */ public void csAdminSmsNoticeSend(String subTitle, String title) throws Exception{ String smsTxt = "[문자온] %title% - %subTitle%"; smsTxt = smsTxt.replace("%title%", title); smsTxt = smsTxt.replace("%subTitle%", subTitle); try { Date nowDate = new Date(); SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); MjonMsgVO mjonMsgVO = new MjonMsgVO(); mjonMsgVO.setMsgDiv("S"); // 단문 // 문자타입별 대표전송사 정보 MjonMsgVO mjonMsgVO2 = new MjonMsgVO(); mjonMsgVO2 = mjonMsgService.selectRepMsgAgetnInfo(mjonMsgVO); // 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술 mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택 // 전송금액 mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString()); //총금액 mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString()); //한건 금액 mjonMsgVO.setMsgType("4"); // 단문 전송 //문자종류 관리자가 발송하는 것은 msgKind : S 로 셋팅 mjonMsgVO.setMsgKind("S"); mjonMsgVO.setSmsTxt(smsTxt); // 문자 내용 mjonMsgVO.setReserveYn("N"); // 즉시 전송 mjonMsgVO.setCallFrom("01084329333"); // 시스템 문자발송 번호 mjonMsgVO.setUserId("system"); mjonMsgVO.setMsgPayCode("SMS"); mjonMsgVO.setMsgGroupCnt("0"); mjonMsgVO.setReqDate(simpleDateFormat2.format(nowDate)); // cs 담당자 메일전송 여부 목록 조회 UserDefaultVO userSearchVO = new UserDefaultVO(); userSearchVO.setAuthorCode("ROLE_CS"); userSearchVO.setRecordCountPerPage(100000); userSearchVO.setFirstIndex(0); List resultList = userManageService.selectUserList(userSearchVO) ; for(int i=0; i < resultList.size(); i++) { if("Y".equals(((EgovMap)resultList.get(i)).get("mbtlSendYN"))) { String moblphonNo = ""; moblphonNo = (String)((EgovMap)resultList.get(i)).get("moblphonNo"); if (StringUtils.isNotEmpty(moblphonNo)) { // 받는사람 mjonMsgVO.setCallTo(moblphonNo); MjonMsgReturnVO returnVO = mjonMsgDataService.insertSysMsgDataInfo(mjonMsgVO); returnVO.getSendMsgCnt(); returnVO.getSendMsgBlockCnt(); // 시스템 발송 로그 sendLogInsert(returnVO.getMsgGroupId(), "1" ,mjonMsgVO.getCallFrom() ,mjonMsgVO.getCallTo(), smsTxt); } } } } catch (Exception e) { } } /** * @Method Name : smishingSmsNoticeSend * @작성일 : 2022. 11. 24. * @작성자 : JSP * @수정일 : 2022. 11. 24. * @작성자 : JSP * @Method 설명 : 스미싱의심 SMS 알림전송(userId : 아이디, userNm : 이름) */ public void smishingSmsNoticeSend(String title, String userId, String userNm) throws Exception{ String smsTxt = "[문자온] %title%/%userId%/%userNm%"; smsTxt = smsTxt.replace("%title%", title); smsTxt = smsTxt.replace("%userId%", userId); smsTxt = smsTxt.replace("%userNm%", userNm); try { Date nowDate = new Date(); SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); MjonMsgVO mjonMsgVO = new MjonMsgVO(); mjonMsgVO.setMsgDiv("S"); // 단문 // 문자타입별 대표전송사 정보 MjonMsgVO mjonMsgVO2 = new MjonMsgVO(); mjonMsgVO2 = mjonMsgService.selectRepMsgAgetnInfo(mjonMsgVO); // 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술 mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택 // 전송금액 mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString()); //총금액 mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString()); //한건 금액 mjonMsgVO.setMsgType("4"); // 단문 전송 //문자종류 관리자가 발송하는 것은 msgKind : S 로 셋팅 mjonMsgVO.setMsgKind("S"); mjonMsgVO.setUserId("system"); // 문자전송 ID mjonMsgVO.setSmsTxt(smsTxt); // 문자 내용 mjonMsgVO.setReserveYn("N"); // 즉시 전송 mjonMsgVO.setCallFrom("01084329333"); // 시스템 문자발송 번호 mjonMsgVO.setUserId("system"); mjonMsgVO.setMsgPayCode("SMS"); mjonMsgVO.setMsgGroupCnt("0"); mjonMsgVO.setReqDate(simpleDateFormat2.format(nowDate)); // 받는사람 mjonMsgVO.setCallTo("01084329333"); MjonMsgReturnVO returnVO = mjonMsgDataService.insertSysMsgDataInfo(mjonMsgVO); returnVO.getSendMsgCnt(); returnVO.getSendMsgBlockCnt(); // 시스템 발송 로그 sendLogInsert(returnVO.getMsgGroupId(), "1" ,mjonMsgVO.getCallFrom() ,mjonMsgVO.getCallTo(), smsTxt); } catch (Exception e) { } } /** * @Method Name : userAllTermsEmailSend * @작성일 : 2023. 3. 30. * @작성자 : JSP * @수정일 : 2023. 4. 07. * @작성자 : JSP * @Method 설명 : 전체회원 이메일발송 * String emailTitle : 이메일 제목 * String emailContents : 이메일 내용 */ public void userAllTermsEmailSend() throws Exception{ // 이메일로 보내기 SendMail sendMail = new SendMail(); EmailVO mailSender = new EmailVO(); mailSender.setSend_from("noreply@munjaon.co.kr"); // 사용자 이메일 주소 // Step1. 이용약관 메일발송 대상여부 체크 TermsVO termsVO = new TermsVO(); termsVO = egovSiteManagerService.selectTermsMastEffectUseInfo(termsVO); if (null != termsVO) { // 이메일정보 String emailTitle = ""; // 메일 제목 String emailContents = ""; // 메일 내용 String terms = "개인정보처리방침"; if("02".equals(termsVO.getTermsDivCode())) { terms = "이용약관"; } emailTitle = "[문자온] 서비스 " + terms + " 개정 안내"; emailContents = termsVO.getEmailInfoCn(); mailSender.setTitle(emailTitle); mailSender.setContents(emailContents); // Step2. 발송대상자 List termsVO.setRecordCountPerPage(200); List resultList = new ArrayList(); resultList = egovSiteManagerService.selectTermsEmailTargetList(termsVO); for(TermsVO item : resultList) { String mberEmailAdres = item.getMberEmailAdres(); String mberId = item.getMberId(); try { if (StringUtils.isNotEmpty(mberEmailAdres)) { // 이메일 주소 유효성검사 if (emailValidator(mberEmailAdres)) { // 수신 이메일 주소 mailSender.setSend_to(mberEmailAdres); // 메일 발송하기 sendMail.sendMail2(mailSender); //발송 이력 저장 로그 sendLogInsert(mberId, "2", mailSender.getSend_from(), mailSender.getSend_to(), emailContents); } else { System.out.println("EmailAddress is invalid : " + mberEmailAdres); } } // 발송대상 삭제처리 TermsVO termsVO2 = new TermsVO(); termsVO2.setTermsMastNo(termsVO.getTermsMastNo()); termsVO2.setMberId(mberId); egovSiteManagerService.deleteTermsEmailTagetByMemberId(termsVO2); } catch (Exception e) { // 발송대상 삭제처리 TermsVO termsVO2 = new TermsVO(); termsVO2.setTermsMastNo(termsVO.getTermsMastNo()); termsVO2.setMberId(mberId); egovSiteManagerService.deleteTermsEmailTagetByMemberId(termsVO2); System.out.println("userAllTermsEmailSend Err MberId : " + mberId); System.out.println("userAllTermsEmailSend Err : " + e.getMessage()); } } // Step 3. 발송대상자가 남아있는지 체크 termsVO.setRecordCountPerPage(1); List resultList2 = new ArrayList(); resultList2 = egovSiteManagerService.selectTermsEmailTargetList(termsVO); // Step 4. 이용약관 마스터테이블 발송완료로 업데이트 if (resultList2.size() == 0) { egovSiteManagerService.updateTermsMastEmailYn(termsVO); } } else { System.out.println("이용약관/개인정보 메일발송 대상 없음."); } } /** * @Method Name : userTermsTestEmailSend * @작성일 : 2023. 3. 30. * @작성자 : JSP * @수정일 : 2023. 4. 07. * @작성자 : JSP * @Method 설명 : 테스트 이메일발송 * String emailTitle : 이메일 제목 * String emailContents : 이메일 내용 * String toEmailAdres : 개별발송 이메일주소 */ public void userTermsTestEmailSend(String emailTitle, String emailContents, String toEmailAdres) throws Exception{ try { // 이메일로 보내기 SendMail sendMail = new SendMail(); EmailVO mailSender = new EmailVO(); mailSender.setSend_from("noreply@munjaon.co.kr"); // 사용자 이메일 주소 mailSender.setTitle(emailTitle); // 메일 제목 mailSender.setContents(emailContents); // 메일 내용 // toEmailAdres 개별발송 if (StringUtils.isNotEmpty(toEmailAdres)) { // 수신 이메일 주소 mailSender.setSend_to(toEmailAdres); // 메일 발송하기 sendMail.sendMail2(mailSender); //발송 이력 저장 로그 sendLogInsert("", "2" ,mailSender.getSend_from() ,mailSender.getSend_to(), emailContents); } } catch (Exception e) { System.out.println("userTermsTestEmailSend Err : " + e.getMessage()); } } // 이메일 주소 유효성검사 public static boolean emailValidator(String email) { // `EmailValidator` 인스턴스 가져오기 EmailValidator validator = EmailValidator.getInstance(); // 이메일 주소를 포함하는 지정된 문자열의 유효성 검사 if (!validator.isValid(email)) { return false; } return true; } /** * @Method Name : sendLogInsert * @작성일 : 2022. 7. 12. * @작성자 : WYH * @Method 설명 : 발송 이력 저장 로그 * sendId : 전송ID * type : 발송 이력 저장 SendType 1:문자로 발송 2:이메일로 발송 * sendFrom : 발신자 정보 * sendTo : 수신자 정보 * repContents : 발송 내용 */ private void sendLogInsert(String sendId , String type , String sendFrom , String sendTo, String repContents) throws Exception { // 발송 이력 저장 SendType 1:문자로 발송 2:이메일로 발송 SendLogVO sendLogVO = new SendLogVO(); sendLogVO.setSendId(sendId); sendLogVO.setSendType(type); sendLogVO.setFrstSendInfo(sendFrom);//이메일 발신자 정보 sendLogVO.setReceive(sendTo); //수신자 정보 sendLogVO.setContents(repContents); mjonMsgDataService.insertSysMsgLog(sendLogVO); } }