• -동두천 2.3℃
  • -강릉 1.8℃
  • 비 또는 눈서울 2.5℃
  • 대전 1.9℃
  • 대구 2.8℃
  • 울산 2.5℃
  • 광주 3.3℃
  • 부산 4.2℃
  • -고창 2.1℃
  • 제주 6.0℃
  • -강화 1.7℃
  • -보은 2.5℃
  • -금산 0.9℃
  • -강진군 4.2℃
  • -경주시 2.2℃
  • -거제 3.7℃
기상청 제공

programming

php로 10만건 이상의 대용량 메일 처리하기

http://cafe.naver.com/q69/7850

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";
요렇게 해주었죠.. ^^ 한통보낼때마다 마이크로 초로 해서 쫌식 쉬어가면서
잘 보내지고 있는지 보여주게요...
그랫더니 정말 좋아하더라구요.. 멜도 잘가구.. 확인도 돼구 일석 이조죠..