요약
- SMTP 는 이메일 전송을 위한 표준 통신 프로토콜이다.
- Java에서 SMTP를 사용한 메일 전송을 쉽게할 수 있는 Jakarta Mail(Java Mail) API 를 제공한다.
- Spring 은 Jakarta Mail 을 기반으로 하는 SpringFramework Email Library 를 제공한다.
SMTP (Simple Mail Transfer Protocol)
- 일반적으로 전자 메일 전송을 위한 표준 통신 프로토콜
- 특징
- 텍스트 기반 프로토콜
- Base 프로토콜로 TCP (SSL/TLS)를 사용한다.
- STMP 서버와 클라이언트로 구성되어 있다.
- SMTP 클라이언트
- 이메일을 발송하는 쪽의 역할을 합니다. 아래의 기능을 수행합니다.
- 발신자 역할
- 사용자가 작성한 이메일을 사용하여 이메일 메시지의 헤더와 본문(내용)을 구성하고, SMTP 명령어를 통해 SMTP 서버에 전달합니다.
- 연결 설정
- SMTP 서버와 TCP를 사용해 25번 또는 587번 포트를 통해 연결을 설정합니다.
- SMTP 서버
- SMTP 서버는 클라이언트에서 보낸 이메일을 수신하고, 목적지로 전달하거나 수신자에게 직접 전송하는 역할을 합니다. 아래의 기능을 수행합니다.
- 클라이언트와 연결 수신: 클라이언트에서 이메일 전송 요청이 오면 이를 수신합니다.
- 인증 및 승인: 클라이언트의 신원을 확인하고, 인증 정보를 기반으로 메일 전송을 허가합니다.
- 메일 큐 관리: 메일이 바로 전송되지 않을 경우, 메일을 큐에 저장해 나중에 처리합니다.
- 목적지 전달: 수신자의 이메일 서버(수신자 도메인)에 메일을 전달합니다.
SMTP 작동 원리

- 연결 설정 단계
- SMTP 클라이언트가 TCP 를 이용해 SMTP 서버와 세션을 설정합니다.
- 3-way Handshake 방법을 사용해 연결을 설정합니다.
- 메일 발송 프로세스
- SMTP 서버에 메일의 데이터를 보내는 단계입니다.
- MAIL FROM : 발신자 이메일 주소를 서버에 보냅니다.
ex. MAIL FROM:[email protected]
- RCPT TO : 수신자 이메일 주소를 서버에 보냅니다.
ex. RCPT TO:[email protected]
- DATA : 이메일 본문과 헤더를 서버에 보냅니다.
서버는 데이터 전송 시작 신호(354 Start mail input)를 받고, 클라이언트는 메시지의 본문을 보낸 후 .(점) 하나로 전송 종료를 알립니다.
- 메일 전달 및 중계
- SMTP 서버는 메시지를 수신자의 메일 서버(또는 최종 서버)로 전달합니다.
- 연결 종료
- 클라이언트가 QUIT 명령을 보내 연결을 종료합니다.
- 서버는 "221 Service closing transmission channel" 응답으로 연결을 종료합니다.
Java 에서의 SMTP
- Java 에서는 SMTP를 사용하여 이메일을 전송할 때 주로 Jakarta Mail(JavaMail API 에서 이름이 변경됨)를 사용합니다.
- SMTP 프로토콜을 활용해 이메일 전송을 쉽게 구현할 수 있도록 도와줍니다.
<aside>
👉
공식 문서 : https://jakarta.ee/specifications/mail/2.0/jakarta-mail-spec-2.0
</aside>
Jakarta Mail 구조
- Jakarta Mail 은 메시지 시스템을 위한 인터페이스를 구축하는데 사용되는 요소들을 제공합니다.
- Jakarta Mail 은 RFC822와 MIME Internet messaging standards 를 구현한 몇개의 클래스들을 포함하고 있습니다.
- RFC822 : 이메일 메시지의 형식과 헤더 구조에 대한 표준 규격
- 각 필드가 ASCII 문자로 작성되어야 하는 특징이 있다.
→ 이미지, 비디오 다국어 문자 등을 포함할 수 없는 제한점이 있다.
- MIME Internet messaging standards
- 텍스트 외의 데이터를 이메일에 포함하고, 다양한 콘텐츠 타입을 전송할 수 있도록 합니다.
- RFC 822의 단점을 보완하며, 멀티미디어 콘텐츠와 첨부파일을 처리할 수 있는 현대 이메일 시스템의 기반을 제공합니다.
Jakarta Mail 계층 구조