이메일 인프라
SMTP
SMTP는 Simple Mail Transfer Protocol의 약자입니다. 메일 서버끼리 메일을 보낼 때 쓰는 규칙입니다. 내가 보내는 모든 메일은 SMTP로 서버에서 서버로 전달됩니다.
SMTP란? (SMTP의 뜻)
SMTP는 Simple Mail Transfer Protocol의 약자입니다. 프로토콜이란 두 컴퓨터가 서로 대화할 때 따르는 정해진 규칙입니다. SMTP는 메일을 보내기 위한 규칙입니다. 현재 버전은 RFC 5321에 정의되어 있습니다. RFC란 인터넷 표준을 정하는 공개 문서입니다.
서버란 항상 켜져 있으면서 다른 컴퓨터를 위해 일하는 컴퓨터입니다. 메일 서버는 메일을 보내거나, 받거나, 저장합니다. 따라서 “SMTP란 무엇인가”에 대한 짧은 답은 이렇습니다. 메일 서버끼리 메일을 주고받는 방식입니다.
SMTP는 메일을 옮기기만 합니다. 받은편지함을 보여 주지는 않습니다. 그 일은 다른 프로토콜이 하며, 아래에서 설명합니다.
예시: 아나가 벤에게 메일을 보낼 때
아나는 Gmail을 씁니다. 벤은 Northwind라는 회사에서 일합니다. 벤의 주소는 ben@northwind.com이고, 회사는 Microsoft 365로 Outlook을 사용합니다. 아나가 메일을 쓰고 “보내기”를 클릭합니다. 그러면 다음과 같은 일이 일어납니다.
- Gmail의 발송 서버가 아나의 메일을 받습니다.
- 서버는 @ 기호 뒤의 부분인 northwind.com을 읽습니다. 이것은 도메인, 즉 인터넷에서 쓰는 벤 회사의 이름입니다.
- DNS에서 northwind.com의 MX 레코드를 조회합니다. DNS는 인터넷의 공개 디렉터리입니다. MX 레코드는 도메인의 메일을 받는 서버를 알려 줍니다.
- MX 레코드가 Microsoft 서버를 가리킵니다. Gmail의 서버가 그 서버에 연결합니다.
- Gmail의 서버는
EHLO명령으로 자신을 소개합니다. 그런 다음MAIL FROM명령으로 발신자 주소를 알려 줍니다. RCPT TO:<ben@northwind.com>명령으로 수신자 주소를 알려 줍니다.- Microsoft의 서버가
250으로 답합니다. 그 주소로 오는 메일을 받는다는 뜻입니다. - Gmail의 서버가
DATA명령으로 메일 본문을 보냅니다. - Microsoft의 서버가 다시
250으로 답합니다. 메일을 받아서 벤의 메일함에 넣었습니다. - Gmail의 서버가
QUIT명령으로 연결을 끝냅니다.
아나와 벤은 이 단계를 하나도 보지 못합니다. 아나에게는 “보냄”이 보이고, 벤에게는 새 메일이 보입니다.
SMTP 서버란?
SMTP 서버란 SMTP로 메일을 보내거나 받는 서버입니다. 위의 예에서 Gmail의 발송 서버와 Microsoft의 수신 서버는 둘 다 SMTP 서버입니다. 이 서버에서 돌아가는 소프트웨어를 메일 전송 에이전트, 즉 MTA라고 합니다.
이메일 프로그램이나 앱을 설정할 때 SMTP 서버를 접하게 됩니다. 웹사이트의 문의 양식이 Gmail 계정으로 메일을 보내게 하고 싶다고 가정하겠습니다. 양식에는 Gmail의 SMTP 서버 주소인 smtp.gmail.com이 필요합니다. 포트 번호, 사용자 이름, 비밀번호도 필요합니다. 양식은 메일을 하나씩 그 서버에 넘기고, 서버가 메일을 보냅니다.
메일을 많이 보내는 기업은 보통 SendGrid나 Amazon SES 같은 이메일 발송 서비스(ESP)를 사용합니다. 이런 서비스는 고객을 위해 SMTP 서버를 운영합니다.
SMTP 포트: 25, 587, 465
포트란 연결이 어떤 서비스를 위한 것인지 서버에 알려 주는 번호입니다. SMTP는 흔히 세 가지 포트 번호를 씁니다.
| 포트 | 용도 | 암호화 |
|---|---|---|
| 25 | 메일 서버가 다른 메일 서버로 메일을 보낼 때 | 선택 사항, STARTTLS로 켭니다 |
| 587 | 앱이나 이메일 프로그램이 자신의 SMTP 서버에 메일을 넘길 때 | 로그인 전에 STARTTLS로 켭니다 |
| 465 | 587번 포트와 같은 용도 | 처음부터 암호화됩니다 |
STARTTLS는 열려 있는 연결을 암호화된 연결로 바꾸는 명령입니다. 암호화란 내용을 알아볼 수 없게 바꾸어, 두 서버 사이에서 누구도 읽지 못하게 하는 것입니다.
앱이나 이메일 프로그램을 설정한다면 587번이나 465번 포트를 사용하십시오. 많은 가정용 인터넷 업체와 클라우드 호스팅 업체는 25번 포트로 나가는 연결을 차단합니다. 감염된 컴퓨터가 스팸을 보내지 못하게 하려는 것입니다.
SMTP와 IMAP, POP3의 차이
SMTP는 메일을 보냅니다. 메일을 읽게 해 주지는 않습니다. 읽는 일은 다른 프로토콜 두 개가 맡습니다.
- SMTP는 메일을 내보냅니다. 내 프로그램에서 내 서버로, 그리고 서버에서 서버로 보냅니다.
- IMAP은 서버에 남아 있는 메일을 이메일 프로그램에서 읽게 해 줍니다. 휴대전화와 노트북에서 같은 받은편지함을 볼 수 있습니다.
- POP3는 메일을 기기 하나로 내려받습니다. 예전 설정에서는 내려받은 뒤 서버에서 메일을 지우는 경우가 많았습니다.
그래서 Outlook이나 Apple Mail 같은 이메일 프로그램은 설정을 두 가지 씁니다. 받은편지함을 읽을 때는 IMAP이나 POP3를 쓰고, 보낼 때는 SMTP를 씁니다.
SMTP 서버가 거부할 때
모든 SMTP 응답은 세 자리 코드로 시작합니다. 첫 번째 숫자가 응답의 종류를 알려 줍니다.
- 2xx는 성공입니다.
250은 요청을 받아들였다는 뜻입니다. - 4xx는 일시적인 문제입니다. 보내는 서버가 나중에 다시 시도합니다. 예:
451, 나중에 다시 시도 - 5xx는 영구적인 실패입니다. 다시 보내도 실패합니다. 예:
550 5.1.1, 메일함이 존재하지 않음
실제 메일에 5xx 응답이 오면 하드 바운스가 됩니다. 4xx 응답은 소프트 바운스입니다. 흔한 코드와 각각의 뜻은 SMTP 오류 코드 페이지에 정리되어 있습니다.
일부 서버는 아직 모르는 발신자에게 일부러 4xx 응답을 보냅니다. 이것을 그레이리스팅이라고 합니다. 첫 시도는 실패하고, 나중의 재시도는 받아들여집니다.
SMTP와 이메일 검증
이메일 유효성 검사 도구는 위의 예와 같은 SMTP 대화를 사용하지만, 8단계 전에 멈춥니다. RCPT TO 명령으로 주소에 대해 묻고, 250 응답은 서버가 그 주소로 오는 메일을 받는다는 뜻입니다. 550 5.1.1 응답은 메일함이 존재하지 않는다는 뜻입니다. 그런 다음 검증 도구는 QUIT 명령을 보내므로, 메일은 한 통도 보내지지 않습니다. 대량 이메일 검증 도구는 리스트 전체에 이 이메일 검증을 실행하므로, 반송될 주소를 지울 수 있습니다.
관련 용어
- MX 레코드MX 레코드는 그 도메인의 메일을 어느 서버가 받는지 알려 주는 도메인 설정입니다. name@example.com으로 메일을 보내면, 내 메일 서버는 example.com의 MX 레코드를 조회해 메일을 어디로 전달할지 찾습니다.
- ESP(이메일 발송 서비스)이메일 발송 서비스, 즉 ESP(email service provider)는 내 대신 메일을 보내 주는 서비스를 제공하는 회사입니다. 기업은 ESP를 이용해 뉴스레터, 영수증, 비밀번호 재설정 메일을 많은 사람에게 보냅니다. Mailchimp, Brevo, SendGrid가 그 예입니다.
- 하드 바운스하드 바운스란 받는 쪽 서버가 영구적으로 거부한 메일입니다. 주소가 없거나, 도메인이 없거나, 서버가 내 메일을 차단한 경우입니다. 같은 메일을 다시 보내도 다시 실패합니다.
- 그레이리스팅그레이리스팅은 스팸 방어 방법입니다. 메일 서버는 모르는 발신자가 보낸 첫 메일을 거부하고, 몇 분 뒤 발신자가 다시 보내면 같은 메일을 받아들입니다. 실제 메일 서버는 다시 보내지만, 대부분의 스팸 프로그램은 다시 보내지 않습니다.
