2009/01/13

IIS SMTP - PHP 메일 전송을 위한 설정

이것도 팁이랄게 될만한 것인지는 상당 의문 스럽지만,....
매우 어려웠던 문제도,. 어떻게 보면 매우 사소한것으로 인해서 해결이 될수 있다는 가정하에...^^

보통 Asp 환경에서는,.  CDO 컴포넌트를 이용하기 때문에 특별히 문제가 발생하는 상황은 많치 않습니다. CDO 컴포넌트는,. Queue 폴더에 Mail 파일 쓰기를 하고,. 그것을 SMTP 를 읽어서 발송을 하게 되는데요.

PHP 에서는, IIS SMTP 설치시 같이 설치되는 이러한 컴포넌트를 이용하지 않고 내장 소켓을 이용하게 되어 있습니다.

[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

위와 같이 php.ini 에서의 설정은 SMTP 와 smtp_port 에 지정된 서버의 소켓으로 접속하여 smtp 명령어를 이용해서 해당 서버로 메일을 밀어 넣습니다.

그런데,. 위와 같은 기본 설정값은,. 지정된 서버가 Relay 가 허용이 되어야 가능 합니다.  그렇지 않고서는 인증을 거쳐야 하는데요. 보통 PHP 작동이 웹서버 기반하에서 작동하므로 대부분 로컬에서 SMTP 서비스가 작동합니다.

그래서,. 인증없이 메일 전송을 할려면 "익명 엑세스" 가능해야 합니다. 물론 SMTP 설치후 기본값입니다만,. 방화벽이 없는 서버라면 스팸릴 레이나 무차별 스캔을 당하기 쉽상이기 때문에 Disable 해 놓은 경우도 있기 때문에 한번 체크해 보면 좋을것 입니다.



다음으로,. 로컬에서 메일을 보낸다 하더라도 PHP 가 작동하는 것은 소켓을 통해서,. 즉 원격지에서 SMTP 25 번 포트로 Relay 를 시도하는 것과 같은 방식으로 접근을 하는 것이고, 그것은 인증되지 않은 "익명 엑세스" 이므로,.




기본값으로 설정되어 있다면,. 인증이 되어야만 하므로 Relay 가능한 허용 목록에 PHP 가 작동하는 웹서버의 IP 주소를 넣어 주어야 합니다. 위의 기본적인 설정이 되었다면,.

<?php
$to      = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>

위 PHP 코드는 매우 잘 작동할것 입니다. 다만,. 실제 수신지 메일 사서함에 메일이 도착하는 여부는 SMTP 가 담당하므로,. Queue 폴더에 잘 쌓였다면 그 다음부터는 PHP 와 상관이 없습니다.



댓글 없음:

댓글 쓰기

가장 많이 본 글