1Sergey1
@1Sergey1

Как отправить письма в цикле mail()?

Добрый день, есть массив Email'ов
$emailsArr = array(["email1@gmail.com"], ["email2@gmail.com"], ["email3@gmail.com"], ["email4@gmail.com"]);

Пробую отправлять письма циклом

$title = 'Супер заголовок';
$message = 'Какой-то текст';

foreach ($emailsArr as $value) {
      $email = $value[0];

      $header = 'Content-type: text/plain; charset=UTF-8' . PHP_EOL . 
                'From: ' . 'no-reply@myWebSite.com' . PHP_EOL . 
                'MIME-Version: 1.0'. PHP_EOL;

      mail($email, $title, $message, $header);
  } // end foreach


Но приходит только первое письмо из цикла, в чём может быть проблема? Структуру массива менять проблематично, но с ней вроде всё норм
Заранее спасибо
  • Вопрос задан
  • 166 просмотров
Пригласить эксперта
Ответы на вопрос 4
slo_nik
@slo_nik Куратор тега PHP
Добрый вечер.
mail() первым параметром принимает адрес(адреса), на которые надо отправить почту.
Так что не надо никаких циклов, просто передайте первым параметром строку, состоящую из адресов разделённых запятой.
$to = implode(',', $emailsArr);
И ознакомьтесь с документацией.
Ответ написан
thewind
@thewind
php программист, front / backend developer
Скорее всего просто ограничение на количество email-ов в единицу времени. Попробуйте после каждой итерации цикла поставить, к примеру, sleep(1) - это заставит скрипт замереть на секунду. Потом можно экспериментировать с меньшими значениями, например, пол секунду через usleep(50000);
Ответ написан
ну как минимум что есть это?
$email = $value[0];
заменить на $email = $value++;
2ое зачем тебе заголовки в массиве?
Ответ написан
@Mysterion
А Вы подождать пробовали? У почтового сервера может быть очередь и отправит письмо чуть позже. А в скрипте Вам написано было, что отправилось, только потому что письмо в очередь встало.
Функция mail() не отправляет письмо, она передает его почтовому серверу, который добавляет его в очередь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы