Я использую 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 отправлялись всем получателям.