반응형
JSP 에서 네이버 이메일을 사용하여 이메일을 보내는 것을 만들어보자.
먼저 네이버 메일 환경 설정을 다음과 같이 해준다.
서버를 살펴보자
pop 은 받을 때의 주소이고, SMTP 서버는 보낼 때의 주소이다.
이메일을 보낼 form 을 하나 만들어 주자.
emailSendMain.jsp
<form method="post" action="">
<div class="container">
<div class="row">
<div class="col">
보내는 사람 : <input type="text" class="form-control" name="from" value="" />
</div>
</div>
<div class="row">
<div class="col">
받는 사람 : <input type="text" class="form-control" name="to" value="" />
</div>
</div>
<div class="row">
<div class="col">
제목 : <input type="text" class="form-control" name="subject" value="" />
</div>
</div>
<div class="row">
<div class="col">
형식 :
<input type="radio" name="format" value="text" checked />Text
<input type="radio" name="format" value="html" />HTML
</div>
</div>
<div class="row">
<div class="col">
내용 : <textarea class="form-control" rows="10" cols="60" name="content"></textarea>
</div>
</div>
<div class="row">
<div class="col">
<button class="btn" type="submit">전송하기</button>
</div>
</div>
</div>
</form>
jar 파일을 2개 받아주자.
https://mvnrepository.com/artifact/com.sun.mail/javax.mail/1.6.2
https://mvnrepository.com/artifact/javax.activation/activation/1.1.1
smtp 라는 패키지를 하나 만들고 NaverSMTP 클래스를 만들어 줄 것이다.
네이버 아이디, 비밀번호는 자신의 것을 사용한다.
NaverSMTP.java
package smtp;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.util.Map;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class NaverSMTP {
private final Properties serverInfo;
private final javax.mail.Authenticator auth;
public NaverSMTP() {
// 네이버 SMTP 서버 접속 정보
serverInfo = new Properties();
serverInfo.put("mail.smtp.host", "smtp.naver.com");
serverInfo.put("mail.smtp.port", "465");
serverInfo.put("mail.smtp.starttles.enable", "true");
serverInfo.put("mail.smtp.auth", "true");
serverInfo.put("mail.smtp.debug", "true");
serverInfo.put("mail.smtp.socketFactory.port", "465");
serverInfo.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
serverInfo.put("mail.smtp.socketFactory.fallback", "false");
//사용자 인증 정보
auth = new javax.mail.Authenticator() {
@Override
protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
return new javax.mail.PasswordAuthentication("네이버아이디", "네이버비밀번호");
}
};
}
public void emailSending(Map<String, String> mailInfo) throws MessagingException {
Session session = Session.getInstance(serverInfo, auth);
session.setDebug(true);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(mailInfo.get("from")));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(mailInfo.get("to")));
msg.setSubject(mailInfo.get("subject"));
msg.setContent(mailInfo.get("content"), mailInfo.get("format"));
Transport.send(msg);
}
}
메일을 보내기 위한 서블렛도 만들어 준다. (smtp 패키지 안)
SendProcessServ.java
package smtp;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class SendProcessServ
*/
@WebServlet("/SendProcessServ")
public class SendProcessServ extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public SendProcessServ() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// doGet(request, response);
response.setContentType("text/html; charset=UTF-8");
request.setCharacterEncoding("UTF-8");
ServletContext application = this.getServletContext();
// 폼에서 받은 값
Map<String, String> emailInfo = new HashMap<String, String>();
emailInfo.put("from", request.getParameter("from"));
emailInfo.put("to", request.getParameter("to"));
emailInfo.put("subject", request.getParameter("subject"));
System.out.println("from : " + request.getParameter("from"));
System.out.println("to : " + request.getParameter("to"));
System.out.println("subject : " + request.getParameter("subject"));
// 메일 포맷에따라 처리
String content = request.getParameter("content");
String format = request.getParameter("format");
System.out.println("content : " + content);
System.out.println("format : " + format);
if(format.equals("text")) {
// 텍스트 포맷일 경우 그대로
System.out.println("텍스트 포맷");
emailInfo.put("content", content);
System.out.println("텍스트 포맷11");
emailInfo.put("format", "text/plain;charset=UTF-8");
System.out.println("텍스트 포맷22");
} else if (format.equals("html")) {
System.out.println("html* 포맷");
content = content.replace("\r\n", "<br/>");
String htmlContent = "";
try {
// 메일용 템플릿 읽기
String templatePath = application.getRealPath("/test/MailForm.jsp");
BufferedReader br = new BufferedReader(new FileReader(templatePath));
//한줄씩 읽어서 htmlContent 변수에 저장
String oneLine;
while((oneLine = br.readLine()) != null){
htmlContent += oneLine = "\n";
}
br.close();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
// 템플릿의 __CONTENT__ 부분을 메일 내용으로 대체
htmlContent = htmlContent.replace("__CONTENT__", content);
//변환된 내용 저장
emailInfo.put("content", htmlContent);
emailInfo.put("format", "text/html;charset=UTF-8");
}
RequestDispatcher dispatcher = request.getRequestDispatcher("/test/mail_process.jsp");
try {
System.out.println("실행 전");
NaverSMTP smtpServer = new NaverSMTP();
smtpServer.emailSending(emailInfo);
System.out.println("이메일 전송 성공");
request.setAttribute("rs", "1");
dispatcher.forward(request, response);
} catch (Exception e) {
// TODO: handle exception
System.out.println("이메일 전송 실패");
e.printStackTrace();
request.setAttribute("rs", "0");
dispatcher.forward(request, response);
}
}
}
HTML 포맷일 경우 사용할 폼도 하나 만들어준다.
mailForm
<%@ 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>
<h2>메일 템플릿</h2>
<div class="container">
<div class="row">
<div class="col-6">내용</div>
<div class="col-6">__CONTENT__</div>
</div>
<div class="row">
<div class="col-6">이미지</div>
<div class="col-6"><img /></div>
</div>
</div>
</body>
</html>
완료 시 처리 될 페이지도 만들어 준다.
mail_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="/include/header.jsp"%>
<link href="/css/member/login.scss" rel="stylesheet" type="text/css">
<fmt:bundle basename="resource.language">
<%
// write_prop1 : '<fmt:message key="Write.prop1" />'
//<fmt:message key="Login" />
%>
<%
String rs = "0";
try{
rs = (request.getAttribute("rs").toString());
} catch(Exception e) {
rs = null;
}
System.out.println("process rs : " + rs);
%>
<% if( rs == "0") { %>
<script>
alert("메일 전송 실패");
var editErrorMsg = '';
editErrorMsg = '<fmt:message key="Signup.Fail"/>';
history.back();
</script>
<% } else if(rs == "1") { %>
<script>
alert("메일 전송 성공");
var editErrorMsg = '';
editErrorMsg = '<fmt:message key="Signup.Success"/>';
location.href="/index.jsp";
</script>
<% } else {}%>
</fmt:bundle>
<%@ include file="/include/footer.jsp"%>
메일 보내는 폼으로 이동하여 실행 하여 보자.
메일이 잘 가는 것을 볼 수 있다.
'JSP' 카테고리의 다른 글
[JSP] jsoup 를 이용한 크롤링 및 Oracle 데이터 베이스 저장 (0) | 2024.08.01 |
---|---|
[JSP] jsoup 를 이용한 크롤링 및 MYSQL 데이터 베이스 저장 (0) | 2024.08.01 |
[JSP] {"readyState":4,"responseText":"test","status":200,"statusText":"parsererror"} (0) | 2024.07.23 |
[JAVA] 접근 제한자 네 가지 (0) | 2024.06.24 |
[JAVA] JDK 설치 및 환경 변수 설정 (0) | 2024.05.24 |