SMTP(Simple Mail Transfer Protocol)는 이메일을 발송 서버에 제출하고 메일 서버 사이에서 전달하는 프로토콜입니다. 메일함에 도착한 메시지를 조회하는 IMAP·POP3와 역할이 다르며, 발송 애플리케이션·중계 서버·수신 서버를 나누어 살펴보면 전송 과정을 이해하기 쉽습니다.
전송 구간을 암호화하는 TLS, 발송 서버에 사용자를 인증하는 SMTP AUTH, 발신 도메인을 검증하는 SPF·DKIM·DMARC는 각각 다른 역할을 맡습니다.
기본 동작과 메시지 구조
-
SMTP란? — AWS · 한국어
SMTP 서버의 역할과 이메일 전송 흐름, SMTP와 IMAP·POP3의 차이를 소개합니다.
-
RFC 5321: Simple Mail Transfer Protocol — IETF
EHLO·MAIL FROM·RCPT TO·DATA 명령, 응답 코드, 중계·MX 조회·재시도 등 SMTP의 기본 동작을 정의합니다.
-
RFC 5322: Internet Message Format — IETF
From·To·Subject·Date 같은 헤더와 본문의 형식을 정의하며, 전송 절차를 다루는 SMTP 명세와 구분해 읽을 수 있습니다.
-
실제 전송에 사용하는 MAIL FROM·RCPT TO의 봉투 주소와 수신자에게 보이는 메시지 헤더의 차이를 설명합니다.
-
RFC 9051: Internet Message Access Protocol (IMAP) - Version 4rev2 — IETF
서버의 메일함과 메시지를 조회·관리하는 IMAP을 통해 SMTP 전송과 메일함 접근의 역할을 비교할 수 있습니다.
메일 제출·중계와 포트·TLS
-
RFC 6409: Message Submission for Mail — IETF
클라이언트의 메일 제출과 서버 간 중계를 구분하고, 제출용 587번 포트와 중계용 25번 포트의 역할을 설명합니다.
-
RFC 8314: Cleartext Considered Obsolete — IETF
메일 제출·메일함 접근에 TLS를 사용하는 기준과 465번 포트의 암시적 TLS, STARTTLS와의 관계를 설명합니다.
-
RFC 3207: SMTP Service Extension for Secure SMTP over Transport Layer Security — IETF
SMTP 연결에서 STARTTLS를 협상해 TLS로 전환하는 절차와 적용 범위를 정의합니다.
-
RFC 4954: SMTP Service Extension for Authentication — IETF
AUTH 명령과 SASL을 이용한 클라이언트 인증, 지원 방식의 공지와 인증 관련 응답을 정의합니다.
DNS와 발신 도메인 인증
-
DNS MX 레코드란? — Cloudflare · 한국어
도메인의 이메일을 받을 메일 서버와 우선순위를 MX 레코드로 지정하는 방식을 설명합니다.
-
RFC 7208: Sender Policy Framework (SPF) — IETF
DNS에 게시한 정책으로 SMTP 발신 호스트가 MAIL FROM·HELO 도메인을 사용할 권한이 있는지 검사하는 방식을 정의합니다.
-
RFC 6376: DomainKeys Identified Mail (DKIM) Signatures — IETF
메시지에 도메인 서명을 붙이고 DNS의 공개 키로 서명된 헤더·본문을 검증하는 구조를 정의합니다.
-
RFC 9989: Domain-Based Message Authentication, Reporting, and Conformance (DMARC) — IETF
From 도메인과 SPF·DKIM 인증 식별자의 정렬 및 수신 처리 정책을 정의하며, 기존 RFC 7489·9091을 대체합니다.
서버 간 TLS 정책과 보고
-
RFC 8461: SMTP MTA Strict Transport Security (MTA-STS) — IETF
수신 도메인이 TLS 지원과 인증서 검증 정책을 게시하고 발송 서버가 이를 적용하는 방식을 정의합니다.
-
RFC 8460: SMTP TLS Reporting — IETF
서버 간 TLS 연결·정책 적용의 성공과 실패를 집계해 도메인 운영자에게 보고하는 TLS-RPT 형식을 정의합니다.
Node.js·Python·Java에서 메일 보내기
-
Node.js에서 SMTP 호스트·포트·인증·TLS·연결 풀과 타임아웃을 설정하고 메일을 보내는 방법을 설명합니다.
-
smtplib — SMTP 프로토콜 클라이언트 — Python · 한국어
SMTP·SMTP_SSL·starttls()·login()·send_message()를 이용한 연결·인증·전송과 예외 처리를 설명합니다.
-
JavaMailSender와 spring-boot-starter-mail의 자동 구성 및 연결·읽기·쓰기 타임아웃 설정을 설명합니다.
메일 서버 운영과 전달 조건
-
Postfix Basic Configuration — Postfix
수신할 도메인과 중계를 허용할 클라이언트·목적지, 직접 전달·상위 릴레이 등 메일 서버의 기본 설정을 설명합니다.
-
Amazon SES SMTP 엔드포인트에 연결 — AWS · 한국어
SES의 STARTTLS·암시적 TLS 연결과 지원 포트, EC2의 기본 25번 포트 제한을 설명합니다.
-
이메일 발신자 가이드라인 — Gmail · 한국어
개인 Gmail 계정에 메일을 보내는 발신자의 인증·정방향 및 역방향 DNS·TLS·스팸 비율·수신 거부 요건을 설명합니다.
전송 오류와 개발용 테스트
-
RFC 3463: Enhanced Mail System Status Codes — IETF
주소·메일함·네트워크·보안 오류 등을 구분하는 확장 상태 코드와 성공·일시적 실패·영구 실패의 의미를 정의합니다.
-
Amazon SES SMTP 문제 — AWS · 한국어
SMTP 자격 증명·방화벽·연결 끊김·전송 제한 문제와 응답 코드별 재시도·수정 판단을 설명합니다.
-
개발용 SMTP 서버에서 메일을 받아 웹 화면으로 헤더·본문·첨부파일을 확인하고 API와 오류 주입으로 테스트하는 도구입니다.