Я пытаюсь отправить электронное письмо из контактной формы через swiftmailer lib. Моя настройка отправляет почту одному получателю, но когда я пытаюсь отправить несколько сообщений, это вызывает ошибку:
Адрес в почтовом ящике, указанный [email1 @ gmail.com, email2 @ gmail.com] не соответствует RFC 2822, 3.6.2.
- добавить встроенное изображение в сообщение, отправленное с помощью swiftmailer
- Отправка приглашения календаря ics с помощью Swift Mailer и Send Grid
- Настройте параметр «Локальный домен» SwiftMailer легко, в Symfony 2
- Исключить исключение «Swift_TransportException» с сообщением «Невозможно установить соединение с хостом smtp.gmail.com
- Как правильно настроить пакет symfony2 swiftmailer для работы с SMTP-сервером с помощью NTLM AUTH?
но два письма действительны в соответствии со спецификацией.
Вот код;
$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); }