메일 수신이 안되는 이유는 여러가지가 있겠지만 대표적인 몇가지만 언급해 보겠습니다.
1. 전체 사용자 메일 수신 불가
메일 수신 데몬이 동작 확인
메일 수신이 안된다고 판단될 경우 가장 기본적으로 체크해야 할 사항입니다. 이 경우를 체크하는 방법은 메일서버에 command로 접속한 후 프로세스 및 포트 접속상태를 확인해 보면 알 수 있습니다. 프로세스가 떠 있는지 확인하는 방법은 그냥 ps명령어로 확인할 수 있고, 데몬은 떠 있어도 서비스가 동작하지 않을 수 있으므로 telnet 127.0.0.1 25로 접속해서 직접 메일을 보내 보는 방법이 가장 확실한 방법입니다.
% telnet localhost 25 (25번 포트가 수신 메일서버용 SMTP 포트)
Trying 127.0.0.10.1...
Connected to localhost.
Escape character is '^]'^]'.
220 zerg ESMTP CrediMail smtpserver-2.3
mail from: mobigen@domain.com">mobigen@domain.com <---------- 발송자 지정
250 mobigen@domain.com">mobigen@domain.com... Sender ok
rcpt to: test@domain.com">test@domain.com <---------- 수신자 지정
250 50 test@domain.com">test@domain.com... Recipient ok
data <---------- 메일 데이터 지정
354 Enter mail, end with "." on a line by itsetself
Subject: test <---------- 헤더
<---------- 공백라인
test <---------- 본문
. <---------- 반드시 '.' 으로 끝나야 함.
250 KAA12609 Message acceptepted for delivery
quit <---------- 끝내기
221 zerg closing connection
DNS에 MX레코드가 등록 확인
뭐 이런 경우는 서비스 상에서는 거의 없겠지만 메일 시스템의 설치를 막 끝내고 곧 서비스를 할려고 할때 미처 체크하지 못하면 발생할 수 도 있을것입니다. 이 경우의 증상은 내부간의 메일 송수신에는 이상이 없으나 다음, 네이버 같은 외부에서 발송된 메일을 수신할려고 하면 수신되지 않습니다. 단순히 메일서버가 도메인과 같은 서버일 경우, 예를 들어 A레코드 룩업(nslookup 도메인)을 했을때 나타나는 서버가 메일 서버일 경우는 메일을 수신할 수 도 있겠지만, DNS의 MX레코드에 메일서버를 등록해야 정상적인 메일 수신을 할 수 있습니다. MX레코드가 등록되어 있는지 확인하는 방법은 command에서 아래와 같이 입력하면 등록된 정보가 출력됩니다.
nslookup -query=MX domain.com
주의)
메일 수신서버는 외부에서 메일이 들어올 때 외부에서 사용되는 경우이므로, 이 도메인내부가 아니라, 외부 도메인에서 이 도메인으로 nslookup -query=MX를 해봐서 제대로 값이 나오는지 알아 봐야 합니다.
네트웍에서 메일수신 포트(25)가 막혀있는지 확인
정상적인 메일 서비스를 할려면 기본적으로 메일에서 사용하는 포트가 외부에 열려있어야 합니다.
25 : 기본적인 메일 수발신
80 : 웹 서비스
110 : POP3서비스
143 : IMAP서비스
위 포트들 중 나머지는 서비스 여부에 따라 막을수도 있을거 같지만 25번은 반드시 열어야 메일서비스를 할 수 있겠습니다. 포트가 막혔는지 여부를 알 수 있는 방법은 telnet의 해당 포트로 접속을 해 보면 금방 알수 있습니다.
DB확인
메일을 수신시에 사용자의 상태, 저장되어 있는 서버 및 MBOX경로를 확인하기 위해 DB를 조회합니다. 물론 이때 정보를 조회할 수 가 없으면 메일을 수신할 수 없습니다. 조회방법은 사용하는 DBMS에 직접 접속을 시도해 보고, 접속이 되면 SELECT로 조회하는 방법이 있겠지만, CredMail의 경우는 db_cache라는 별도의 캐슁데몬을 사용하고 있습니다. 이 캐슁데몬을 이용해서 사용자를 조회할 수 있습니다. 캐슁데몬을 이용한 조회 방법은 command에서 아래와 같이 입력합니다.
% telnet 127.0.0.1 38900
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
+OK WELCOME CrediMail (127.0.0.1) db_cache-2.2
FLUSH mobigen <----- 캐슁을 하고 있으므로 정보를 캐쉬에서 삭제 명령어
+OK FLUSH [mobigen@zerg.mobigen.com] OK
GET mobigen <----- 사용자 정보를 DB에서 읽어오는 명령어
+OK
DEPT_ID: 1
DOMAIN: zerg.mobigen.com
ID: mobigen@zerg.mobigen.com">mobigen@zerg.mobigen.com
.
.
.
MAILHOST: localhost
MAILQUOTA: 60
STAT: 1 <----- 여기가 1이면 정상임
USERID: mobigen
USE_YN: Y
db: multi
.
quit <----- 종료 명령어
+QUIT
Connection to 0 closed by foreign host.
2. 특정 사용자 혹은 특정 메일 수신 불가
이런 경우가 대략난감입니다. 눈에 잘 띄는것이 아니기때문에 원인을 파악하기도 쉽지 않습니다. 하지만, 이런경우의 대부분은 사용자의 현재상태 및 환경설정과 관련된 경우가 많습니다.
스팸차단 확인
메일서버 앞단에 스팸서버가 존재할 경우 특정메일에 한해 스팸으로 차단되어 메일 서버로 넘어오지 않은 경우가 있습니다. 이런 경우 스팸차단 서버를 확인해 보면 차단 여부를 확인할 수 있습니다. 스팸차단 서버에서 정상적으로 메일 서버로 넘겼다면 메일 서버의 로그를 확인해서 메일서버가 해당 메일을 수신했는지 확인할 필요가 있겠습니다.
수신거부 확인
이 경우가 원인을 알고나면 굉장히 허무한 경우입니다. 웹 인터페이스에서 발송자를 클릭한번으로 수신거부자로 등록할 수 있기 때문에 사용자가 간혹 인식하지 못한체 정상적인 발송자를 수신거부자로 등록할 수도 있습니다. 이럴 경우 해당 발송자가 보낸 메일은 계속 수신을 하지 못하는 현상이 발생합니다.
자동분류 확인
사용자가 편리하게 메일을 사용하기 위해 메일수신시 원하는 편지함으로 자동으로 들어가도록 자동분류 설정을 해놓고 쓰는 경우가 많이 있습니다. 이때 분류 설정을 너무 광범위하게 해 놓으면 분류대상 메일 이외의 다른메일도 분류가 되버려서 특정 편지함으로 들어가 사용자가 수신을 하지 못했다는 착오를 일으킬 수 있습니다.
휴면, 정지상태 및 quota over확인
사용자가 휴면, 정지, INBOX FULL 경우에도 메일을 수신하지 못합니다. 하지만, 이 경우는 발송자에게 리턴메일이 가기 때문에 발송자가 수신자의 상태에 대해서 인식할 수 있으므로 수신자의 상태만 점검하면 되겠습니다.
로그확인
메일서버 수신데몬의 로그를 확인해 보면 해당 메일이 어떤 이유에서 수신하지 못했는지에 대해 기록되어 있습니다.