본문 바로가기
CLASS/기타

인증메일 보내기

by hingu 2024. 7. 5.

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
project 배포  (0) 2024.07.04
👀⚡  (0) 2024.06.27