PHPMailer 5.1 отправляет дубликаты писем при добавлении более 1 приемника

Я использую PHPMailer какое-то время и никогда не испытывал никаких проблем, но на прошлой неделе я установил одну из своих CMS на веб-сайт, и клиент настаивал на том, чтобы 2 электронной почты получали содержимое контактной формы своего веб-сайта.

Хорошо, никаких проблем, я думал, просто добавляя адрес электронной почты, используя функцию $ phpmailer-> AddAddress (). Однако добавление второго приемника заставляет PHPMailer отправлять почту дважды получателям. Я попытался добавить третий приемник, чтобы узнать, есть ли у меня три раза, но это ничего не изменило. Поэтому добавление 2+ приемников заставляет PHPMailer отправлять сообщение дважды всем получателям.

В моем коде нет ничего странного. Это базовый пример PHPMailer:

$mail = new PHPMailer(); $mail->AddReplyTo("name@yourdomain.com","First Last"); $mail->SetFrom('name@yourdomain.com', 'First Last'); $mail->AddAddress("info@address.com"); $mail->AddAddress("info@address.nl"); $mail->Subject = "PHPMailer Test Subject via mail(), basic"; $mail->Send(); 

У меня закончились варианты. Я совершенно не знаю, где это происходит.

заранее спасибо

Просто какая-то случайная мысль: я заметил, что почтовая программа по умолчанию работает iso-8859-1, а на моем сайте работает utf8. Может ли быть «тихая» переадресация самим сервером?

// EDIT, что ^^ решила мою проблему

// EDIT2:

Хорошо, это не так. Сегодня скрипт работал нормально (всего одна почта с двумя приемниками), но мгновение назад странное поведение снова началось. Какие-нибудь советы?

// Решение:

хорошо, я чувствую себя глупо! Ответ Zulkhaery Basrul приблизился к самой актуальной проблеме! Вот что произошло: я отправлял электронное письмо на несколько адресов в поле «Кому». Например:

To: A, B, C

Оба A / B – мои собственные адреса. В Outlook я имел некоторые правила сообщений, чтобы отправлять электронные письма с определенными адресатами внутри определенной папки. Оба правила А и В имели это правило.

Когда я получил свое электронное письмо, в обеих письмах содержались оба mailaddresses в поле. Причинение обеих писем для соответствия требованиям правил для обоих правил. Таким образом, сохранение оригинала в одной папке и создание копии в другой (дважды).

Спасибо за то, что вы думаете 🙂

Вы можете использовать свойство $ SingleTo .

Из документов PHPMailer:

$ SingleTo

Предоставляет возможность обладать полем TO, обрабатывающим отдельные электронные письма, вместо отправки на все «TO-адреса»,

 $mail = new PHPMailer(); $mail->SingleTo = true; //will send mail to each email address individually $mail->AddReplyTo("name@yourdomain.com","First Last"); $mail->SetFrom('name@yourdomain.com', 'First Last'); $mail->AddAddress("info@address.com"); $mail->AddAddress("info@address.nl"); $mail->Subject = "PHPMailer Test Subject via mail(), basic"; $mail->Send(); 

Попробуйте добавить после

 $mail->send(); $mail->ClearAddresses(); 

Хорошо, если кто-то столкнется с этой проблемой, как я:

Мой сайт работает в utf-8, PHPMailer использует iso-8859-1 по умолчанию. Так или иначе сценарий запускается в обеих кодировках, вызывая дубликаты. Изменение charset в файле class.phpmailer.php на utf-8 решило проблему!

SingleTo Не очень хорошая идея. Он работает только с транспортом «sendmail» или «mail», а не с SMTP. Если вы используете SingleTo с SMTP, этот параметр просто игнорируется без каких-либо ошибок или предупреждений, и вы можете получить дубликаты.

По словам авторов библиотеки, SingleTo планируется отказаться от выпуска PHPMailer 6.0 и удалить в 7.0. Авторы объяснили, что лучше контролировать отправку нескольким получателям на более высоком уровне: «PHPMailer не является отправителем списка рассылки». Они говорят, что использование функции PHP mail () должно быть обескуражено, потому что это чрезвычайно сложно использовать безопасно; SMTP быстрее, безопаснее и дает больше контроля и обратной связи.

Но SMTP несовместим с SingleTo – поэтому авторы PHPMailer удаляют SingleTo, а не SMTP.

Я думаю, что они будут делать работу 🙂

 $mail->SingleTo = true; $mail->CharSet = "UTF-8"; 

Я пробовал все, UTF8 / BOM проверяю все файлы, SingleTo-property, CharSet-свойство. Это не сработало.

Я использовал функцию «Посмотреть детали» из Gmail и увидел, что мои дубликаты писем отправлены без темы.

Итак, у меня получилось очень грязное исправление. Я помещал это DIRECTLY ниже первой строки функции send в файле класса:

 public function Send() { if ($this->Subject == "") { return true; } // ... rest of code... } 

Я столкнулся с той же проблемой. Единственный правильный ответ – $mail->ClearAllRecipients() Когда я использовал принятый ответ, письма BCC отправлялись всем получателям.