JSP

JSP(SMTP를 활용한 이메일 전송하기)_2024-09-05

앵보몬 2024. 9. 10. 17:55
728x90
반응형

SMTP(Simple Mail Transfer Protocol) : 이매일을 보낼 때 사용하는 메일 서버의 기본 프로토콜

네이버 SMTP를 사용하려면 네이버 메일 환경설정에서 POP3/IMAP 설정 탭을 통해 "POP3/IMAP 사용함 버튼"을 활성화시켜야 한다.

SMTP는 메일을 보내는 역할만 하고, 메일을 받을 땐 다음과 같은 프로토콜을 이용한다.

① POP3(Post Office Protocol 3): 클라이언트가 메일 서버에서 메일을 받아오는 프로토콜 : 메일 서버에 저장된 메일을 사용자 컴퓨터로 가져와서 확인할 수 있게 해준다.

② IMAP(Internet Message Access Protocol): 사용자가 메일 서버에서 메일을 내려받는 프로토콜 : 중앙 서버에서 동기화가 이루어지므로, 같은 계정으로 연결된 모든 장치에서 같은 내용이 보인다.

 

EmailSendMain.html

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>  
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SMTP 이메일 전송</title>
</head>
<body>
<h2>이메일 전송하기</h2>
<form method="post" action="SendProcess.jsp">
<table border=1>
    <tr>    
        <td>
            보내는 사람 : <input type="text" name="from" value="" />
        </td>
    </tr>
    <tr>    
        <td>
            받는 사람 : <input type="text" name="to" value="" />
        </td>
    </tr>
    <tr>    
        <td>
            제목 : <input type="text" name="subject" size="50" value="" />
        </td>
    </tr>
    <tr>    
        <td>
            형식 :
            <input type="radio" name="format" value="text" checked />Text
            <input type="radio" name="format" value="html" />HTML
        </td>
    </tr>
    <tr>
        <td>
            <textarea name="content" cols="60" rows="10"></textarea>
        </td>
    </tr>
    <tr>
        <td>
            <button type="submit">전송하기</button>
        </td>
    </tr>
</table>
</form>
</body>
</html>

 

NaverSMTP.java

package smtp;

import java.util.Map;
import java.util.Properties;

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

// 네이버 SMTP 서버를 통해 이메일을 전송하는 클래스
public class NaverSMTP {
    private final Properties serverInfo; // 서버 정보
    private final 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.starttls.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");
       
            // 네이버 서버와 ssl 통신이 되지 않을 경우 추가
        serverInfo.put("mail.smtp.ssl.protocols", "TLSv1.2");

        // 사용자 인증 정보
        auth = new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("a9567269", "tladudqh6028");
            }
        };
    }

    // 주어진 메일 내용을 네이버 SMTP 서버를 통해 전송합니다.
        public void emailSending(Map<String, String> mailInfo)
                throws MessagingException {
            // 1. 세션 생성
            Session session = Session.getInstance(serverInfo, auth);
            session.setDebug(true);
           
            // 2. 메시지 작성
            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"));    // 내용
           
            // 3. 전송
            Transport.send(msg);
        }
    }

 

MailForm.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MustHave 메일 템플릿</title>
</head>
<body>
    <h2>MustHave 메일 템플릿</h2>
    <table border=1 width="100%">
        <tr>
            <td width="50">내용</td>
            <td>__CONTENT__</td>
        </tr>
        <tr>
            <td>이미지</td>
           
            <td><img src="https://newsimg.hankookilbo.com/2019/02/07/201902071649095744_5.jpg" alt="물개"/></td>
        </tr>
    </table>
</body>
</html>

 

 

728x90
반응형