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>";
?>

관련자료

댓글 0
등록된 댓글이 없습니다.
Today's proverb
가을에 피는 국화는 첫 봄의 상징으로 사랑받는 개나리를 시샘하지 않는다. 역시 봄에 피는 복숭아꽃이나 벚꽃을 부러워하지 않는다. 한여름 붉은 장미가 필 때, 나는 왜 이렇게 다른 꽃보다 늦게 피나 한탄하지도 않는다. 그저 묵묵히 준비하며 내공을 쌓고 있을 뿐이다. 그러다가 매미소리 그치고 하늘이 높아지는 가을, 드디어 자기 차례가 돌아온 지금, 국화는 오랫동안 준비해온 그 은은한 향기와 자태를 마음껏 뽐내는 것이다. (한비야)