Skip to content
kimkc edited this page Aug 24, 2021 · 1 revision

SMTP

SMTP

SMTP는 Simple mail Transfer protocol의 약자이다.
이메일 전송에 직접적으로 쓰이는 응용 계층의 프로토콜이다.
전송계층 프로토콜로는 TCP를 통해 전달합니다.

예시 - 편지와 우체국(우체통)

편지를 보낼 때(SMTP) 우체국이 관리하는 우편통이나 우체국에 직접가서 쓴다.
편지를 받을 때는 집 앞 우편함에 도착해있는 편지를 확인하면 된다.(POP, IMAP, HTTP)


동작 과정

내 메일 : abc@naver.com
상대방 메일 : def@daum.net

내가 상대방에게 메일을 보낸다고 가정해봅시다.
naver 메일 서버와 daum 메일 서버가 각각 존재합니다.
저는 naver 의 메일서버에 보낼데이터를 전송합니다. (SMTP)

naver 메일 서버는 daum 메일 서버에게 메일을 보냅니다. (SMTP)
그러면 그 메일 정보는 daum 메일 서버 보관함에 저장되고,
상대방은 daum 메일 서버 보관함에서 메일을 가져오게 됩니다. (POP, IMAP, HTTP)

왜 메일을 가져올 때는 SMTP를 이용하지 않을까?
SMTP는 심플하기 때문에 Mail Box (Po box) 까지만 갈 수 있습니다.
수신자는 태블릿, 컴퓨터, 휴대폰 등등에서 모두 메일을 확인할 수 있기 때문에,
SMTP는 메일 서버 보관함까지만 작용하고, 수신자는 위 3가지 옵션을 통해 직접적으로 메일을 가져오게 됩니다.

출처: https://programming119.tistory.com/152

SMTP Format

메일 구조가 복잡해지면서, 아래의 문제를 해결 발생
1. 각 데이터들을 분리할 수 있어야 한다.
=> 각 데이터 사이를 boundary 문자열을 이용하여 분리
2. 각 데이터의 타입을 알아야 한다.
=> 데이터가 plain/text인지 binary 데이터인지 알아야한다. 그래서 smtp 각 데이터의 앞부분에 부가정보(애플리케이션 타입 정보 포함)를 담은 header를 두어 해결.
3. Base64 encode: SMTP는 printable한 텍스트 데이터를 처리하는 것을 목적으로 만들었다.
=> 바이너리 데이터를 텍스트로 변환할 필요가 생길 때, Base64( = 알파벳 대소문자 52 + 숫자10 + "+"기호 + "/"기호) encoding 기법을 사용한다. 데이터를 받으면 Base64 decode 과정을 통해 원래 데이터로 복원한다.


위와 같은 문제 해결을 통한 구조( 헤더 1개 + 각 헤더, 바디 같이 3개)



참고 자료

Clone this wiki locally