PHP mail() 함수를 통해 메일발송이 안될때의 해결방법
페이지 정보
본문
웹메일에서 보낸메일은 잘 가는데 PHP mail() 함수를 통해 발송시 문제가 된다면 발송프로그램이나 발송옵션에 따른 문제일 확률이 높습니다.
발송후 아래처럼 발송로그를 확인해보시면 '보낸사람주소'가 엉뚱하게 붙어나갈 것 입니다.
Nmail PHP) tail -n30 /var/MailRoot/logs/smail-200609060000
sendmail) tail -n30 /var/log/maillog
예를 들어 'xxxx@xxxxx.com' 처럼 붙어나간다면 대형포털이나 스팸차단솔루션을 사용중인 메일서버에서 발송서버의 IP와 도메인(localhost.localdomain)이 일치하지 않아 차단될 가능성이 높습니다.
이 문제가 아니더라도 '보낸사람주소(회신주소)'가 제대로 지정되지 않을 경우 문제가 발생하는 원인에 대한 정확한 에러메세지를 메일로 받아볼 수 없는 문제가 있습니다.
따라서 아래 2가지 중 한가지 방법을 선택해서 해결하시면 됩니다.
1. 보낸주소가 지정되지 않았을 때 기본 도메인을 지정하는 방법(권장)
: ‘보낸사람주소(회신주소)’가 xxxx@xxxxx.com 나 xxxx@xxxxx.com 처럼 올바른 도메인으로 사용됩니다.
Nmail PHP 사용시)
# vi /var/MailRoot/bin/sendmail.sh 2줄 아래 내용 추가
export DEFAULT_DOMAIN=domain.com
sendmail 사용시)
서버의 hostname 을 올바른 도메인으로 변경하면 됩니다.
2. ‘보낸사람주소(회신주소)’를 PHP소스나 php.ini 에서 강제 지정하는 방법
예제 소스)
$header = "Return-Path: <{$from_mail}>\n";
$header .= "From: $from_name <{$from_mail}>\n";
mail($to_mail, $subject, $body, $header);
A) 메일발송 소스를 수정하는 방법.
$header = "Return-Path: <{$from_mail}>\n";
$header .= "From: {$from_name} <{$from_mail}>\n";
$header .= "Content-Type: text/html; charset=euc-kr\n";
mail($to_mail, $subject, $body, $header);
=>
mail($to_mail, $subject, $body, $header, '-f'.$from_mail);
B) php.ini 를 수정하는 방법.(Linux)
; PHP mail() 함수에서 발송하는 메일에는 모두 적용됨. 수정후 아파치 재시작해야함.
;sendmail_path =
=>
sendmail_path = "/usr/sbin/sendmail -t -i xxxx@xxxxx.com"
C) php.ini 를 수정하는 방법.(Windows)
; 모든 메일발송자가 고정적으로 지정됨. 수정후 아파치 재시작해야함.
;sendmail_from = xxxx@xxxxx.com
=>
sendmail_from = xxxx@xxxxx.com
참고사이트
http://www.passkorea.net/Board/ViewDoc.aspx?brdNo=11&docNo=28977
http://www.saybox.co.kr/bbs/board.php?bo_table=board02&wr_id=129
http://sung.world.co.kr/?document_srl=631
발송후 아래처럼 발송로그를 확인해보시면 '보낸사람주소'가 엉뚱하게 붙어나갈 것 입니다.
Nmail PHP) tail -n30 /var/MailRoot/logs/smail-200609060000
sendmail) tail -n30 /var/log/maillog
예를 들어 'xxxx@xxxxx.com' 처럼 붙어나간다면 대형포털이나 스팸차단솔루션을 사용중인 메일서버에서 발송서버의 IP와 도메인(localhost.localdomain)이 일치하지 않아 차단될 가능성이 높습니다.
이 문제가 아니더라도 '보낸사람주소(회신주소)'가 제대로 지정되지 않을 경우 문제가 발생하는 원인에 대한 정확한 에러메세지를 메일로 받아볼 수 없는 문제가 있습니다.
따라서 아래 2가지 중 한가지 방법을 선택해서 해결하시면 됩니다.
1. 보낸주소가 지정되지 않았을 때 기본 도메인을 지정하는 방법(권장)
: ‘보낸사람주소(회신주소)’가 xxxx@xxxxx.com 나 xxxx@xxxxx.com 처럼 올바른 도메인으로 사용됩니다.
Nmail PHP 사용시)
# vi /var/MailRoot/bin/sendmail.sh 2줄 아래 내용 추가
export DEFAULT_DOMAIN=domain.com
sendmail 사용시)
서버의 hostname 을 올바른 도메인으로 변경하면 됩니다.
2. ‘보낸사람주소(회신주소)’를 PHP소스나 php.ini 에서 강제 지정하는 방법
예제 소스)
$header = "Return-Path: <{$from_mail}>\n";
$header .= "From: $from_name <{$from_mail}>\n";
mail($to_mail, $subject, $body, $header);
A) 메일발송 소스를 수정하는 방법.
$header = "Return-Path: <{$from_mail}>\n";
$header .= "From: {$from_name} <{$from_mail}>\n";
$header .= "Content-Type: text/html; charset=euc-kr\n";
mail($to_mail, $subject, $body, $header);
=>
mail($to_mail, $subject, $body, $header, '-f'.$from_mail);
B) php.ini 를 수정하는 방법.(Linux)
; PHP mail() 함수에서 발송하는 메일에는 모두 적용됨. 수정후 아파치 재시작해야함.
;sendmail_path =
=>
sendmail_path = "/usr/sbin/sendmail -t -i xxxx@xxxxx.com"
C) php.ini 를 수정하는 방법.(Windows)
; 모든 메일발송자가 고정적으로 지정됨. 수정후 아파치 재시작해야함.
;sendmail_from = xxxx@xxxxx.com
=>
sendmail_from = xxxx@xxxxx.com
참고사이트
http://www.passkorea.net/Board/ViewDoc.aspx?brdNo=11&docNo=28977
http://www.saybox.co.kr/bbs/board.php?bo_table=board02&wr_id=129
http://sung.world.co.kr/?document_srl=631
댓글목록
등록된 댓글이 없습니다.