RadarURL
웹 프로그래밍

제로보드에서 WINDOWS 군에서 메일링 서비를 원할때

by JaeSoo posted Jan 13, 2006
?

Shortcut

PrevPrev Article

NextNext Article

ESCClose

Larger Font Smaller Font Up Down Go comment Print
WINDOWS 군에서 메일링 서비를 원할때.....

1. 먼저 SMTP를 설치 해야 합니다.
시작 -> 제어판 -> 프로그램 추가/제거 -> Windows 구성요소 추가/제거 -> 인터넷 정보 서비스(IIS)를 찾아 선택합니다.
-> 우측하단 쯤 [자세히] 버튼 클릭 -> SMTP Service 선택 -> 확인 (설치시 windows 설치 cd 가 있어야 합니다.)


2. SMTP 설정하기
시작 -> 제어판 -> 관리도구 -> 인터넷 관리 서비스 -> 기본 SMTP 가상서버 선택 후 마우스 오른쪽 버튼 -> 속성 선택
[일반]에서의 설정 : 할당되지 않은 주소 모두
[엑세스]에서의 설정 : 연결제어 -> 연결버큰 클릭 -> 허가됨 127.0.0.1
[엑세스]에서의 설정 : 릴레이제한 -> 릴레이 클릭 -> 허가됨 127.0.0.1
나머지 탭은 설정해도되고 안해도 되고....
설정이 모두 끝났으면 IIS서버 중지 후 다시 실행


3. windows디렉의 php.ini에서 smtp = 127.0.0.1으로 바꿉니다.


4. 제로보드에 있는 admin_sendmail_ok.php를 메모장등으로 엽니다.
모두 선택한 후 다음의 내용으로 덮어 씁니다.


<?

        include "lib.php";
        $connect=dbConn();

        $member=member_info();
        if(!$member[no]) Error("로그인후 사용하여주십시요",".javascriptwindow.close();");
        if($member[is_admin]>3) Error("관리자페이지를 사용할수 있는 권한이 없습니다",".javascriptwindow.close();");

        if(isblank($from)) Error("보내는 이의 mail을 적어주십시요",".javascriptwindow.close();");
        if(isblank($name)) Error("보내시는 분의 이름을 적어주십시요",".javascriptwindow.close();");
        if(isblank($subject)) Error("제목을 적어주십시요",".javascriptwindow.close();");
        if(isblank($comment)) Error("내용을 적어주십시요",".javascriptwindow.close();");

        $temp=mysql_fetch_array(mysql_query("select count(*) from $member_table where group_no='$group_no'",$connect));
        $total_member_num=$temp[0];

        if($cart) {
                $temp=explode("||",$cart);
                $s_que=" and ( no='$temp[1]' ";
                for($i=2;$i<count($temp);$i++)
                $s_que.=" or no='$temp[$i]' ";
                $s_que.=" )";
        } else {

        // 직접 선택이 없을때
                $s_que=stripslashes($s_que);
        }

        $temp=mysql_fetch_array(mysql_query("select count(*) from $member_table where group_no='$group_no' and mailing='1' $s_que",$connect));
        $total_member=$temp[0];

        if($total_member==0) Error("메일을 보낼 회원이 없습니다",".javascriptwindow.close();");
        $result=mysql_query("select email from $member_table where group_no='$group_no' and mailing=1 $s_que",$connect);

        mysql_close($connect);  

        $comment = stripslashes($comment);

        head( "onload=window.resizeTo(550,600); bgcolor=e0e0e0");
?>

<table border=0 cellpadding=2 cellspacing=1 width=100% bgcolor=e0e0e0 height=30>
<tr>
        <td align=center>
                <b><b><?=$total_member?></b> / (<?=$total_member_num?>) 명의 회원에게 메일링을 발송합니다.
        </td>
</tr>
</table>

<?
        $fault=0;
        $i=1;
        while($data=mysql_fetch_array($result)) {
                flush();
                echo".";

                if($data[email]) {
                        $temp=zb_sendmail($html, $data[email], $data[name], $from, $name, $subject, $comment);
                        if(!$temp) $fault++;
                }
                flush();
                if($i%100==0) {
                        echo"<br>";
                }
                $i++;
        }
        flush();
?>

<br><br>
<table border=0 cellspacing=0 cellpadding=2 width=100% bgcolor=e0e0e0>
<tr align=center>
<td height=30>
<br>

