2013-08-12 3 views
1

Мне нужно отправить ежедневный адрес электронной почты, содержащий обновленный контент сайта, примерно 200 пользователям. Способ, которым я настроил это, - отправить одно письмо на каждые 20 пользователей (все BCC'd), так что отправляется только около 10 общих писем. Я использую функцию Wordpress wp_mail() для отправки вместе с плагином WP-Mail-SMTP, чтобы отправлять сообщения электронной почты с помощью предварительно настроенной учетной записи gmail. Все работало нормально около недели назад. Теперь, внезапно сценарий ломается после отправки 5 писем.wp_mail break in loop

//SEND THE EMAIL TO 20 USERS AT A TIME 
    foreach ($users as $user) { 
     array_push($mailgroup, $user->user_email); 
     if(count($mailgroup) == 20) { 
      $headers = $headersBase . 'Bcc: '. implode(',', $mailgroup); 
      wp_mail('', 'Email Update', $strBody, $headers); 
      $sentEmailCount++; 
      $headers = ''; 
      $mailgroup = array(); 
     } 
     $sentUserCount++; 
    } 

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

+0

Предполагая, что wp_mail будет ломаться, просто поместите его в try catch или просто подавите с помощью знака '@' ... – We0

+0

Если это заставляет скрипт остановиться, тогда он должен регистрировать ошибку - почему бы вам не сделать знаете, что это за ошибка? Кроме того, даже без ошибки, ваш код не сможет отправить электронное письмо последней группе получателей, если он не кратен 20. – symcbean

+0

@symcbean: Я запускаю скрипт, используя метод wp_schedule_event(). Он работает каждую ночь в фоновом режиме и отправляет электронные письма большому числу пользователей. Я не могу проверить его, не отправляя электронные письма, которые раздражали бы моих конечных пользователей. Как я поймаю ошибку и зарегистрирую ее? Будет ли попытка/улов работать здесь с wp_mail? Я добавил «error_reporting (0)» в начало сценария, чтобы игнорировать ошибки, и я планирую посмотреть, что произойдет сегодня вечером. Мысли? PS: Я отправляю одно последнее письмо в мой пост-цикл сценария, если есть больше адресов. – lamarant

ответ

1

Это оказалось проблемой при столкновении с квотой, установленной gmail для исходящих писем. Я использовал плагин, который установил функцию wp_mail() для использования учетной записи SMTP для исходящей почты. В моем случае я использовал учетную запись gmail. Похоже, что gmail не позволяет отправлять более 100 исходящих сообщений в течение определенного периода времени. Я отправляю 1 письмо каждому 20 пользователям (все пользователи bcc'd) в каждом письме. Я только делал это через цикл электронной почты 5 раз (100 пользователей), прежде чем он бомбил. Проклятье gmail.

Исправление для меня было создать учетную запись Mandrill.com (бесплатно), установить плагин Mandrill Wordpress (бесплатно), настроить его и все. Теперь моя функция wp_mail() использует Mandrill для отправки сообщений, и, похоже, не существует ограничения. Никаких изменений в моем скрипте не требовалось.