javaboiii의 Web

Web - 구글 이메일 API

javaboiii 2024. 9. 5. 20:10

WEB

이메일을 전송하려면 이메일 서버가 필요함

본인은 구글 이메일 서버를 사용함

 

구글 서버를 사용하려면 몇가지 단계가 있음

 

1. 구글 접속 후 계정 관리에 들어감

2. 2단계 인증 클릭

클릭 후 들어가서

앱 비밀 번호 클릭

사용하고 싶은 앱 이름을 작성하고 만들기를 클릭하면

16자리 비밀번호가 나옴

 

이메일 api 사용시 필요하기 때문에 복사

 

3. 라이브러리 추가 하기

사용되는 라이브러리는 `javax.mail`과 `activation-jaf`

 

javax.mail.jar : JavaMail API를 제공하여 이메일을 전송할 수 있게 해줌
activation-jaf1.1.1.jar : 이메일에 첨부파일을 추가하거나 다양한 데이터 타입을 처리할 수 있게 함

4. GoogleAuthentication 객체 생성

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

// GoogleAuthentication 클래스를 정의합니다. 이 클래스는 메일 서버 인증을 처리합니다.
public class GoogleAuthentication extends Authenticator {
	// PasswordAuthentication 객체를 선언합니다.
	PasswordAuthentication passAuth;

	// 생성자 메서드입니다. GoogleAuthentication 객체가 생성될 때 호출됩니다.
	public GoogleAuthentication() {
		// 사용자 이메일 주소와 애플리케이션 비밀번호를 사용하여 PasswordAuthentication 객체를 초기화합니다.
		// 이메일 주소와 비밀번호는 실제 값을 사용하는 것이 아니라 예시로 제공된 것입니다.
		passAuth = new PasswordAuthentication("앱 비밀번호 발급 시 사용한 구글계정", "앱 비밀번호");
	}

	// 메일 서버와의 인증을 위한 PasswordAuthentication 객체를 반환하는 메서드입니다.
	public PasswordAuthentication getPasswordAuthentication() {
		// 생성자에서 설정한 이메일 주소와 비밀번호를 반환합니다.
		return passAuth;
	}
}

5. 메일 전송 서블릿 작성

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
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;

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

    public MailSend() {
        super();
        // TODO Auto-generated constructor stub
    }

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

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try {
            // 클라이언트로부터 전송된 요청의 인코딩을 설정합니다.
            request.setCharacterEncoding("utf-8");
        } catch (UnsupportedEncodingException e) {
            // 인코딩 설정 중 오류 발생 시 예외를 출력합니다.
            e.printStackTrace();
        }
        
        // 요청 파라미터에서 인증번호와 수신자 이메일을 가져옵니다.
        String num = request.getParameter("num");
        String receiver = request.getParameter("이메일");
        System.out.println("receiver : "+receiver);
        //String subject = request.getParameter("subject");
        // 이메일 제목을 설정합니다.
        String subject ="제목입니다.";
        // 이메일 내용에 인증번호를 포함합니다.
        String content = "인증번호" + num;
        
        // 응답의 콘텐츠 타입을 설정하여 HTML 형식으로 설정합니다.
        response.setContentType("text/html; charset=utf-8");
        
        try {
            // 이메일 서버의 속성을 설정합니다.
            Properties p = System.getProperties(); // 서버 정보를 저장할 Properties 객체
            
            // SMTP 서버의 속성을 설정합니다.
            p.put("mail.smtp.starttls.enable", "true"); // STARTTLS를 사용하여 암호화된 연결을 설정합니다.
            p.put("mail.smtp.host", "smtp.gmail.com"); // SMTP 서버 호스트 (Gmail)
            p.put("mail.smtp.auth", "true"); // 인증을 사용합니다.
            p.put("mail.smtp.port", "587"); // SMTP 포트 번호 (587은 TLS 포트)
            
            // 인증 정보를 생성합니다.
            Authenticator auth = new GoogleAuthentication(); // GoogleAuthentication 클래스에서 인증 정보 생성
            
            // 메일 세션을 생성합니다.
            Session s = Session.getInstance(p, auth); // 서버 속성과 인증 정보를 사용하여 Session 객체 생성
            
            // 메일 메시지를 생성합니다.
            Message m = new MimeMessage(s); // 생성된 Session을 사용하여 MimeMessage 객체 생성
            
            // 수신자의 이메일 주소를 설정합니다.
            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);
            
            // 메일 전송 성공 시에 대한 메시지를 응답에 작성할 수 있습니다
            
        } catch (Exception e) {
            // 메일 전송 중 오류가 발생하면 예외를 출력합니다.
            e.printStackTrace();
        }
	}
}

6. 결과 확인

야~ 호~

'javaboiii의 Web' 카테고리의 다른 글

포트원 결제 API - 2  (0) 2024.09.28
포트원 결제 API - 1  (0) 2024.09.06
Web - 필터(Filter)  (0) 2024.09.05
Web - 안내창으로 사용자 경험 높이기  (0) 2024.09.04
Web - M V C 작업 시 유의사항  (0) 2024.09.03