발송 결과 |
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')
{
if ($rs)
{
echo "[성공] PHP mail() 함수를 이용해서 발송하던 프로그램에서도 정상적인 메일발송이 가능합니다. ";
} else
{
echo "[실패] PHP mail() 함수를 이용해서 발송하던 프로그램에서 메일발송이 안됩니다.
";
echo "화면 상단에 'Warning'문구가 나온다면 발송 실패의 원인이 함께 나올 것입니다. ";
echo "발송 실패의 원인은 상단메뉴의 [리턴메일 분석]을 통해 확인하시면 됩니다. ";
} // if()
} else
{
if ($rs)
{
echo "[성공] sendmail 을 이용해서 발송하던 프로그램에서도 정상적인 메일발송이 가능합니다. ";
?>
※ PHP mail() 함수 관련 안내
웹메일에서 보낸메일은 잘 가는데 PHP mail() 함수를 통해 발송시 문제가 된다면
다음처럼 발송프로그램이나 발송옵션에 따른 문제일 확률이 높습니다.
발송후 아래처럼 발송로그를 확인해보시면 '보낸사람주소'가 엉뚱하게 붙어나갈 것 입니다.
tail -n30 /var/MailRoot/logs/smail-= date('Ymd') ?>0000
예를 들어 'root@localhost.localdomain' 처럼 붙어나간다면 대형포털이나 스팸차단솔루션을 사용중인 메일서버에서
발송서버의 IP와 도메인(localhost.localdomain)이 일치하지 않아 차단될 가능성이 높습니다.
이 문제가 아니더라도 '보낸사람주소(회신주소)'가 제대로 지정되지 않을 경우
문제가 발생하는 원인에 대한 정확한 에러메세지를 메일로 받아볼 수 없는 문제가 있습니다.
따라서 아래 내용을 참고하셔서 서버설정이나 메일발송프로그램을 수정하셔야 합니다.
-. 메일을 보낼때 보낸사람주소를 따로 지정해도 'root@localhost.localdomain' 등의 엉뚱한 주소로 붙어나가는 경우의 해결방법.
sample source)
$header = "Return-Path: <$mail_from>\n";
$header .= "From: $fname <$mail_from>\n";
mail($to, $subject, $body, $header);
A) 메일발송 소스를 수정하는 방법.
$header = "Return-Path: <$mail_from>\n";
$header .= "From: $fname <$mail_from>\n";
mail($to, $subject, $body, $header);
=>
mail($to, $subject, $body, $header, '-f'.$mail_from);
B) php.ini 를 수정하는 방법.(Linux)
; PHP mail() 함수에서 발송하는 메일에는 모두 적용됨. 수정후 아파치 재시작해야함.
;sendmail_path =
=>
sendmail_path = "/usr/sbin/sendmail -t -i -fpostmaster@domain.com"
C) php.ini 를 수정하는 방법.(Windows)
; 모든 메일발송자가 고정적으로 지정됨. 수정후 아파치 재시작해야함.
;sendmail_from = me@example.com
=>
sendmail_from = postmaster@domain.com
} else
{
echo "[실패] sendmail 을 이용해서 발송하던 프로그램에서 메일발송이 안됩니다.
";
echo "[해결방법]
※ 서버 환경에 따라 해결방법이 다를 수 있으니 단계별로 하나씩 점검해보시기 바랍니다.
모든 과정은 서버에 SSH/Telnet 으로 접속하셔서 root 권한을 얻으신 후 점검하셔야 합니다.
1. 퍼미션 조정 스크립트를 실행한 후 [다시보내기]를 눌러보십시오. ";
echo " cd ".dirname($G_SYS['PAGE_ROOT'])."/tools ";
echo " ./perm_change.sh ";
?>
2. 퍼미션 조정 스크립트를 아래처럼 수정해서 실행한 후 [다시보내기]를 눌러보십시오.
cd = dirname($G_SYS['PAGE_ROOT']) ?>/tools
vi perm_change.sh
# 맨 마지막 라인에 아래 명령 추가
chmod 755 /var/MailRoot/bin/sendmail
chmod -R 777 /var/MailRoot/spool/
./perm_change.sh
echo "3. 다음 필요한 파일들이 존재하는지 실행시 에러가 나진 않는지 테스트해보시기 바랍니다. ";
echo " ";
echo (file_exists('/usr/sbin/sendmail')) ? "[파일존재함]" : "[Error]";
echo "sendmail wrapper link : /usr/sbin/sendmail ";
echo " ";
echo (file_exists('/var/MailRoot/bin/sendmail.sh')) ? "[파일존재함]" : "[Error]";
echo "sendmail wrapper file : /var/MailRoot/bin/sendmail.sh ";
echo " ";
echo (file_exists('/var/MailRoot/bin/sendmail')) ? "[파일존재함]" : "[Error]";
echo "sendmail wrapper file2 : /var/MailRoot/bin/sendmail ";
?>
4. 모두 실패했다면 아래처럼 직접 퍼미션을 설정해서 결과를 확인해보시기 바랍니다.
chmod +sx /var/MailRoot/bin/sendmail
chmod +sx /var/MailRoot/bin/sendmail.sh
chmod +x /var/MailRoot/
chmod +x /var/MailRoot/bin/
ls -l /usr/sbin/sendmail
lrwxrwxrwx 1 root root 29 10월 23 13:33 /usr/sbin/sendmail -> /var/MailRoot/bin/sendmail.sh
ls -l /var/MailRoot/bin/sendmail
-rwsr-sr-x 1 nmail2 root 13092 10월 23 15:54 /var/MailRoot/bin/sendmail
ls -l /var/MailRoot/bin/sendmail.sh
-rwsr-sr-x 1 nmail2 root 207 8월 28 11:12 /var/MailRoot/bin/sendmail.sh
5. 만약 위 모든 과정이 실패했다면 기존에 설치된 sendmail 을 이용해 발송하도록 변경할 수 있습니다.
이 방법은 PHP mail()함수에서만 sendmail 을 사용하도록 sendmail wrapper 의 링크를 복원하는 방법입니다.
# sendmail wrapper 복원
# 주의) /usr/sbin/sendmail.backupByNmail 파일이 존재할때만 복원할 수 있습니다.
ls -l /usr/sbin/sendmail*
/usr/sbin/sendmail -> /var/MailRoot/bin/sendmail.sh
/usr/sbin/sendmail.backupByNmail -> /etc/alternatives/mta
rm /usr/sbin/sendmail
mv /usr/sbin/sendmail.backupByNmail /usr/sbin/sendmail
주의) sendmail 을 '시작'하시면 저희 메일엔진과 충돌이 발생하기 때문에 주의하셔야 합니다.
sendmail 을 시작하지 않더라도 /usr/sbin/sendmail 을 사용한 메일발송에는 지장이 없습니다.
} // if()
} // if()
?>
|