글쎄요..
일부 ISP측에선 한 아이피로부터 일정량이상의 메일이 전송될
경우에 스팸으로 처리하더군요(한메일이
그중 한 예입니다. 하루에 천통이상 못보낸다고 들었습니다..
정확한건 아니구요..)
만약 그렇다면 보낼 메일을 잘(?) 섞어놓고 다시한번 해보시면
좀더 전송성공률이 좋아질수도 있습니다.
그리고, 브라우저상에서
메일보내기를 하신다면, 만약 브라우저 밑에 전송상태를
나타내주는 바가 오랜동안 멈춰있다면, max_execution_time을
30에서 조금더 올려보세요. 만약 쉘상에서 보내신다고 해도,
delay가 오래 걸리는듯한 느낌이 든다면, 값을 약간 올려보세요.
그리고, 제가 어디선가 본듯한데 기억이 나질 않는데요, bulk
mail같은경우는 일부 시스템사양도 고려하셔야할듯
하네요. 제가 아는 어떤분이 광고차원에서 만통을 보내다가
그만..시스템이...
^^;;
아니면 다른 우회적인 방법으로는 만약 메일을 쉘에서
돌리신다면 sleep을 이용하셔서요, 최대 성공률횟수만큼
보내시고, 다시 몇분정도 대기했다가, 나머지를 보내는 방향도
그다지 나쁘지 않은거 같네요.
그다지 시원한 답변이 아닌듯...
그럼 행운을..
[이상엽]님이 남기신 글:
>안녕하세요.
>
>제가 리눅스 서버에서 php를 이용해 회원에게 메일보내는
페이지를
>만들었는데, 걍 이것저것 보고 뚝딱뚝딱 만들어서 인지 문제가
많이
>발생합니다.
>
>일단 회원수는 2000명 정도이고요, 오라클 디비에서 회원주소를
읽어옵니다.
>
>문제가 되는점은 2000명 정도되는 회원에게 HTML로 된 문서를
메일로 보내는데, 웹상에서 페이지를 읽어오는 중에 '작업취소'
화면이 뜹니다.
>
>php로 서버에 메일보낸 로그를 텍스트로 남겨서 보면 한 200명 -
700명 정도 보내고 멈춰버리더군요.
>
>또 회원주소 읽어오는 SQL문에 그다음 주소부터 읽어오게
한다음 다시 보내면, 잘 가다가 또 웹페이지를 찾을수 없다며,
멈춰버리는 경우가 많이 생깁니다.
>
>phpschool에서 좀 뒤져보다가, delay나 set_time_limit를 사용해 보라고
해서 젤 위에 set_time_limit(2000) 주고, 메일 50개 보내고 나서
딜레이주고
>등의 방법을 사용했지만 결과는 조금더 보내는것 외에는
나아진것이 별로 없습니다.
>
>또, 세번째 문제는 위에서 말한데로 SQL문을 계속고쳐가며,
새로 보내면
>이상하게 SQL결과상에 나오지 않는 위에 보냈던 사람한테 다시
메일을 보내버리는 오류가 생기더군요.
>결과적으로 2000명 회원한테 메일을 보냈는데 실제로 메일은
3000번 정도 발송이 되고, 몇통씩 같은 메일을 받는 회원이
생깁니다.
>어찌해야 할까요?
>
>참..추가적으로
delay와 set_time_limit를 사용하지 않은 상태에서 보냈을경우,
2000명 전원에게 메일을 발송하지만 대부분 mail 함수에서 오류가
나고 한 300-500명 정도에게만 메일이 가더군요.
>set_time_limit를 사용했을경우에는
중간에 끊겨 버리고...
>
>이문제에 대해 아시면 꼭좀 부탁드립니다.
>
>set_time_limit(2000);
>
>$stmt = get_usermail_a();
>
>
>while(OCIFetchInto($stmt,&$usermail,OCI_ASSOC)) {
>
> $name[] = $usermail[NAME];
>
> $email[] = $usermail[EMAIL];
>
> $user_id[] = $usermail[USER_ID];
>
>}
>
>위처럼 메일주소를 읽어와서,
>
>for($i=0;$i<sizeof($email);$i++) {
>
> $sendhtml = $mailhtml;
> if(($totalsend%50)==0) sleep(1);
> $sendhtml =
str_replace("_user_name_","_".$name[$i],$sendhtml);
>
> $sendhtml = str_replace("_usermail_",$email[$i],$sendhtml);
> if(@mail($email[$i],$mailtitle,$sendhtml,$additional_headers)) {
>
> $totalsend = $totalsend +1;
> $email[$i] = trim($email[$i]);
> fwrite($fp,$email[$i]."\n");
> } else {
> sleep(1);
> $nosend = $nosend +1;
> $email[$i] = trim($email[$i]);
> $name[$i] = trim($name[$i]);
> fwrite($fp2,$email[$i]."__".$name[$i]."\n");
> }
>
>}
>위와 같이 메일을 보냅니다.
>$sendhtml 이 메일보내는 내용이고,
>str_replace부분은
회원이름쓰기 부분,
>메일보내는 mail함수는 if조건문안에서
돌아가며,
>메일보내기가 성공하면, 파일오픈변수 $fp에 기록,
>실패하면 $fp2에 기록합니다.
========================================
|