관리 메뉴

I LOVE EJ

win 2003 + smtp + php 메일 보내기 본문

Os & Server/2003 Server

win 2003 + smtp + php 메일 보내기

BeOne 2007. 12. 21. 11:48

1. SMTP 설치

 

프로그램 추가/제거 에서 윈도우즈 구성요소 추가/제거에서 [전자 메일 서비스] 선택.
2003OS 씨디가 필요합니다.


2. 추가 설정사항

http://blog.naver.com/serverbin?Redirect=Log&logNo=20010054122


(1) smtp 릴레이 설정 127.0.0.1(localhost) 을 릴레이 설정을 합니다.

- 속성 > 일반> 아이피 주소항목 - 고급 >

할당되지않은 주소 모두   25 추가
***.***.***.***(서버아이피)  25 추가


- 속성>엑세스>릴레이제한>아래목록만 선택 후
단일컴퓨터 아이피에서 아래와 같이 추가

허가됨 127.0.0.1
허가됨 ***.***.***.***(서버아이피)


(2) smtp 디렉토리(mailroot) 의 보안설정에 Everyone 계정을 추가해 줍니다.


3. 서버 메일 발송관련 실험에 관한 사항

http://blog.naver.com/sj1g/80009663358


우선은 서버의 네트워크 설정의 DNS설정이 되어 있는 지확이해 보시길바랍니다.
이것이 설정이 되어 있지 않으면 메일이 전속이 될때 메일서버를 찾아가지를 못합니다.
이것이 설정이 되어 있다면 다음으로는 DNS서버에서 재대로 메일서버의 주소를 찾는 지를 확인하여야 합니다.

확인방법은

우선 식작=>실행=> cmd (명령프롬프트) 를 실행신킨후

nslookup
set type=mx
hanmail.net

위의 순서대로 하였을때
hanmail.net 의 메일서버들이 나열이 되어야 합니다.

나열이 되었다면
명령프롬프트를 하나를 더실행시킨후에
아까의 메일서버들중에 하나를 선택하여 다음과 같이 입력을 합니다.

telent mx1.hanmail.net 25

위의 문구는 메일이 통로인 25포트를 이용하여 나간다는 것입니다.
telnet mx1.hanmail.net 25 명령어를 실행시켰을때
ESMTP 가 뜨면 괜찮은 것임.

위와 같이 명령프롬포트에서 실행을 시키면 메일이 발송이 될것입니다.
이것이 된다음에도 않된다면

C:\Inetpub\mailroot\Queue
라는 폴더에 메일이 싸이는지를 확인해 보시기 바랍니다.
이곳은 메일이 발송이 되지 않았을경우 메일파일이 모이는 장소입니다.

이곳에 메일이 싸인다면

우선 SMTP 설정과
서비스중 DNS Client 등이 작동중인지 확인을 해보시기 바랍니다.


그레도 메일이 나아가지 않고
C:\Inetpub\mailroot\Queue
싸인다면
이벤트 뷰어를 의 시스템로그를 확인해 보시기 바랍니다.

이부분은 저도 잘 모르겠습니다.


그리고 확인할 부분 한곳 더 있습니다.

C:\Inetpub\mailroot\Badmail
php 의 mail() 함수를 사용할때 조금 달라집니다.
그 형식에 맞지 않을때..헤더값이 이상하다던가..(맞는 표현인지 ㅡㅡ;) 저 폴더에 쌓입니다.


4. php.ini 수정

 

smtp + mail() 사용시 에러가 발생해서 네이버등에서 검색해 보면,
저 파일을 수정하라는 글이 많습니다.
저는 안되던데.. 왜 그런지.. 모르겠습니다.

아래는 퍼온글입니다. 한번 시도해 보시는것도 좋을거 같네요.
------------------------------------------------------------------------
 http://blog.naver.com/ehomebuild?Redirect=Log&logNo=150016588097

윈 2000 기준으로 말씀드립니다.


