SMTP: Difference between revisions

From CS Wiki
(폰트 정리)
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
'''Simple Mail Transfer Protocol'''
'''Simple Mail Transfer Protocol'''


인터넷에서 이메일을 보내기 위해 이용되는 프로토콜, 사용하는 TCP 포트번호 25번.
SMTP는 인터넷에서 이메일을 보내기 위해 이용되는 프로토콜이다. 현대까지 널리 사용되는 프로토콜로, TCP 25번의 [[잘 알려진 포트]]를 사용하고 있다.
 
* 주로 이메일을 보내는 데 사용되며, 수신된 이메일을 저장하고 관리하는 것은 다른 프로토콜(IMAP, POP3 등)이 담당한다.
 
== 주요 기능 및 특징 ==
 
* '''이메일 전송''': 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) 등의 기술을 함께 사용한다.
 
== 동작 흐름 ==
 
=== 기본 동작 ===
 
# '''클라이언트와 서버 간 연결''': 이메일 클라이언트가 SMTP 서버에 연결을 요청하고, 서버는 이를 받아들인다.
# '''이메일 전송''': 클라이언트는 이메일 발신자 정보, 수신자 정보, 본문 등의 데이터를 SMTP 명령어를 사용하여 서버에 전달한다.
# '''이메일 수신자 서버로 전달''': SMTP 서버는 수신자의 도메인을 확인한 후, 해당 수신자의 이메일 서버로 이메일을 전송한다.
# '''연결 종료''': 이메일이 성공적으로 전송되면 SMTP 서버는 클라이언트와의 연결을 종료한다.
 
=== 상세 명령 ===
 
# '''TCP 연결 설정''': 클라이언트와 서버 간 TCP 3-way handshake로 연결 설정.
# '''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
# '''MAIL FROM''': 발신자 이메일 주소 전송.
#* C: MAIL FROM:<[/cdn-cgi/l/email-protection <nowiki>[email protected]</nowiki>]>
#* S: 250 OK
# '''RCPT TO''': 수신자 이메일 주소 전송.
#* C: RCPT TO:<[/cdn-cgi/l/email-protection <nowiki>[email protected]</nowiki>]>
#* S: 250 OK
#* C: RCPT TO:<[/cdn-cgi/l/email-protection <nowiki>[email protected]</nowiki>]>
#* S: 250 OK
# '''DATA''': 이메일 본문과 헤더 전송, 마지막에 마침표로 전송 완료 알림.
#* C: DATA
#* S: 354 Start mail input; end with <CRLF>.<CRLF>
#* C: From: [/cdn-cgi/l/email-protection <nowiki>[email protected]</nowiki>]
#* C: To: [/cdn-cgi/l/email-protection <nowiki>[email protected]</nowiki>], [/cdn-cgi/l/email-protection <nowiki>[email protected]</nowiki>]
#* C: Subject: Test email
#* C:
#* C: This is the body of the email.
#* C: .
#* S: 250
#* OK: queued as 12345
# '''QUIT''': 연결 종료 명령 전송.
#* C: QUIT
#* S: 221 Bye
# '''TCP 연결 종료''': 클라이언트와 서버 간 TCP 4-way handshake로 연결 종료.
 
[[분류:인터넷]]
[[분류:프로토콜]]

Latest revision as of 11:33, 24 October 2024

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로 연결 종료.