PHP & Others

대량메일발송 (주의! 초허접하니 고수클릭자제)

페이지 정보

본문

제가 그냥 편하게 쓰려고 회사에서 뚝딱 만들어보았습니다..
페이지는 두개입니다..하나는 기본적인 데이타 입력폼이고..
다른하나는 실행하는 페이지입니다. 쓰시는 에디트에 복사해서 보세요.
대단한 내공같은거 없습니다..기존에 있는건데...제가 편하게
쓰려고 만들었습니다...아..그리고, 2047인코딩하는것은 거친마루님이
말씀하신것을 인용했습니다...리눅스 센드메일을 이용해서 보내는거고,
다른 MTA 쓰시려면 php.ini 페이지 수정해서 쓰세요.

###############################################
페이지명 : sendMail.html
###############################################

<HTML>
<HEAD>
<TITLE>대량메일보내기</TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<STYLE>BODY,TD {font-size:9pt; color:#2E2E2E;line-height:150%}</STYLE>
</HEAD>

<BODY>
<center>
<FORM name="frm" METHOD="POST" ACTION="sendMail.php">
<table cellpadding="0" cellspacing="1">
<tr>
    <td bgcolor="#FF6600" height="5"></td>
</tr>
<tr>
    <td>
        <table cellpadding="0" cellspacing="1" style="padding:1">
        <tr>
            <td width="100" align="center" bgcolor="#DEDFDE"><font color="#FF6600">DB IP</font></td>
            <td width="400" bgcolor="#DEDFDE"><input type="text" name="mysql_ip" size="10" value="localhost"></td>
        </tr>
        <tr>
            <td width="100" align="center" bgcolor="#DEDFDE"><font color="#FF6600">DB NAME</font></td>
            <td width="400" bgcolor="#DEDFDE"><input type="text" name="mysql_db" size="10"></td>
        </tr>
        <tr>
            <td width="100" align="center" bgcolor="#DEDFDE"><font color="#FF6600">DB ID</font></td>
            <td width="400" bgcolor="#DEDFDE"><input type="text" name="mysql_id" size="10"></td>
        </tr>
        <tr>
            <td width="100" align="center" bgcolor="#DEDFDE"><font color="#FF6600">DB PASSWORD</font></td>
            <td width="400" bgcolor="#DEDFDE"><input type="password" name="mysql_pass" size="10"></td>
        </tr>
        <tr>
            <td width="100" align="center" bgcolor="#DEDFDE"><font color="#FF6600">TALBE</font></td>
            <td width="400" bgcolor="#DEDFDE"><input type="text" name="table" size="10">(이메일 저장된 테이블명)</td>
        </tr>
        <tr>
            <td width="100" align="center" bgcolor="#DEDFDE"><font color="#FF6600">FIELD</font></td>
            <td width="400" bgcolor="#DEDFDE"><input type="text" name="emailField" size="10">(이메일 필드명)</td>
        </tr>
        <tr>
            <td width="100" align="center" bgcolor="#DEDFDE"><font color="#FF6600">FROM</font></td>
            <td width="400" bgcolor="#DEDFDE"><input type="text" name="fromEmail" size="30" value="홍길동<abc@empal.com>">(보내는 사람 이메일)</td>
        </tr>
        <tr>
            <td width="100" align="center" bgcolor="#DEDFDE"><font color="#FF6600">SUBJECT</font></td>
            <td width="400" bgcolor="#DEDFDE"><input type="text" name="subject" size="40"></td>
        </tr>
        <tr>
            <td width="100" align="center" bgcolor="#DEDFDE"><font color="#FF6600">CONTENTS</font><BR>HTML사용<input type="checkbox" name="tag" checked></td>
            <td width="400" bgcolor="#DEDFDE"><textarea cols="60" rows="10" name="body"></textarea></td>
        </tr>
        </table>
    </td>
</tr>
<tr>
    <td bgcolor="#FF6600" height="5"></td>
</tr>
</table>
<table cellpadding="0" cellspacing="1">
<tr>
    <td><input type="submit" value="메일보내기"></td>
</tr>
</table>
</FORM>
</center>
</BODY>
</HTML>

###############################################
페이지명 : sendMail.php
###############################################

<?
#----------------------------------------------------------------------------------------
# 사용자 지정변수
    $mysql_ip    = $mysql_ip; //디비접속 아이피
    $mysql_db = $mysql_db; //디비네임
    $mysql_id = $mysql_id; //디비접속 아이디
    $mysql_pass = $mysql_pass; //디비접속 패스워드

    $table = $table; //이메일 가져올 테이블명
    $emailField = $emailField; //이메일 필드명
    $fromEmail = $fromEmail; //메일 보내는 사람이름과 이메일
    $subject = $subject; //메일제목
    $body = $body; //메일내용
#-----------------------------------------------------------------------------------------

$subject = stripslashes($subject);
$body = stripslashes($body);
if($tag != "on") $body = nl2br($body);

//제목에 2047인코딩하기
function encode_2047($subject) {
  return '=?euc-kr?b?'.base64_encode($subject).'?=';
}

//스크립트 종료할때까지
set_time_limit(0);

//DB연결
global $mysql_ip, $mysql_id, $mysql_pass, $mysql_db;
$connect=mysql_connect($mysql_ip, $mysql_id, $mysql_pass) or die(mysql_error());
mysql_select_db($mysql_db, $connect) or die(mysql_error());

//전체메일수계산
$query = "SELECT COUNT(" . $emailField . ") FROM " . $table;
$result = mysql_query($query);
$total = mysql_result($result,0,0);

//메일의 헤더와 내용
$additional_headers="from:".$fromEmail."\\n";
$additional_headers.="reply-to : " . $fromEmail . "\\n";
$additional_headers.="content-type:text/html;charset=euc-krn";

//메일보내기
$query = "SELECT " . $emailField . " FROM " . $table;
$result = mysql_query($query);
for($i=0; $i<$total; $i++){
    $toEmail = mysql_result($result,$i,0);
   
    //몇통성공했는지 알기위해
    if(mail($toEmail, encode_2047($subject), $body, $additional_headers))    $success ++;

    //100통 성공할때마다 5초쉰다.
    if(($success%100) == 0)    sleep(5);
}

echo "<div align='center'><b>총 ".$total."통의 메일중에 ".$success."통이 성공적으로 발송되었습니다.</b></div>";
?>

관련자료

등록된 댓글이 없습니다.
Today's proverb
해변을 떠날 용기가 없이는 대양을 발견할 수 없다.