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는 수정 안해도 잘 되던데 난.. ^^