2016-08-06 2 views
0

나는 10K 개 이상의 이메일 주소를 가지고 있습니다. 내 데이터베이스는 ID입니다. 나는 그 (것)들에게 php 우송 자를 가진 전자 우편을 보내려고 노력하고있다. 문제는 호스팅 제공 업체가 분당 60 개의 이메일을 허용한다는 것입니다.PHP-Ajax : 지연 대량 전자 메일 보내기

그래서 분당 60 개의 이메일을 제한하기 위해 이메일 코드를 변경해야한다고 생각합니다.

여기에 지금까지 작성한 코드가 있습니다.

$result = $mysqli->prepare("SELECT uid,email FROM users where address IS NULL and city IS NULL"); 
      $result->execute(); 
      $result->store_result(); 
      $result->bind_result($uid,$email); 
      while ($result->fetch()){ 
        $email = $email; 
        --Code to send email-- 

       } 

for 루프에 sleep 명령을 넣으려고 생각했지만 어딘가에서 나쁜 연습을 읽었습니다.

나는이 질문에

PHP sleep delay을 확인하고 우리가 같은 대한 AJAX를 사용할 수 있습니다 발견했다.

Ajax를 사용할 수 있습니다. 그리고 몇 초마다 PHP 스크립트를 호출하는 시간 제한을 사용하십시오. 이렇게하면 느린 스크립트 로딩을 피할 수 있습니다. 또한 계속해서 계속 수행 할 수 있습니다 (현재 for 루프는 33 초 동안 만 실행 한 다음 중지합니다).

이 문제를 해결하기 위해 AJAX 또는 다른 방법을 구현하는 방법에 대한 조언이 있습니까?

+0

대신 sleep 명령을 사용하는 것이 좋습니다. 매분 실행되는 cron 작업을 사용하는 것이 좋으며 스크립트는 데이터베이스에서 하나의 플래그를 취하여 전송 된 메일을 알 수 있도록 스크립트에서 60 개의 이메일 만 전송합니다 하나의 데이터베이스 필드 is_mail_sent를 취할 수 있음 0 OR 1, 0 = 보내지 않음, 1 = 보내짐). 스크립트에서 보낸 전자 메일은 해당 플래그를 업데이트 할 수 있습니다. –

+0

이메일 발신이 요구됩니다. 나는 그들을 일주일에 한 번 주기적으로 보낼 필요가 없다. – Ironic

+0

그러면 일주일에 한 번 cron 작업을 설정할 수 있습니다. –

답변

1

아래의 단계 수

1 단계 : 당신은 "설정"라는 하나 개의 테이블 만들 수 있습니다라는 하나 열이있을 것이다

"last_email_sent_id"2 단계 : 당신이 SQL 쿼리에서 제한을 설정하고 설정 테이블에서 primary_id> "last_email_sent_id"열을 설정해야합니다.

3 단계 :이 "last_email_sent_id"당신이 cron 작업이 실행될 때마다 업데이트됩니다. 아래처럼

4 단계 : 처음 60 개의 이메일을 보내면 "last_email_sent_id"를 "60"으로 업데이트합니다. 다시 cron이 실행되고 "step 2" "last_email_sent_id"열은 값 120으로 업데이트됩니다. (전자 메일 ID를 저장하기 위해 사용하는 기본 ID의 최종 값) cron 완료 후. 테이블의 기본 ID가 마지막 레코드이면 "last_email_sent_id"가 "0"값으로 업데이트됩니다.

5 단계 : cron은 매주 마지막 날에 1 분마다 설정됩니다.

+0

에서 언급 한 아래의 단계를 수행 할 수 있습니다. 답변 주셔서 감사합니다. 투표했습니다. – Ironic

관련 문제