<?
        if($fault>0) echo $total_member." 명의 멤버중 $fault 명의 멤버에게 메일을 보내지 못하였습니다 ";
        else echo $total_member." 명의 멤버에게 메일을 보냈습니다 ";
?>

<br><br>
<input type=button value="Window Close" onclick=window.close() style=border-color:#b0b0b0;background-color:#3d3d3d;color:#ffffff;font-size:8pt;font-family:Tahoma;height:23px;><br><br>
</td></tr></table>

<?
        foot();
?>



5. 제로보드에 있는 lib.php를 메모장등으로 엽니다.

다음의 내용을 찾아 바꿉니다.

755번째 줄에서 시작하는

// 제로보드의 기본 설정 파일을 읽어오는 함수
        function getDefaultSetup() {
                global $_zb_path;
                $data = zReadFile($_zb_path."setup.php");
                $data = str_replace("<?/*","",$data);        
                $data = str_replace("*/?>","",$data);        
                $data = explode("\n",$data);
                $_c = count($data);
                unset($defaultSetup);
                for($i=0;$i<$_c;$i++) {
                        if(!ereg(";",$data[$i])&&strlen(trim($data[$i]))) {
                                $tmpStr = explode("=",$data[$i]);
                                $name = trim($tmpStr[0]);
                                $value = trim($tmpStr[1]);
                                $defaultSetup[$name]=$value;
                        }
                }
                if(!$defaultSetup[url]) $defaultSetup[url] = $HTTP_HOST;
                if(!$defaultSetup[sitename]) $defaultSetup[sitename] = $HTTP_HOST;
                if(!$defaultSetup[session_path]) $defaultSetup[session_path] = "data/__zbSessionTMP";
                if(!$defaultSetup[session_view_size]) $defaultSetup[session_view_size] = 512;
                if(!$defaultSetup[session_vote_size]) $defaultSetup[session_vote_size] = 256;
                if(!$defaultSetup[login_time]) $defaultSetup[login_time] = 60*30;
                if(!$defaultSetup[nowconnect_enable]) $defaultSetup[nowconnect_enable] = "true";
                if(!$defaultSetup[nowconnect_refresh_time]) $defaultSetup[nowconnect_refresh_time] = 60*3;
                if(!$defaultSetup[nowconnect_time]) $defaultSetup[nowconnect_tim] = 60*5;
                if(!$defaultSetup[enable_hangul_id]) $defaultSetup[enable_hangul_id] = "false";
                if(!$defaultSetup[check_email]) $defaultSetup[check_email] = "true";
                if(!$defaultSetup[memo_limit_time]) $defaultSetup[memo_limit_time] = 7;
                $defaultSetup[memo_limit_time] = 60 * 60 * 24 * $defaultSetup[memo_limit_time];
                
                return $defaultSetup;
        }

이 부분을 다음의 내용으로 바꿔 줍니다.

// 제로보드의 기본 설정 파일을 읽어오는 함수
        function getDefaultSetup() {
        global $_zb_path, $HTTP_HOST;
               $data = zReadFile($_zb_path."setup.php");
               $data = str_replace("<?/*","",$data);        
               $data = str_replace("*/?>","",$data);        
               $data = explode("\n",$data);
               $_c = count($data);
                unset($defaultSetup);
                for($i=0;$i<$_c;$i++) {
                        if(!ereg(";",$data[$i])&&strlen(trim($data[$i]))) {
                                $tmpStr = explode("=",$data[$i]);
                                $name = trim($tmpStr[0]);
                                $value = trim($tmpStr[1]);
                                $defaultSetup[$name]=$value;
                        }
                }
                if(!$defaultSetup[url]) $defaultSetup[url] = $HTTP_HOST;
                if(!$defaultSetup[sitename]) $defaultSetup[sitename] = $HTTP_HOST;
                if(!$defaultSetup[smtpaddress]) $defaultSetup[smtpaddress] = "127.0.0.1";
                if(!$defaultSetup[session_path]) $defaultSetup[session_path] = "data/__zbSessionTMP";
                if(!$defaultSetup[session_view_size]) $defaultSetup[session_view_size] = 512;
                if(!$defaultSetup[session_vote_size]) $defaultSetup[session_vote_size] = 256;
                if(!$defaultSetup[login_time]) $defaultSetup[login_time] = 60*30;
                if(!$defaultSetup[nowconnect_enable]) $defaultSetup[nowconnect_enable] = "true";
                if(!$defaultSetup[nowconnect_refresh_time]) $defaultSetup[nowconnect_refresh_time] = 60*3;
                if(!$defaultSetup[nowconnect_time]) $defaultSetup[nowconnect_tim] = 60*5;
                if(!$defaultSetup[enable_hangul_id]) $defaultSetup[enable_hangul_id] = "false";
                if(!$defaultSetup[check_email]) $defaultSetup[check_email] = "true";
                if(!$defaultSetup[memo_limit_time]) $defaultSetup[memo_limit_time] = 7;
                $defaultSetup[memo_limit_time] = 60 * 60 * 24 * $defaultSetup[memo_limit_time];
                
                return $defaultSetup;
        }


