Swiftmailer: отправка электронной почты нескольким получателям

Я пытаюсь отправить электронное письмо из контактной формы через swiftmailer lib. Моя настройка отправляет почту одному получателю, но когда я пытаюсь отправить несколько сообщений, это вызывает ошибку:

Адрес в почтовом ящике, указанный [email1 @ gmail.com, email2 @ gmail.com] не соответствует RFC 2822, 3.6.2.

но два письма действительны в соответствии со спецификацией.

Вот код;

$failed = []; $sent = 0; $to = []; if (isset($_POST['recipients'])) { $recipients = $_POST['recipients']; } // Send the message foreach ((array) $recipients as $to) { $message->setTo($to); $sent += $mailer->send($message, $failed); } print_r($recipients); printf("Sent %d messages\n", $sent); 

Когда я отправил с одним адресом электронной почты в поле ввода, print_r($recipients) дал мне этот массив: (Array ( [0] => email1@gmail.com ) Sent 1 messages) но теперь он не дает массив.

Я узнал, что foreach ожидает массив, но я не получаю массив.

В какой-то момент у меня возникла ошибка: «получатели» не определены; поэтому я добавил проверку if isset() .

Как я могу отправить каждое электронное письмо отдельно?

Похоже, что $_POST['recipients'] является разделенной запятой строкой. Вам нужно использовать explode() для разделения строки на запятую. Выделение его как массива не сделает этого для вас:

 // We should give $recipients a default value, in case it's empty. // Otherwise, you would get an error when trying to use it in your foreach-loop $recipients = []; if(!empty($_POST['recipients'])){ // Explode the string $recipients = explode(',', $_POST['recipients']); } // Send the message foreach ($recipients as $to) { // To be safe, we should trim the addresses as well, removing any potential spaces. $message ->setTo(trim($to)); $sent += $mailer->send($message, $failed); }