2016-08-06 2 views
0

У меня есть более 10K email id - это моя база данных. Я пытаюсь отправить им письмо с php mailer. Проблема заключается в том, что мой хостинг-провайдер позволяет отправлять 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-- 

       } 

Я думал, что поставил команду sleep в цикл, но я где-то читал, что это плохая практика.

Я проверил этот вопрос PHP sleep delay

и обнаружили, мы можем использовать AJAX для того же.

Вы можете использовать Ajax. И используйте таймаут, чтобы вызывать свой PHP-скрипт каждые несколько секунд. Это позволит избежать медленной загрузки скрипта. А также вы можете продолжать делать это постоянно (текущий цикл будет работать только 33 секунды, а затем остановится).

Есть ли какие-либо рекомендации, как я могу реализовать AJAX или любой другой способ достичь этого.

+0

Вместо этого, чтобы использовать команду спящего режима, я предлагаю использовать задание cron, которое будет запускаться каждую минуту, и ваш скрипт будет отправлять только 60 писем в скрипте, чтобы вы могли взять один флаг в базе данных для получения отправленной почты или нет (вы может принимать одно поле базы данных is_mail_sent. 0 ИЛИ 1, 0 = не отправлено, 1 = отправлено). и в то время как электронная почта, отправленная из скрипта, вы можете обновить этот флаг. –

+0

Отправка электронной почты предоставляется по запросу. Мне не нужно отправлять их регулярно один раз в неделю. – Ironic

+0

, тогда вы можете установить работу cron один раз в неделю. –

ответ

1

Вы можете следовать ниже шаги

Шаг 1: Вы можете сделать одну таблицу под названием «установка»: что будет иметь один колонку под названием «last_email_sent_id»

Шаг 2: вы необходимо установить лимит в вашем SQL-запросе с помощью столбца 60 fix и primary_id> «last_email_sent_id» из таблицы настроек.

Шаг 3: Это «last_email_sent_id» будет обновлять каждый раз, когда вы хрон будет работать. как показано ниже

Шаг 4: если вы посылаете первый 60 электронной почты, то он будет обновлять «last_email_sent_id» до «60». затем снова будет выполняться cron и в соответствии с «Шаг 2» Столбец «last_email_sent_id» будет обновлен со значением 120 (последнее значение первичного идентификатора, какая таблица используется для хранения идентификатора электронной почты) после завершения cron. если основным идентификатором таблицы будет последняя запись, то «last_email_sent_id» обновится до «0».

Шаг 5: cron будет устанавливаться каждые 1 минуту в последний день недели.

+0

Спасибо за ваш ответ. Проголосовал. – Ironic