946번째 줄에서 시작하는
        
// 메일 보내는 함수
        function zb_sendmail($type, $to, $to_name, $from, $from_name, $subject, $comment, $cc="", $bcc="") {
                $recipient = "$to_name <$to>";

                if($type==1) $comment = nl2br($comment);

                $headers = "From: $from_name <$from>\n";
                $headers .= "X-Sender: <$from>\n";
                $headers .= "X-Mailer: PHP ".phpversion()."\n";
                $headers .= "X-Priority: 1\n";
                $headers .= "Return-Path: <$from>\n";

                if(!$type) $headers .= "Content-Type: text/plain; ";
                else $headers .= "Content-Type: text/html; ";
                $headers .= "charset=euc-kr\n";

                if($cc)  $headers .= "cc: $cc\n";
                if($bcc)  $headers .= "bcc: $bcc";

                $comment = stripslashes($comment);
                $comment = str_replace("\n\r","\n", $comment);

                return mail($recipient , $subject , $comment , $headers);

        }

이 부분을 다음의 내용으로 수정합니다.

        function zb_sendmail($type, $to, $to_name, $from, $from_name, $subject, $comment, $cc="", $bcc="") {

                global $HTTP_HOST, $_zbDefaultSetup;

                $sendmail_hostname=$_zbDefaultSetup[smtpaddress];

                $fp = fsockopen($sendmail_hostname, 25, &$errno, &$errstr, 30);

                if(!$fp) Error("Sendmail 연결시 에러가 발생했습니다. <Br><br>$errstr ($errno)");

                fgets($fp, 128);
                fputs($fp, "helo $_zbDefaultSetup[hostname]\r\n");
                fgets($fp, 128);

                fputs($fp, "mail from: <$from>\r\n");
                $retval[0] = fgets($fp, 128);
                
                fputs($fp, "rcpt to: <$to>\r\n");
                $retval[1] = fgets($fp, 128);

                fputs($fp, "data\r\n");
                fgets($fp, 128);
                
                //fputs($fp, "Return-Path: 자신의메일@어쩌구.net\r\n");
                
                fputs($fp, "From: $from_name <$from>\r\n");

                fputs($fp, "To: $to_name <$to>\r\n");
                fputs($fp, "Subject: $subject\r\n");
                
                if($type==2) $content= "Content-Type: text/html; ";
                elseif($tyep==1) {
                        $content.= "Content-Type: text/html; ";
                        $comment=nl2br($comment);
                } else $content.= "Content-Type: text/plain; ";

                fputs($fp, $content);
                fputs($fp, "charset=\"EUC-KR\"\r\n\n\n");
                
                fputs($fp, $comment);
                
                fputs($fp, "\r\n");
                
                fputs($fp, "\r\n.\r\n");
                
                $retval[2] = fgets($fp, 128);
                
                fclose($fp);
                
                if ( !ereg("^250", $retval[0]) || !ereg("^250", $retval[1]) || !ereg("^250", $retval[2]) ) return 0;
                else return 1;
        }


6. 메일링 테스트 실시합니다.

메일링 테스트를 할때는 hanmail을 제외한 다른 메일을 선택하여 실시하는 것이 좋습니다.

부디 성공하시길 바랍니다.

출처 : http://www.nzeo.com/bbs/zboard.php?id=cgi_tip&page=1&sn1=&divpage=1&sn=off&ss=on&sc=off&keyword=메일&select_arrange=headnum&desc=asc&no=6762

ps : php는 수정 안해도 잘 되던데 난.. ^^

Who's JaeSoo

profile

http://JaeSoo.com Administrator


Articles

1 2 3 4 5 6 7 8 9 10