1. WINNT 폴더안에 있는 PHP.INI 화일을 엽니다.
(요게 없으시면 PHP폴더에서 PHP.INI-DIST 화일을 복사해서
WINNT폴더안에 넣으시고 이름을 PHP.INI로 걍 바꾸면 됩니다)


2. PHP.INI화일 내용중에
"SMTP = LOCALHOST" 요 부분을 아래와 같이 수정합니다.

"SMTP = 메일서버가 설치된 곳의 도메인 또는 IP주소"


3. 글구 IIS 서버 재시동..

웹에서 찾아보면 공개 메일서버를 제공하는 곳이 제법 됩니다.
테스트하는 방법은 텔넷 25번 포트로 접속해보면 접속이 되는지 않되는지
알수있거든요...
그리고 위처럼 했는데도 또 "SERVER ERROR"가 나는 경우가 있거든요..
그건 릴레이가 안되서 그런거니가..그럴 경우에는 공개 메일 서버를 다시
지정해주셔야합니다.
------------------------------------------------------------------------


5. 제가 사용한 프로그램과 서버의 상황

<?
//php.ini 설정 안해도 됩니다. 아래 같이 하면...


//발송 준비 설정  
$mailto="test@test.com";
$mail_subject="***입니다. 회원님의 아이디와 비밀번호를 확인하세요.";
$additional_headers = "Return-path:test@test.com\nContent-Type:text/html;charset=EUC-KR\n";

// 발송할 메일의 내용으로 HTML코드로 작성된다.
$mail_contents = "
<HTML>
<HEAD>
<STYLE TYPE=\"TEXT/CSS\">
<!--
BODY, TD, TH {
font-size : 10pt;
line-height : 1.5;
}
//-->
</STYLE>
</HEAD>
<BODY>
<TABLE WIDTH=650 BORDER=1 CELLSPACING=1 CELLPADDING=5 ALIGN=CENTER BGCOLOR=red>
<TR>
<TD COLSPAN=2 ALIGN=CENTER><b> 회원님의 아이디와 비밀번호는 아래와 같습니다. </b></TD>
</TR>
<TR>
<TH BGCOLOR=red>아이디(ID)</TH>
<TD BGCOLOR=white><font color=red>***</font></TD>
</TR>
<TR>
<TH BGCOLOR=red>비밀번호(PassWord)</TH>
<TD BGCOLOR=white><font color=red>***</font></TD>
</TR>
</TABLE>
</BODY>
</HTML>";

$old_smtp = ini_set("SMTP", "127.0.0.1"); //강제적으로 smtp 설정 --> ISP 업체의 메일서버 입력하세요
$sendmail_set = ini_set("sendmail_from", "admin@test.com"); //강제적으로 php.ini -> smtp의 sendmail_from 설정

if(mail($mailto, $mail_subject, $mail_contents, $additional_headers)) {
 ini_set("SMTP", $old_smtp);
 ini_set("sendmail_from", $sendmail_set);
 echo "
  <script>
   window.alert(\"되나.\");
   history.go(-1);
  </script>";
}else{
 echo "stmp, sendmail 설정을 확인해세요.! 에러 입니다.";
}

?>


smtp 설정하고,

telent mx1.hanmail.net 25  이걸 테스트하면 잘 됩니다.
근데, 메일이 안가더라구요..


2003서버의 방화벽에 예외 탭에서 [smtp]를 추가해 주었습니다.


※ 참고사항
CDO.Message 와 CDONTS.NewMail asp  (
http://blog.naver.com/yuchigirl/30010627046)


두개의 차이점은 버전의 차이라고 생각하시면 됩니다.  cdonts 는 NT 에 제공된 메일 컴포넌트 이며 2000서버부터 CDO가 제공되었습니다. 물론 2000에서는 호환성 때문인지는 모르지만 cdonts도 같이 제공되었구요.  XP Pro / 2003 서버에서는 더이상 cdonts는 제공되지 않습니다.