php로 mail함수를 이용하여 메일을 보낼때
10만건 이상의 메일을 루프문을 이용해 보내게 되면
메일을 처리할 수 있는 Queue의 용량을 초과하게된다
---------------------------------------------------------------
$result = mysql_query("select name, email from user", $db)
while($row = mysql_fetch_row($result))
{
.
.
.
mail(.....)
}
---------------------------------------------------------------
위와 같은 구조로 메일을 보내게 되면 일정량 이상의 메일을
발송할 때에 Sendmail 데몬에서 처리할 수 있는 메일 큐의
한도가 초과되어서 죽어버립니다.
이럴 때 Sendmail의 설정을 변경해서 처리할 수 있는 메일수를
늘린다던지....Script를 따로 만들어 mail queue를 생성해서
전송한다던지 하는 방법도 있겠지만...
이럴때 간단히 if문을 하나 추가하는것으로 20만건정도의 메일을
하루정도의 시간으로 처리할 수 있습니다.
---------------------------------------------------------------
Source)
$count = 1;
$result = mysql_query("select name, email from user", $db);
while($row = mysql_fetch_row($result))
{
.
.
.
mail(.....)
if (($count % 1000) == 0)
sleep(5) //메일 1000개 발송때마다 5초씩 쉰다.
}
---------------------------------------------------------------
1000개씩 메일이 발송되면서 5초마다 쉬면 큐에 쌓여있던 메일들이
자동으로 비워지기 때문에 일괄발송이 가능합니다.
| 저는 FreeBSD에 Qmail과 함께 메일을 발송하고 있습니다. 외람된 말이오나... PHP에선 해주는게 없고, 모두다 큐에 쌓아버립니다. 최고 30만건정도를 쌓았었는데 별 무리없이 날라가더군요. 시간은 트래픽 좋을때 1루반나절정도 |
음.. 저같은경우 좀더 트릭을 쓰는편입니다.. ^^
얼마전에 멜을 보내는 플그램을 php쉘로 짜서 납품했는데
$send_mail = mail($TO,$SUBJECT,$CONTENT,$HEADER);
echo "다음 사용자에게 메일 보내는 중 : $TO ";
usleep(50);
echo "==";
usleep(50);
echo "==";
usleep(50);
echo "==";
usleep(50);
echo "==";
usleep(50);
echo "==";
usleep(50);
echo "==";
usleep(50);
echo "==";
usleep(50);
echo "==";
usleep(50);
echo "==";
usleep(50);
echo "==";
usleep(50);
echo "==";
usleep(50);
echo "==>>>> Mail Send OK!!!!";
echo "n";
요렇게 해주었죠.. ^^ 한통보낼때마다 마이크로 초로 해서 쫌식 쉬어가면서
잘 보내지고 있는지 보여주게요...
그랫더니 정말 좋아하더라구요.. 멜도 잘가구.. 확인도 돼구 일석 이조죠..
