C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[14975] Re:SMTP 인증...
박지훈.임프 [cbuilder] 1930 읽음    2002-01-25 09:20
SMTP는 POP3와 달리 기본적으로는 인증을 하지 않는 프로토콜입니다.
접속한 사용자가 누구이든 관계없이 일단 받아놓고 무조건 해당 To: 메일주소로 전송을 시도합니다.

그런데 이런 경우에.. SMTP 서버와 관련해서 좀 골치아픈 문제가 생깁니다.
원래 어떤 메일이 SMTP 서버로 들어와야 하는 경우는, From: 주소나 To: 주소 둘중의 하나가
메일 서버에 계정을 가지고 있는 경우입니다.
앞에서 말했듯이 기본적으로 SMTP는 인증을 필요로 하는 프로토콜이 아니기 때문에, From: To:
두개의 주소가 모두 해당 로컬 SMTP 서버에 계정이 없는 경우에도 일단 메일을 수신하게 됩니다.

이런 경우를 Relay라고 합니다. 릴레이란, 간단히 말하면, '내 메일서버'도 아니고, 받는 사람
메일서버도 아닌데 제3의 SMTP 서버를 단순한 경유지로 이용하는 경우입니다.
이것은 대부분의 경우 나쁜 의도로 사용되는데... 이해하기 쉽게 말하면, 우리가 흔히 말하는
돈세탁 처럼, '발신자 세탁'을 하기 위한 경우에 자주 쓰입니다.

그래서 이런 릴레이가 문제가 된 이후로부터는 대부분의 SMTP 서버 구현에 릴레이 방지 세팅이
추가되었습니다. 로직은 아주 간단해서, 보내는 사람과 받는 사람의 @ 뒤 주소 도메인이 모두
해당 SMTP 서버에 계정이 없는 경우 안받아버리는 겁니다.
(SMTP 서버 구현에 따라 릴레이 방지가 기본세팅일 수도 있고 아닐 수도 있겠지요. 보통은 아닙니다.)
이런 릴레이 방지가 SMTP 서버에 있어서 가장 기본적인 인증이라고 할 수 있습니다.

이 외에 기본적인 인증 처리가 있는데, 이것도 최초에 제안되었던 SMTP 프로토콜에는 없었던 것이
이후의 필요에 의해 추가된 것입니다. SMTP 서버에 접속한 클라이언트측에서 AUTH LOGIN을 서버로
전송하면, 이 로그인 절차가 세팅되어 있는 서버에서는 인증절차가 시작되게 됩니다.
클라이언트에서 서버로 단순히 계정이름과 패스워드를 전송하는 것인데.. 그래도 기본적인 base64
인코딩은 해서 보내게 됩니다.

일반적인 인터넷 프로토콜에서 사용되는 상태코드는 대체로 큰 차이가 없이 비슷한데...
2xx는 성공, 5xx는 에러, 이런 식입니다. 그런데 이 AUTH LOGIN에서는 상태코드가 좀 다르게 돌아
옵니다. (상태코드가 머였는지 정확하게 기억이 안나네요.)

당연한 것이지만, 서버에서 로그인 인증을 세팅해놓은 경우에는 AUTH LOGIN 인증을 하지 않고는
메일을 주고받을 수가 없습니다. 물론 다른 SMTP 서버에서 들어오는 메일은 일단 받지요.
하지만 FROM: 사용자로 쓸 수가 없습니다.

그럼...


샘이 님이 쓰신 글 :
: 헐.. 너무 막연히 물어봐서 죄송합니다.
:
: SMTP라는 서버와 메일을 보내주는 클라이언트가 있지요?
:
: 예를 들어 smtp.orgio.net이라는 SMTP 서버와
:
: Outlook Express라는 클라이언트가 그 예입니다.
:
: 이때 SMTP와 클라이언트는 접속해서 무조건 메일을
:
: 전송하지 않을 것이라 사료됩니다.
:
: 즉, 어떠한 인증과정 시나리오를 거쳐 메일을 보내리라
:
: 생각합니다.
:
: 예) S:SMTP, C:Mail Client
: 연결해서...
: S:220 연결 잘했다 짜샤~
:
: C:HELO
: S:220 그랴, 잘 있다.
:
: C:AUTH ID:purewell
: S:220 응 너로구나!
:
: C:DATA
: S:220 응. 메일 보내. 단, 메일의 끝은 점 하나로 끝나는 거 알지?
:
: C:메일 헤더
: 메일 본문
: 어찌고 저찌고
: 이렇쿵 저러쿵
: .
: S:220 응 자~알 받았다.
:
: C:QUIT
: S:220 알았다. 잘가라~! 담에 또 보쥐...
:
: ㅡ ㅡ;; 이러한 일련의 시나리오와 명령어 규칙 등
: 말입니다. SMTP관련 RFC문서를 보니까 일단
: 영어라서 보기 까탈스럽고 실제적인 예제가 나오지
: 않아서리...
:
: Indy에 보면 SMTP로 편지 보내는 것을 구현해놨던데
: 문제는 Pascal이라서 보다보면 머리가 어질어질...
:
: ^.^)a SMTP로 메일보내는 예제 소스라도
: 구할 수 없을까요?
:
:               Always wish be pure well...

+ -

관련 글 리스트
14967 [질문] SMTP 시나리오라는 것이... 샘이 899 2002/01/24
14975     Re:SMTP 인증... 박지훈.임프 1930 2002/01/25
14969     Re: 일반적인 SMTP 진행과정입니다. 패패루 1315 2002/01/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.