2014-12-01 9 views
1

Я разработал код php, который отправляет почту некоторым пользователям, зарегистрированным в моей базе данных. Проблема заключается в том, что при выполнении этого скрипта через навигатор он загружает много времени, и я должен остановить загрузку с помощью кнопки X навигатора (в моем случае с Google Chrome). Письмо отправляется более одного раза, и я не знаю, почему.Почему моя почта отправляется более одного раза?

У меня есть этот код:

global $wpdb; 
$blogs = $wpdb->get_results("SELECT * FROM wp_premios"); 

foreach ($blogs as $blog) { 
    $to = $blog->email; 

    if(wp_mail($to, $subject, $message, $headers) == true){ 
     echo "Mail sent properly"; 
    } 
} 

, который использует API на WordPress.

ПРИМЕЧАНИЕ. Я отправил это письмо самому себе, и оно отправлено правильно, только один раз, но когда я делаю код выше, проблема возникает. У меня 600 пользователей, что это не большое число.

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

Надеюсь, ваша помощь. Большое спасибо, Даниэль

+0

You знаете, что ваш отправленный по почте фрагмент находится в 'foreach()' loop right? – RichardBernards

+0

Да, есть ли с этим проблемы? –

+0

Каждая итерация цикла пытается отправить электронное письмо, поэтому для количества записей в базе данных в таблице 'wp_premios' отправляется электронное письмо. – RichardBernards

ответ

0

Согласно Wordpress documentation, wp_mail в $ параметру может быть строка или массив, который означает, что вы могли бы хранить адреса электронной почты в массиве и после окончания цикла, вы можете использовать этот массив как $ к.

Проблема с этим решением заключается в том, что все пользователи, которые прочитают это письмо, будут видеть все другие адреса электронной почты. Чтобы обойти это, вы могли бы использовать Bcc header, что-то вроде:

$headers = array(); 

foreach ($blogs as $blog) { 
    $headers[] = 'Bcc: '. $blog->email; 
} 

wp_mail('[email protected]', $subject, $message, $headers); 

В качестве примечания, вы можете выбрать только поле электронной почты из базы данных, так как это единственный, который вы используете.

0

У меня была эта проблема один раз, и это было потому, что я дважды включал wp-blog-header. Это был плагин на самом деле, но она была решен только изменения требуют require_once() - Так как блог-заголовок суммирует все крючки и функцию Wp, все затем дважды выстрелило

Надеются, что это помогает;)

Смежные вопросы