개요
RFC 5321에 정의된 SMTP는 1982년에 정의 되었고 그 전부터 존재하던 유서 깊은 프로토콜이다. SMTP는 모든 비트가 7비트 ASCII코드로 이루어 져야 하는 단점이 있으며, 보안 상으로도 여러 이슈들이 있다. 원래는 머신의 User ID 를 기반으로 Email 주소를 하였지만, 요즘은 데이터베이스를 이용한 가상 메일 주소로 메일 주소를 구축하는 경우가 대부분이다.
기본 동작
프로토콜의 구성
- 전자메일 사용자 에이전트로 메시지를 작성하고 사용자 에이전트에게 메시지를 보내라고 명령한다.
- 사용자 에이전트는 메시지를 메일 서버에게 보내고 그곳에서 메시지는 메시지 큐에 놓인다.
- 송신자의 메일 서버는 SMTP 데몬으로 큐에 있는 메시지를 본다. 수신자의 메일서버는 송신자의 메일서버에 TCP연결을 요청한다.
- SMTP 핸드 셰이킹 이후, 송신자의 SMTP서버에서 수신자의 SMTP 서버로 메시지가 TCP 연결을 통해 전송된다.
- 수신한 메시지를 송신자의 메일박스에 놓는다.
- 송신자는 사용자 에이전트를 사용하여 메일박스에 놓여진 메시지를 확인한다.
프로토콜의 내용
S: 220 google.com C: HELO naver.com S: 250 Hello naver.com, pleased to meet you C: MAIL FROM: <gongdol@naver.com> S: 250 gongdol@naver.com ... Sender OK C: RCPT TO: <mundol@google.com> S: 250 mundol@google.com ... Recipient OK C: DATA
S: 354 Enter mail, end with "." on a line by itself C: Message C: . S: 250 Message accepted for delivery C: quit S: 221 google.com closing connection
특성
- SMTP는 지속연결을 사용한다.
- HTTP 와 중요한 차이점이 있는데, HTTP는 기본적으로 PULL 프로토콜이다. 즉 사용자가 서버에서 정보를 내려 받는다. 그러나 SMTP는 PUSH 프로토콜이다. 즉 사용자가 서버에 정보를 저장한다.
- HTTP는 객체마다 종류를 분할 하지만, SMTP는 한 몸체에 모든 정보를 넣는다.
- 송신자와 수신자의 메일서버는 직접 연결되어 메일을 주고 받는다. 중간에 다른 어떤 매개자도 없다.
- 만약 수신자의 메일서버가 죽어 있다면, 송신자의 메일서버는 계속해서 메일을 보내기 위해 노력할 것이다.
보안
원래는 사용자 인증절차가 규정되지 않았었지만, 인터넷의 보급과 함께 그 필요성이 요구되어, SASL 메커니즘을 이용한 인증기구가 SMTP-AUTH(SMTP Authentication)으로 표준화되었다. 인증방식으로 PLAIN, LOGIN, DIGEST-MD5, CRAM-MD5 등이 널리 이용되고 있다.
메일 접속 프로토콜
SMTP가 메일 서버로부터 메시지를 전달 받으면 서버 호스트에 직접 로그인해서 메일을 읽을 수도 있지만, 메일 접속 프로토콜을 사용하여 메일을 읽을 수도 있다. 이때 SMTP를 사용해서는 메일을 원거리에서 읽을 수가 없다. 왜냐하면 SMTP는 기본적으로 푸쉬 프로토콜이기 때문이다. 이 문제는 메일 서버에서 자신의 로컬 PC로 메시지를 전송하는 특별한 메일 액세스 프로토콜을 사용하여 해결한다.
POP3
[RFC 1939]에 정의된 POP3는 아주 간단한 메일 접속 프로토콜이며 매우 간단하고 한정된 기능을 가진다. 110번 포트를 사용하여 통신을 한다. 포스트 오피스 프로토콜(Post Office Protocol, POP)은 응용 계층 인터넷 프로토콜 중 하나로, 원격 서버로부터 TCP/IP 연결을 통해 이메일을 가져오는데 사용된다. 여러 버전의 POP 프로토콜이 개발 되었지만 일반적으로 POP를 지칭하는 경우 보통 POP3을 가리킨다. 현재 POP3가 마지막 표준이다. 윈도우 라이브 핫메일, G메일, 및 Yahoo! 메일과 같은 대부분의 웹 메일에서 지원한다. 대부분의 이메일 프로그램이 서버에 이메일을 남겨두는 기능을 제공하지만, POP는 원격 서버에 접속해서 이메일을 가져온 후 서버에서 이메일을 삭제한다. 그러나 유지 모드를 사용하여 메일을 유지할 수 있다. POP3 통신에서 +OK는 서버가 이전 명령을 잘 처리했다는 것을 -ERR은 무언가 잘못되었다는 것을 나타낸다.
mailServer 110 +OK POP3 server ready user UserName +OK pass ************ +OK user successfully logged on C: list S: 1 293 S: 2 1195 S: . c: retr 1 S: Message ..... Message .... Message .... S: . C: dele 1 (유지 하지 않겠다.) //dele 2 (유지 하겠다.) C: quit S: +OK POP3 server signing off
IMAP
IMAP(Internet Message Access Protocol)는 응용 계층 인터넷 프로토콜 중 하나로, 원격 서버로부터 TCP/IP 연결을 통해 이메일을 가져오는데 사용된다. IMAP는 온라인 모드와 오프라인 모드를 모두 지원하므로 POP3를 사용할 때와 달리 이메일 메시지를 서버에 남겨 두었다가 나중에 지울 수 있다. 그러므로 다른 컴퓨터 환경에서 서로 다른 이메일 클라이언트가 같은 이메일을 받아올 수 있는 장점을 가지고 있다. 이메일 메시지는 서버로 보내져 받는 사람의 이메일 보관함에 저장된다. 사용자는 마이크로소프트 아웃룩, 모질라 선더버드 같은 메일 클라이언트를 사용하여 편지의 기본 헤더(제목, 송신자명, 이메일 주소 등)를 보고 메일 본문의 다운로드 여부를 정할 수도 있다. 하지만, POP3에 비해 IMAP는 메일 서버와의 통신 트래픽이 높은 단점을 가지고 있다. IMAP은 POP3와 다르게 폴더를 만들거나 옮기는 명령을 제공하고, 원격 폴더를 찾는 명령도 제공한다.
HTTP
웹 브라우저를 통해 전자메일을 보내거나 받는 것이다. 1990년대 중반, Hotmail을 통해서 웹 기반 전자메일이 소개되었다. 이러한 서비스의 경우 사용자 에이전트는 HTTP 브라우저이고, 사용자는 HTTP를 사용하여 메일서버를 확인한다.