[JSP] 메일 인증 기능 구현

728x90

join.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="/include/header.jsp" %>

<table width=600 border=0 align=center>
	<tr>
		<td align=center class="td_title">회원가입</td>
	</tr>
</table>
<script>

function email_ok(str){
	var num = parseInt(Math.random() * 100000);
	alert(num);
	
	$.ajax({
		url: "/mailSend", //전송받을 페이지 경로 //서블릿
		type: "post", //데이터 읽어오는 방식 //데이터 전송방식
		dataType: "text", //데이터 방식
		data: "num="+num+"&email="+str,
		success:function(text){ //성공일 경우
			//$("#id_result").html(text);
			alert("메일인증 확인하세요")
		},
		error:function(){ //실패일 경우
			alert("실패");
		}
	});
}
</script>
<form name="join" action="join2_insert" method="post">
<table width=600 border=1 align=center>
	
	<tr>
		<td>메일주소</td>
		<td>
			<input id = "email" name="email" value="">
			<input type="button" value="메일인증" onclick="email_ok(email.value)"><br>
			<input id="" name="" placeholder="인증번호를 입력하세요">
		</td>
	</tr>
	<tr>
		<td></td>
		<td><button>회원가입</button></td>
	</tr>
</table>
</form>



<%@ include file="/include/footer.jsp" %>

 

mail.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="mailSend" method="post">
<table>
	<tr>
		<td>받는 사람 메일</td>
		<td><input name="receiver"></td>
	</tr>
	<tr>
		<td>제목</td>
		<td><input name="subject"></td>
	</tr>
	<tr>
		<td>내용</td>
		<td><textarea name="content"></textarea></td>
	</tr>
	<tr>
		<td></td>
		<td><button>메일 보내기</button></td>
	</tr>
</table>
</form>
</body>
</html>

 

MailSend.java

package mail;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/mailSend")
public class MailSend extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
   
    public MailSend() {
        super();
       
    }

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			request.setCharacterEncoding("utf-8");

			String num = request.getParameter("num");
			String receiver = request.getParameter("email");
			//String subject = request.getParameter("subject");
			String subject ="테스트 입니다.";
			String content = "인증번호"+num;
			
			
			response.setContentType("text/html; charset=utf-8");
			PrintWriter out = response.getWriter();
			
			try {
				Properties p = System.getProperties(); //서버 정보를 p객체에 저장
				
				p.put("mail.smtp.starttls.enable","true");
				p.put("mail.smtp.host","smtp.gmail.com"); //gmail.com
				p.put("mail.smtp.auth", "true");
				p.put("mail.smtp.port", "587"); //gmail 포트번호
				
				Authenticator auth = new GoogleAuthentication(); //인증정보 생성
				Session s = Session.getInstance(p, auth); //메일 전송 역할하는 객체 생성
				Message m = new MimeMessage(s); //s객체를 사용하여 전송할 m객체 생성
				
				Address receiver_address = new InternetAddress(receiver); //받는 사람

				//메일 전송에 필요한 설정 부분
				m.setHeader("content-type", "text/html;charset=utf-8");
				m.addRecipient(Message.RecipientType.TO, receiver_address);
				m.setSubject(subject);
				m.setContent(content, "text/html;charset=utf-8");
				m.setSentDate(new Date());
				
				Transport.send(m); //메세지를 메일로 전송
				
				out.print("메일 전송");
				
			} catch (Exception e) {
				e.printStackTrace();
			}
	}
}

 

GoogleAuthentication.java

package mail;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

public class GoogleAuthentication extends Authenticator{
	PasswordAuthentication passAuth;

	public GoogleAuthentication() { //생성자
		passAuth = new PasswordAuthentication("아이디@gmail.com","16자리 비밀번호");
		//gmail 아이디(메일주소), 앱 비밀번호(2단계 인증) 발급받은 16자리
	}

	public PasswordAuthentication getPasswordAuthentication() {
		return passAuth;
	}
}

 

※ 사용자계정이 한글로 되어있다면 실행되지 않습니다. 기존에 사용하던 계정명 변경만으로는 안되니 만약 한글로 되어있다면 사용자계정을 추가해서 영어로 생성하거나, 포맷을 해서 영어로 다시 생성해야합니다.