[[분류:네트워크]][[분류:이더넷/프로토콜]] [목차] == 개요 == {{{+1 Simple Mail Transfer Protocol / 간이 우편 전송 프로토콜}}} [[이메일]] 전송에 사용되는 네트워크 [[프로토콜]]이다. == 상세 == 인터넷에서 메일 전송에 사용되는 표준이다. 1982년 RFC821에서 표준화되어 현재는 RFC5321에서 정의된 ESMTP(Extended SMTP; 확장 SMTP)로 2008년 갱신되었다. SMTP는 보안과 호환성의 문제로 그대로는 사용하지 않는 경우가 많다. 일반적으로 쓰이는 확장 프로그램은 SMTP-AUTH(송신자 인증 서비스), ESMTP(SASL을 이용한 보안 연결), MIME(non-ascii 데이터 전송 포맷)가 있다. SMTP는 25/tcp와 587/tcp 포트를 사용하며 [[TLS|SMPTS]]는 465/tcp 포트를 사용한다. SMTP는 연결지향적이고 텍스트 기반으로 작동하는 프로토콜이다. SMTP 클라이언트와 SMTP 서버 사이에 '''SMTP 세션'''이 생성되며, 명령행을 이용해 메일을 송수신한다. '''SMTP 교환'''은 다음의 세 명령어를 통해 이루어진다. 1. MAIL 명령어: 수신자 지정 1. RCPT 명령어: 송신자 지정 1. DATA 명령어: 메시지 내용의 시작이 되는 부분이다. 메시지 헤더와 바디로 구성된다. == 예시 == SMTP 세션의 예[* telnet 으로 포트25에 접속해보자]: >S: 220 smtp.example.com ESMTP Postfix >C: HELO relay.example.org >S: 250 Hello relay.example.org, I am glad to meet you >C: MAIL FROM:<bob@example.org> >S: 250 Ok >C: RCPT TO:<alice@example.com> >S: 250 Ok >C: RCPT TO:<theboss@example.com> >S: 250 Ok >C: DATA >S: 354 End data with <CR><LF>.<CR><LF> >C: From: "Bob Example" <bob@example.org> >C: To: "Alice Example" <alice@example.com> >C: Cc: theboss@example.com >C: Date: Tue, 15 January 2008 16:02:43 -0500 >C: Subject: Test message >C: >C: Hello Alice. >C: This is a test message with 5 header fields and 4 lines in the message body. >C: Your friend, >C: Bob >C: . >S: 250 Ok: queued as 12345 >C: QUIT >S: 221 Bye >{The server closes the connection} 각 프로그래밍 언어마다 smtp 사용을 위한 lib를 지원한다. Python 경우에는 smtplib가 기본 내장되어 있으며 SSL/TLS 인증을 지원하여 gmail 이나 네이버 메일을 사용가능하다. 단 문제는 script 상에서 계정 정보와 패스워드가 노출되기 때문에 보안에 유의해야 한다.