웹마스터 팁

안녕하세요. Windows 2003에서 zbxe를 사용하기 시작한지 얼마 안되는 사용자입니다.

버그 신고에도 어떤 분이 윈도우즈 서버에서 메일발송에 관련된 문제를 Report해 주신 것을 보았는데, 저도 똑같은 경험이 있습니다.
확인을 해보니 윈도우즈 가상 SMTP의 경우 mail 함수의 첫번째 인자를 "아무개 <nobody@his.com>"의 형태로 입력하면 잘못된 메일주소라고 하여 메일이 발송되지 않더군요.

따라서 mail() 함수의 첫번째 인자를 nobody@his.com의 형태로 만들어주어야 하는데, 이 경우 수신자의 이름을 "아무개"라고 표시해주기 위해서는 헤더 부분에 "To: 아무개 <nobody@his.com>"의 형태로 넣어주면 되는군요.

단, 가상 SMTP 서버에서 PHP가 돌아가는 서버에 대해 릴레이가 가능하도록 설정되어 있어야 합니다. 리눅스나 유닉스의 경우 직접 sendmail 라이브러리를 이용해 메일을 발송하는 반면 윈도우즈에서는 PHP에서 SMTP 서버로 릴레이 하는 방식을 사용하기 때문인 것같습니다.


저는 단일서버에 가상 SMTP와 Apache를 운영하기 때문에 가상 SMTP 서버에서는 127.0.0.1에 대한 릴레이를 허용하고, 
다음과 같이 /classes/mail/Mail.class.php 파일의 send() 함수 중 두 곳을 수정하여 메일발송기능 사용하고 있습니다.

현재 수정하여 사용하고 있는 send() 함수 부분은 다음과 같습니다.

1. 헤더 설정부분

            $headers = sprintf(
                "From: %s".$eol.
                "To: %s".$eol. // <= 추가한 부분
                "MIME-Version: 1.0".$eol.
                "Content-Type: multipart/alternative;".$eol."tboundary="%s"".$eol.$eol.
                "",
                $this->getSender(),
                $this->getReceiptor(),  // <= 추가한 부분
                $boundary
            );

2. 메일 발송 부분

//            return mail($this->getReceiptor(), $this->getTitle(), $body, $headers); 
^= 기존코드 return mail($this->receiptor_email, $this->getTitle(), $body, $headers);
^= 수정한 부분 : mail() 함수의 첫번째 인자


저 같이 Windows에서 사용하시는 분들에게 도움이 되셨으면 하구요. 며칠 뒤에 나올 1.0.7에 반영이 되었으면 합니다.