테스트 메일을 보낼 주소(*)
발송 결과 [성공]
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-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

[실패]
sendmail 을 이용해서 발송하던 프로그램에서 메일발송이 안됩니다.


"; echo "[해결방법]

※ 서버 환경에 따라 해결방법이 다를 수 있으니 단계별로 하나씩 점검해보시기 바랍니다.
    모든 과정은 서버에 SSH/Telnet 으로 접속하셔서 root 권한을 얻으신 후 점검하셔야 합니다.

1. 퍼미션 조정 스크립트를 실행한 후 [다시보내기]를 눌러보십시오.
"; echo "   cd ".dirname($G_SYS['PAGE_ROOT'])."/tools
"; echo "   ./perm_change.sh
"; ?>
2. 퍼미션 조정 스크립트를 아래처럼 수정해서 실행한 후 [다시보내기]를 눌러보십시오.
  cd /tools
  vi perm_change.sh
      # 맨 마지막 라인에 아래 명령 추가
      chmod 755 /var/MailRoot/bin/sendmail
      chmod -R 777 /var/MailRoot/spool/
  ./perm_change.sh

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 을 사용한 메일발송에는 지장이 없습니다.

다시보내기 취소