Simple Mail Transfer Protocol에 대해 알아보겠습니다.
SMTP
SMTP(Simple Mail Transfer Protocol)
- 단순 전자우편 전송 프로토콜
- 네트워크를 통해 전자우편(이메일)을 전송하는 기술 표준
- 다른 네트워킹 프로토콜과 마찬가지로 컴퓨터와 서버는 SMTP를 이용하여 기반 하드웨어나 소프트웨어와 관계없이 데이터를 교환할 수 있음
SMTP는 메일 검색 프로토콜이 아님
- 이메일 공급자의 메일 서버로 이메일을 전송하지만 수신자가 메일 서버에서 이메일을 검색해 읽는 데는 별도의 프로토콜이 이용됨
SMTP의 작동 방식
SMTP는 이메일 클라이언트와 메일 서버 간의 데이터 교환 프로세스를 정의
이메일 클라이언트
- 사용자가 액세스해 이메일을 전송하는 컴퓨터나 웹 응용 프로그램
메일 서버
- 이메일의 전송, 수신, 전달을 위한 특화된 컴퓨터
- 사용자는 메일 서버와 직접 상호작용하지 않음
이메일 클라이언트와 전자 메일 서버 사이에서 이메일 전송이 시작되는 과정
- SMTP 연결 열림
- 첫 번째 단계로 클라이언트와 서버 간 TCP 연결로 시작
- SMTP는 전송 프로토콜로 TCP를 이용
- 그 다음 이메일 클라이언트가 특화된 Hello 명령(HELO 또는 EHLO)으로 이메일 전송 프로세스를 시작
- 이메일 데이터 전송
- 클라이언트가 이메일 헤더, 이메일 본문, 기타 추가 구성 요소로 이루어진 실제 이메일 콘텐츠와 함께 일련의 명령을 서버로 전송
- MTA(메일 전송 에이전트)
- 서버가 MTA라는 프로그램을 실행
- MTA는 수신자의 이메일 주소 도메인을 확인하고 발신자와 다를 경우 수신자의 IP 주소를 찾도록 DNS에 쿼리
- 연결 닫힘
- 데이터 전송이 완료되면 클라이언트가 서버에 알림을 보내며 서버가 연결을 닫음
- 이때 클라이언트가 SMTP 연결을 새로 열지 않는 한 서버는 클라이언트로부터 이메일 데이터를 추가로 받지 않음
일반적으로 이 첫 번째 이메일 서버는 이메일의 실제 최종 목적지가 아님
- 클라이언트로부터 이메일을 수신한 서버는 다른 메일 서버와 이러한 SMTP 연결 프로세스를 반복
- 최종적으로 이메일이 수신자의 이메일 공급자가 제어하는 메일 서버 내 수신자의 받은메일함에 도착할 때까지 두 번째 서버도 같은 작업을 수행
- 편지와 마찬가지로 이메일도 수신자의 받은메일함에 도착할 때까지 SMTP를 통해 서버에서 서버로 이동
SMTP 봉투
- 이메일 클라이언트가 이메일의 출발지와 목적지에 관해 메일 서버에게 보내는 정보의 집합
- 이메일 헤더 및 본문과 구별됨
- 이메일 수신자에게는 보이지 않음
SMTP 명령
- 미리 정의된 텍스트 기반 지시사항
- 클라이언트나 서버에서 수행해야 할 작업과 이에 수반된 데이터를 처리할 방법을 알려줌
SMTP 명령 종류
HELO/EHLO
- 이 명령을 사용하면 Hello라고 말한 다음 클라이언트와 서버 사이에 SMTP 연결 시작
HELO
는 이 명령의 기본 버전EHLO
는 특수 유형 SMTP를 위한 버전
MAIL FROM
- 이메일을 전송하는 서버를 알려줌
- Alice가 Bob에게 이메일을 보내려는 경우 클라이언트가
MAIL FROM:<alice@example.com>
을 전송할 수 있음
RCPT TO
- 이 명령으로 이메일 수신자가 나열됨
- 수신자가 여려 명일 경우 클라이언트는 이 명령을 여러 번 전송할 수 있음
- 위 예시에서 Alice의 이메일 클라이언트는
RCPT TO:<bob@example.com>
을 전송
DATA
- 이메일 콘텐츠 앞에 위치
RSET
- 이 명령을 사용하면 연결이 초기화되어 SMTP 연결이 닫히지 않고 미리 전송한 모든 정보가 제거됨
- 클라이언트가 잘못된 정보를 전송할 때 사용
QUIT
- 이 명령으로 연결이 종료됨
DATA 예시
1
2
3
4
5
6
7
8
9
DATA
날짜: 2022년 4월 4일 월요일
보낸 사람: Alice alice@example.com
제목: 에그 베네딕트 캐서롤
받는 사람: Bob bob@example.com
안녕 Bob,
금요일에 에그 베네딕트 캐서롤 레시피 가져갈게.
-Alice
SMTP 서버
- SMTP 프로토콜을 사용해 이메일을 전송하고 수신할 수 있는 메일 서버
- 이메일 클라이언트는 이메일 전송을 시작할 수 있게 이메일 공급자의 SMTP 서버와 직접 연결
SMTP 서버에서 실행되는 각기 다른 소프트웨어 프로그램
- MSA(메일 제출 에이전트)
- 이메일 클라이언트로부터 이메일을 수신
- MTA(메일 전송 에이전트)
- 전달망의 다음 서버로 이메일을 전송
- 필요할 경우 수신자 도메인의 메일 교환 DNS 레코드를 찾기 위해 DNS를 쿼리할 수 있음
- MDA(메일 전달 에이전트)
- MTA에서 이메일을 수신해서 수신자의 받은메일함에 보관
SMTP에서 사용하는 포트
포트
- 네트워킹에서 네트워크 데이터를 수신하는 가상 지점
SMTP에서 사용하는 포트
- 포트 25
- 이전에는 SMTP에 포트 25만 사용
- SMTP 서버 사이를 연결하는 데 가장 많이 사용됨
- 포트 465
- SSL 암호화와 함께 SMTP에 사용하도록 지정됨
- 하지만 SSL은 TLS로 대체되어 최신 이메일 시스템에서는 이 포트를 사용하지 않음
- 포트 587
- 이메일 제출용 기본 포트
- 이 포트를 통과하는 SMTP 통신은 TLS 암호화를 이용
- 포트 2525
- SMTP와 공식적으로 연결되어 있지는 않지만 일부 이메일 서비스에서는 앞서 언급한 포트가 차단되었을 경우 이 포트로 SMTP 전송이 제공됨
SMTP와 IMAP, POP
IMAP, POP
- 최종 수신처로 이메일을 전송하는 데 사용
- 사용자에게 이메일을 표시하려면 이메일 클라이언트가 망 내 최종 메일 서버에서 이메일을 검색해야 함
- 이러한 목적으로 클라이언트는 SMTP가 아닌 IMAP이나 POP를 사용
- SMTP는 이메일을 서버로 푸시
- IMAP, POP은 사용자의 응용 프로그램으로 향하는 나머지 과정에서 이를 끌어옴
확장 SMTP
ESMTP
- 확장 단순 전자우편 전송 프로토콜
- 기존 기능을 확장하여 이메일 첨부 파일 전송, TLS 사용, 기타 기능을 사용할 수 있게 해주는 프로토콜 버전
- 대부분의 이메일 클라이언트와 이메일 서비스는 기본 SMTP가 아닌 ESMTP를 사용
- ESMTP에 extended hello인
EHLO
를 포함해 연결을 시작할 때 ESMTP를 사용할 수 있도록 하는 추가 명령이 있음