여기서는 IIS MMC에 있는 "기본 SMTP 가상서버"로 메일을 발송하려고 하였으나 여러가지 이유로 인해서 메일 발송이 되지 않을 경우 살펴보아야 할 몇가지를 제시해 보려고 합니다.
Windows에서 기본적으로 제공하는 "기본 SMTP 가상서버"를 활용하여 메일을 발송하는 경우는 대부분 ASP 또는 ASP.NET 프로그램일 것이다.
자. 그럼 왜 발송이 안되는지 알아보기 전에 "기본 SMTP 가상서버"에 대해서 알아보자.
"기본 SMTP 가상서버"를 사용하기 위해서는 IIS 웹 서버를 설치하면서 SMTP를 함께 설치해 줘야한다.
default로 설치하면 mailroot 경로는 C:\inetpub\mailroot 로 셋팅되어져 있다.
SMTP를 통해 메일을 발송하게 되면 우선 Pickup 폴더에 발송할 메일이 들어오고 (SMTP를 중지시킨 상태에서 메일을 발송하는 프로그램을 실행시키면 Pickup 폴더에 발송할 메일이 들어 있는것을 확인할 수 있다.) 여기서 받는 사람의 메일서버로 발송하게 된다. 그런데 1차시도시 메일발송에 실패하게 되면 Queue 폴더에 메일이 쌓이게 되며 Queue 폴더에 있는 메일들은 "기본 SMTP 가상서버"의 배달 탭에 설정되어 있는 "다시 시도 간격"과 만료시간에 의해 처리된다.
여러가지 이유로 메일 발송에 실패했을 경우 보내는 사람 메일 주소로 배달하지 못한 이유를 발송하게 되는데 이 배달못함 보고서(NDR)를 보내는 사람 메일주소로 발송하지 못하였을 경우 Badmail 폴더에 쌓이게 된다. Badmail에 메시지가 많이 쌓이면 SMTP의 성능이 저하될 수 있으므로 주기적으로 Badmail 폴더의 파일들을 삭제해 주는 것이 좋다.
또한 메일 형식이 잘못된 경우에는 Drop 폴더에 메일이 쌓이게 된다.
정리해 보면 다음과 같다.
- Badmail : 받는사람에게 발송 실패 후 보내는 사람에게도 발송을 실패한 메세지가 보관되는 폴더
- Drop : 메일 형식이 잘못된 메세지가 보관되는 폴더
- Pickup : 처음 발송 시도될 메세지가 보관되는 폴더
- Queue : 1차 시도 실패시 다음 발송을 위해 대기중인 메세지가 보관되는 폴더
이제 메일이 발송되지 않았을 경우에 살펴보아야 할 것들을 살펴보자.
1. 프로그램 에러는 없는지 확인해야 한다.
뭐 프로그램에 에러가 있을 경우 에러메세지를 뿌려주니 이미 이 부분은 해결하고 이 글을 보게 되겠죠? ^^
2. 받는사람의 메일주소가 올바른지 확인한다.
이런경우 Drop 폴더에 메세지가 있을 확률이 많다.
3. "기본 SMTP 가상서버" 가 제대로 작동하고 있는지 확인한다.
우선 "기본 SMTP 가상서버" 가 중지되어 있지 않은지 확인하고 SMTP는 25번 포트를 사용하므로 25번 포트가
Listening 상태인지 확인해야 한다. Netstat -na 명령어로 25번 포트의 상태를 확인할 수 있고
Telnet localhost 25 명령을 통해 수동으로 메일을 발송해 봄으로써 정상작동 여부를 확인 할 수 있다.
명령 프롬프트에서 다음과 같은 순서로 수동메일을 발송할 수 있다.
Telnet localhost 25 (Enter)
helo (Enter)
mail from:email@domain.com (Enter) <= 정상적인 메일 주소를 입력해야 합니다.
rcpt to:youremail@yourdomain.com (Enter) <= 받을 사람의 정상적인메일 주소를 입력해야 합니다.
data (Enter)
subject:Test Mail (Enter)(Enter) <= 메일 제목 입력 (엔터를 2번)
테스트내용입니다. <= 여기서 부터 내용을 입력합니다.
두번째줄입니다.
. (Enter) <= 내용을 다 입력했으면 마침표(.)를 입력 후 엔터
quit (Enter)
Telnet localhost 25 (Enter)
helo (Enter)
mail from:email@domain.com (Enter) <= 정상적인 메일 주소를 입력해야 합니다.
rcpt to:youremail@yourdomain.com (Enter) <= 받을 사람의 정상적인메일 주소를 입력해야 합니다.
data (Enter)
subject:Test Mail (Enter)(Enter) <= 메일 제목 입력 (엔터를 2번)
테스트내용입니다. <= 여기서 부터 내용을 입력합니다.
두번째줄입니다.
. (Enter) <= 내용을 다 입력했으면 마침표(.)를 입력 후 엔터
quit (Enter)
혹시 rcpt to입력 후 "500 5.7.1 Unable to relay for youremail@yourdomain.com" 에러가 발생한다면
"기본 SMTP 가상서버"의 속성에서 액세스 탭의 릴레이 제한을 확인해 보아야 한다.
수동발송에 대한 더 자세한 내용은 http://support.microsoft.com/default.aspx?scid=kb;ko;286421 를 참고하자.
4. DNS가 올바로 셋팅 되어 있는지 확인한다.
서버에 설정된 DNS가 잘못되어 받는사람의 메일서버를 찾을 수 없어서 메일발송에 실패하는 경우도 있다.
혹시 서버에 DNS서버가 설치되어 있다면 중지시키거나 제거해야만 한다.
그리고 외부에 공개되지 않은 내부 DNS로 잡혀져 있는 경우도 있을 수 있다.
(외부 도메인에 대한 IP를 알수 없어 발송실패함)
DNS를 간단하게 확인 할 수 있는 방법은 명령프롬프트에서 ping 명령어로 확인해 볼 수있다.
5. mailroot 폴더의 권한 설정을 확인한다.
mailroot 폴더의 권한설정이 변경되면서 메일이 발송되지 않는 경우도 있다. Windows 2000에서는 기본적으로 시스템
드라이브(대부분 C)에 Everyone이 모든 권한을 가지고 있다. 이 취약한 권한을 수정하기 위해 시스템 드라이브의
권한을 변경하게 되면 메일이 발송되지 않는 경우도 생긴다. 이럴경우 mailroot 폴더에 대해서는 Everyone의 접근
권한을 적절히 조절하여 부여해 준다.
6. 방화벽 셋팅을 확인한다.
3번과 연관된 내용으로 방화벽에서 서버에서 발송되는 25번 포트의 패킷을 차단하고 있는지 확인한다.
7. Relay설정을 확인한다.
"기본 SMTP 가상서버" 의 Relay설정이 열려져 있다면 스팸메일의 Relay서버로 악용될 소지가 많다.
그리고 이로 인해서 서버의 성능이 저하되는 원인이 되기도 하며 악의적인 스팸메일을 발송하느라고 정작 발송하고자
하는 메일은 계속 뒤로 밀리면서 발송이 되지 않는 경우가 발생할 수도 있다.
그러므로 "기본 SMTP 가상서버"의 속성에서 액세스 탭의 릴레이 제한에서 아래 그림과 같이 "아래 목록만"을 선택하고
localhost의 IP인 127.0.0.1을 등록하거나 해당서버의 IP만 등록하여 다른 서버에서는 접근하지 못하도록 차단한다.
8. 포탈 메일에서만 받지 못하는 경우
일반 회사메일이나 다른 메일들을 잘 발송되고 있는데 유독 포탈 사이트들에서만 받지 못하는 경우가 많다.
각 포탈 사이트들에서는 각기 다른 스팸메일 정책을 가지고 있고 점점 강화되고 있는 추세다.
대부분의 포탈에서는 한 IP에서 대랑의 메일이 발송될 경우 해당 IP를 스팸메일 발송 서버로 등록하여 자동 차단해
버린다. 이 문제를 해결하기 위해서는 "화이트 도메인 등록제"를 활용하면 된다.
한국정보보보진흥원에서 운영하고 있는 실시간 스팸차단리스트(https://www.kisarbl.or.kr/) 사이트에 메일을 발송할
도메인을 화이트도메인으로 등록하면 된다. 이미 스팸 IP로 차단되어 있다면 해제신청도 할 수 있다.
화이트도메인으로 등록되면 참여한 포털사이트(https://www.kisarbl.or.kr/whiteip/whiteip_tutorial.jsp)에는 특별한
조치 없이도 메일을 정상적으로 발송 할 수 있다.
9. 그래도 발송이 안될경우
SMTP 로그와 이벤트 뷰어를 확인해보면 메일이 발송되지 못하는 이유가 로그에 남게 된다.
이렇한 로그를 보고 원인을 찾아 해결해야 한다.