form으로 한번에 보내면 절대루 안됨..
ajax로 보내는 것이 안정적..! => 페이지 이동 없이 데이터가 왔다갔다 해야하기 때문
⚡ 인증메일
메일 주소 입력후 인증하기 클릭
servlet으로 입력한 이메일 전송
servlet에서 해당 이메일로 난수 생성해서 메일 보내고, jsp로 난수 보냄 ( print.write() )
인증확인 클릭시
jsp에 도착( this.response )한 해당 난수와 input에 새로 적는 수가 같을경우 성공
<body> 이메일 : <input type="text" name="toemail" id="toemail"> <input type="button" value="인증하기" onclick="sendemail()"><br> 인증번호 : <input type="text" name="number" id="my_num"> <input type="button" value="확인" onclick="ck_number()"> </body> <script type="text/javascript"> var number = ""; function sendemail(){ var toemail = document.getElementById("toemail").value; var http,result; http = new XMLHttpRequest(); http.onreadystatechange = function(){ if(http.readyState==4 && http.status==200){ number = this.response; alert("메일로 인증번호를 전송 완료했습니다"); } } http.open("post","./send_email.do",true); http.setRequestHeader("content-type","application/x-www-form-urlencoded"); http.send("toemail="+toemail); } function ck_number(){ if(number == document.getElementById("my_num").value){ location.href="./email_auth.jsp"; alert("인증 성공"); }else{ alert("인증 실패") } } </script>
- send_email.do (servlet 파일)@WebServlet("/send_email.do") public class send_email extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //전송할 인증번호 String random = rnd_key(); String ename = "pensionlife"; String fromemail = ""; //보내는 사람 이메일 작성 String mailtext = "인증번호는 : " + random + "입니다."; String subject = "이메일 인증확인 서비스"; //메일서버(기본정보) String host = "smtp.mail.nate.com"; String login_user = ""; //실제 로그인 아이디 String login_pass = ""; //실제 로그인 비번 String to_mail = request.getParameter("toemail"); //메일서버 SMTP 셋팅 설정값 Properties pp = new Properties(); pp.put("mail.smtp.host", host); //메일서버 도메인 주소-이방법은 실제 잘 쓰진 않음 pp.put("mail.smtp.port", 587); //메일서버 전송 port번호 pp.put("mail.smtp.auth", "true"); //로그인에 대한 암호화 사용 pp.put("mail.smtp.debug", "true"); //메일 회신 주소가 잘못되어 반송되는 사항 pp.put("mail.smtp.socketFactory.port", 587); //메일 발송에 대한 소켓포트통신 //TLS : 전송 통신 보안 정책 pp.put("mail.smtp.ssl.protocals", "TLSv1.2"); Session ss = Session.getDefaultInstance(pp, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(login_user, login_pass); } }); try { MimeMessage msg = new MimeMessage(ss); //보내는 사람의 정보 (이메일,이름) msg.setFrom(new InternetAddress(fromemail,ename)); //받는 사람의 정보 msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to_mail)); msg.setSubject(subject); //메일 제목 msg.setText(mailtext); //메일 내용 Transport.send(msg); //메일 발송 //난수 ajax로 출력 PrintWriter pw = response.getWriter(); pw.write(random); pw.close(); }catch(Exception e) { System.out.println("메일발송 실패!!"); } } public String rnd_key() { //난수4자리 생성 String rnd =""; int w=1; while(w<=6) { int no = (int)Math.floor(Math.random()*10); rnd += no; w++; } return rnd; } }
'CLASS > 기타' 카테고리의 다른 글
CORS 연습방법 (0) | 2024.07.19 |
---|---|
외부 페이지 팝업 결과값 CORS 해결법 (0) | 2024.07.17 |
mail 보내기 (0) | 2024.07.05 |
👀⚡ (0) | 2024.06.27 |
게시판 editor api 설치 [ ckeditor4 ] (0) | 2024.06.17 |