SMTP(Simple Mail Transfer Protocol)
발신지에서 목적지까지 인터넷을 통해 메시지를 이동하는데 사용하는 텍스트-기반 클라이언트-서버 프로토콜이다
이메일 메시지를 봉투(envelope)에 캡슐화하고 캡슐화된 메시지를 발신지에서 목적지까지 다수의 MTA를 통해 중계한다
SMTP 후속버전으로 ESMTP(Extended SMTP)가 있다
텍스트 기반 클라이언트 - 서버 프로토콜
클라이언트(이메일 송신자)가 서버(다음-홉 수신자)에 접촉하고 해당 메시지가 전송되어야 할 곳에 대한 정보를 말해주는 명령어 집합을 제시한다
또한, 메시지를 전송하는 역할을 수행한다
이들 명령어의 대부분은 **클라이언트가 전송한 텍스트 메시지 또는 서버가 응답으로 보낸 아스키 코드**이다.
발신자로부터 최종 목적지까지는 단일 TCP 연결에서, 단일 SMTP 클라이언트/서버 대화로 이뤄진다
반대로, SMTP 서버는 메시지를 수신하면 SMTP 클라이언트 역할을 최종 목적지까지의 경로를 따라 SMTP 서버로 메시지를 전송하는 중계자이다
즉 SMTP 동작은 SMTP 송신자와 수신자 사이에 교환되는 일련의 명령어와 응답으로 이루어진다
SMTP 교환
위의 그림은 클라이언트와 서버 간의 SMTP 교환을 나타내었다
먼저 클라이언트는 TCP 연결 후 교환을 시작한다.
이로 인해 서버는 SMTP를 활성화하고, 클라이언트에게 응답으로 220(HELLO 도메인 이름)을 보낸다.
서버는 송신측을 인지하고, 명령어 250으로 응답을 보낸다
SMTP 송신자는 사용자 이메일 주소로 시작하는 메일을 전송한다(MAIL 명령어를 사용한다)
또한 서버가 데이터 받을 준비가 되었는지 확인하기 위해 DATA 명령어를 보낸다
서버가 모든 데이터를 수신했으면 250 OK 메시지를 클라이언트에게 통지해준다
클라이언트는 QUIT 명령어를 서버로 보내 서버가 연결을 종료한다
요약
- HELO : 송신 도메인을 알린다
- MAIL : 메시지의 송신 측을 알린다
- 예를 들면, 이 메시지는 machine foo.com의 사용자 3명인 jones, green, brown에게 발송된 메일이다
- 클라이언트는 이들을 개별적인 RCPT 명령어로 인식
- DATA : 서버가 데이터를 받을 준비가 되었는지 확인하기 위함
- 220 : 서버가 SMTP를 활성화하고, 클라이언트에게 도메인 이름과 함께 응답으로 전송
- 250 : 서버가 모든 데이터를 수신했으면 OK와 함께 응답
- QUIT : 클라이언트가 서버와의 연결을 종료하기 위해 보냄