SMTP

From CS Wiki

Simple Mail Transfer Protocol

SMTP는 인터넷에서 이메일을 보내기 위해 이용되는 프로토콜이다. 현대까지 널리 사용되는 프로토콜로, TCP 25번의 잘 알려진 포트를 사용하고 있다.

  • 주로 이메일을 보내는 데 사용되며, 수신된 이메일을 저장하고 관리하는 것은 다른 프로토콜(IMAP, POP3 등)이 담당한다.

주요 기능 및 특징[edit | edit source]

  • 이메일 전송: SMTP는 클라이언트가 작성한 이메일을 지정된 수신자의 이메일 서버로 전달한다. 이 과정에서 발신자 주소, 수신자 주소, 메일 본문 등을 서버로 보내는 역할을 한다.
  • 텍스트 기반 프로토콜: SMTP는 텍스트 기반의 명령어를 사용하여 통신한다. 각 명령어는 서버와 클라이언트 간의 명확한 대화를 가능하게 한다. 예를 들어, HELO(서버에 인사), MAIL FROM(발신자 지정), RCPT TO(수신자 지정), DATA(이메일 본문 전송) 등의 명령어가 사용된다.
  • 연결 설정: SMTP는 이메일을 전송하기 전에 클라이언트와 서버 간에 TCP 연결을 설정하고, 전송이 완료된 후에는 연결을 종료한다. 보통 포트 25번을 사용하여 통신하지만, 보안이 강화된 SMTP over SSL(SMTPS)는 포트 465 또는 587번을 사용한다.
  • 다중 수신자 지원: SMTP는 한 번에 여러 명의 수신자에게 이메일을 보낼 수 있다. 여러 명의 수신자를 지정할 때, CC(Carbon Copy)나 BCC(Blind Carbon Copy)를 사용하여 각각의 수신자에게 메일을 전달할 수 있다.
  • 스팸 필터링 및 인증: 현대 SMTP 서버는 스팸 메일을 필터링하거나, 발신자 인증을 통해 보안을 강화하는 기능도 추가로 지원한다. 인증되지 않은 사용자가 서버를 통해 이메일을 보내는 것을 방지하기 위해 SPF(Sender Policy Framework), DKIM(DomainKeys Identified Mail), DMARC(Domain-based Message Authentication, Reporting & Conformance) 등의 기술을 함께 사용한다.

동작 흐름[edit | edit source]

기본 동작[edit | edit source]

  1. 클라이언트와 서버 간 연결: 이메일 클라이언트가 SMTP 서버에 연결을 요청하고, 서버는 이를 받아들인다.
  2. 이메일 전송: 클라이언트는 이메일 발신자 정보, 수신자 정보, 본문 등의 데이터를 SMTP 명령어를 사용하여 서버에 전달한다.
  3. 이메일 수신자 서버로 전달: SMTP 서버는 수신자의 도메인을 확인한 후, 해당 수신자의 이메일 서버로 이메일을 전송한다.
  4. 연결 종료: 이메일이 성공적으로 전송되면 SMTP 서버는 클라이언트와의 연결을 종료한다.

상세 명령[edit | edit source]

  1. TCP 연결 설정: 클라이언트와 서버 간 TCP 3-way handshake로 연결 설정.
  2. EHLO/HELO: 클라이언트가 서버에 자신을 소개.
    • 클라이언트가 서버에 연결을 설정한 후, HELO(또는 EHLO) 명령어를 통해 자신을 서버에 소개한다.
    • HELO는 SMTP 초기 명령어이고, EHLO는 확장된 기능을 지원하는 경우 사용된다.
    • C: EHLO example.com
    • S: 250-Hello example.com
    • S: 250-SIZE 35882577
    • S: 250-8BITMIME
    • S: 250-STARTTLS
    • S: 250 OK
  3. MAIL FROM: 발신자 이메일 주소 전송.
    • C: MAIL FROM:<[/cdn-cgi/l/email-protection [email protected]]>
    • S: 250 OK
  4. RCPT TO: 수신자 이메일 주소 전송.
    • C: RCPT TO:<[/cdn-cgi/l/email-protection [email protected]]>
    • S: 250 OK
    • C: RCPT TO:<[/cdn-cgi/l/email-protection [email protected]]>
    • S: 250 OK
  5. DATA: 이메일 본문과 헤더 전송, 마지막에 마침표로 전송 완료 알림.
    • C: DATA
    • S: 354 Start mail input; end with <CRLF>.<CRLF>
    • C: From: [/cdn-cgi/l/email-protection [email protected]]
    • C: To: [/cdn-cgi/l/email-protection [email protected]], [/cdn-cgi/l/email-protection [email protected]]
    • C: Subject: Test email
    • C:
    • C: This is the body of the email.
    • C: .
    • S: 250
    • OK: queued as 12345
  6. QUIT: 연결 종료 명령 전송.
    • C: QUIT
    • S: 221 Bye
  7. TCP 연결 종료: 클라이언트와 서버 간 TCP 4-way handshake로 연결 종료.