SMTP Flow


SMTP 전송 흐름에대한 전체적인 흐름

전송은 각각의 command절차에 의해서 발생이되며 성공/실패에 따라서 reply code가 발생이 되며 reply code의 결과에 따라 절차 진행이 결정됨.

각각의 command마다 reply code발생이 다르기 때문에 실패시에는 reply code로 어디에 문제가 있는지 여부를 확인할수 있음.





Commands


Basic SMTP Command

다음은 설명 된 기본 SMTP 명령.

SMTP 프로토콜 사양을 따르는 모든 SMTP 서버는 이러한 기본 명령을 지원해야함.


HELO (Hello)    클라이언트는 SMTP 서버에이 명령을 전송하여 SMTP 서버를 식별하고 SMTP 대화를 시작.

   일반적으로 SMTP 클라이언트의 도메인(FQDN)이나 IP 주소는 명령과 함께 인수로 전송 ( : "HELO client.example.com").


MAIL FROM    보낸 사람의 전자 메일 주소를 지정.

또한 새 메일 트랜잭션이 시작되고 있다는 것을 SMTP 서버에 알리고 서버가 모든 상태 테이블과 버퍼 등을 재설정하도록 . 이 명령은 일반적으로 식별 및 로그인 프로세스 후 첫 번째 명령으로 전송.


RCPT TO (Recipient To)    받는 사람의 전자 메일 주소를 지정.

 주어진 전자 메일 메시지에 대해 여러 번 반복하여 여러 명의받는 사람에게 단일 전자 메일 메시지를 배달 가능


DATA                메시지 내용 (본문, 첨부 파일 등)의 전송을 시작.

                DATA 명령이 클라이언트에서 서버로 전송 된 후 서버는 354 응답 코드로 응답하며 후 메시지 내용을 서버로 전송. 모든

   메시내용이 전송되면 단일 점 ( ".")을 한 줄에 단독으로 입력하여 마무리.


RSET (Reset)    RSET 명령이 전자 메일 서버로 보내지면 현재 메일 트랜잭션이 중단.

연결은 닫히지 않음 (QUIT 명령에 대해 예약되어 있음. 아래 참조). 그러나 보낸 사람,받는 사람 및 전자 메일 데이터에 대한 모든 정보는 제거되고 버퍼 및 상태 테이블은 삭제됨.


VRFY (Verify)    이 명령은 서버에 지정된 사용자 이름이나 사서함이 유효한지 (존재하는지) 확인하도록 요청.

    사용자 이름을 묻는 메시지가 표시되면 사용자의 전체 이름과 완전히 지정된 사서함이 반환. 일부 전자 메일 서버에서는 보

    안 홀이 될 수 있으므로 VRFY 명령은 무시. 이 명령을 사용하여 서버의 로그인 이름을 조사 가능. VRFY 명령을 무시하는 서버

    는 일종의 응답을 보내지 만 클라이언트가 요청한 정보는 보내지 않습니다.


NOOP (No operation)    NOOP 명령은 수신자가 OK 응답을 보내도록하는 것 외에는 아무것도 수행하지 않음.

      주된 목적은 서버가 여전히 연결되어 있고 클라이언트와 통신 할 수 있는지 확인하는 것.


QUIT                    연결을 닫기 위해 서버에 요청. 연결을 닫을 수 있으면 서버는 숫자 코드로 응답하고 세션을 닫음.


 


Extended SMTP (ESMTP) Commands

클라이언트가 HELO 명령 대신 EHLO (확장 Hello) 명령을 사용하여 SMTP 통신을 시작하면 몇 가지 추가 SMTP 명령을 사용할 수 있음.

모든 서버에는 고유 한 확장 SMTP 명령 집합이있을 수 있음. 클라이언트가 EHLO 명령을 서버에 보낸 후 서버는 사용 가능한 ESMTP 명령 목록을 클라이언트에 다시 보내는 경우가 많음.


EHLO (Extended Hello) HELO와 동일하지만 클라이언트가 확장 SMTP (ESMTP) 프로토콜을 대신 사용할 수도 있음을 서버에 알림.

         EHLO ESMTP 명령을 사용하지 않더라도 사용가능. 추가 ESMTP 명령을 제공하지 않는 서버는 일반적으로 최소한

         EHLO 명령을 인식하고 적절한 방식으로 응답.


AUTH (Authentication)   AUTH 명령은 서버에 대한 클라이언트를 인증하는 데 사용. AUTH 명령은 클라이언트 사용자 이름과 암호를 전자

메일 서버로 전송. AUTH PLAIN, LOGIN CRAM-MD5와 같은 다른 키워드 ( : AUTH LOGIN)와 결합하여 다양한 로 그인 방법과 다양한 보안 수준을 사용.


STARTTLS (Start Transport Layer Security)    

보안을 강화하기 위해 전자 메일 서버와 클라이언트간에 통신 할 때 암호화 된 TLS (전송 계층 보안) 연결하는데 사용.


SIZE                            SIZE 명령에는 두 가지 목적 있으며 SMTP 서버는 클라이언트에게 최대 메시지 크기를 알리고 클라이언트는 전송할 전자

메일 메시지의 (예상 된) 크기를 SMTP 서버에 알릴 수 있음. 클라이언트는 서버에서보고 한 크기보다 큰 전자 메일 메시지를 보내지 않아야하지만 일반적으로 메시지가 클라이언트에서 서버에 알린 크기보다 약간 큰 경우 문제가 없음.


HELP                          이 명령은 서버가 클라이언트에 유용한 정보 ( : SMTP 서버가 지원하는 명령 목록)를 보내도록 .











출처


SMTP/POP3/IMAP Flow

https://www.codeproject.com/search.aspx?q=Understanding+the+insides+of+the+POP3+mail+protocol&sbo=kw&x=0&y=0

SMTP Flow

https://www.codeproject.com/Articles/399207/Understanding-the-Insides-of-the-SMTP-Mail-Protoco

SMTP state diagram

http://www.sosnoski.com/presents/building-on-akka.html#/11


'Server > MAIL' 카테고리의 다른 글

DKIM이란?  (0) 2017.02.23
SMTP란 - 2. flow/commands  (0) 2017.02.13
SMTP란 - 1. Relay, Gateway  (0) 2017.02.12
POP3/IMAP 소개  (0) 2017.02.02
메일 전송 과정 간단 이해  (0) 2017.01.31

+ Recent posts