2016-02-03 3 views
0

Я написал код для отправки писем более чем 1200 пользователям, зацикливая 1200 раз для создания уникальной случайной ссылки для отмены подписки на каждого пользователя, но страница задерживается из-за этого процесса. Пожалуйста, дайте мне советы для выполнения этой задачи. Мой код ниже:отправлять письма нескольким пользователям без циклирования

while ($result = mysqli_fetch_assoc($query)) { 
    $unsubscribe_link = 'XXXXXX'; 
    mail(
    $result['user_email'], 
    $subject, 
    message($unsubscribe_link), html_headers($from_mail) 
); 
} 
+1

Зачем делать одну функцию для 1200 пользователей быстрее, чем повторять функцию 1200 раз? – Ben

+1

Это не то, как вы должны это делать. Для этого вам нужно выполнить задание в очереди. –

+0

Это не подходящий процесс для браузера. Вы должны выполнить это посредством командной строки или фоновой задачи. Если на самом деле у вас нет альтернатив, вы можете попробовать выполнить это через ajax, с индикатором выполнения и кнопками для приостановки/возобновления/остановки процесса. – fusion3k

ответ

1

Можно просто сцепить адреса электронной почты в к в области почтовой функции PHP, чтобы избежать цикла:

// multiple recipients 
$to = '[email protected]' . ', '; // note the comma 
$to .= '[email protected]'; 

Однако, как вы отправляете отдельные отказаться от подписки ссылки на пользователей с точки зрения вещей, это было бы невозможно (поскольку получатели увидели бы адреса других адресов электронной почты). Плюс, как уже упоминалось в комментариях, это, вероятно, задача, которая лучше подходит для обработки в фоновом режиме.

В PHP.net документы свидетельствуют:

Стоит отметить, что функция почты() не подходит для больших объемов электронной почты в цикле. Эта функция открывает и закрывает SMTP-сокет для каждого письма, что не очень эффективно. Для отправки большого количества сообщений электронной почты см. Пакеты «PEAR :: Mail» и «PEAR :: Mail_Queue».

я бы подумал, однако, что это могло бы быть более безопасным (спам мудры) и более эффективно использовать сторонних поставщиков для транзакционных сообщений электронной почты, таких как Mandrill.

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