PHPMailer 5.1 отправляет дубликаты писем при добавлении более 1 получателя - PullRequest
7 голосов
/ 13 февраля 2012

Я пользуюсь 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. Может ли быть «тихий» редирект самим сервером?

// РЕДАКТИРОВАТЬ, чтобы ^^ решил мою проблему

// EDIT2:

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

// Решение:

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

Кому: A, B, C

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

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

Спасибо, что подумали:)

Ответы [ 7 ]

5 голосов
/ 18 февраля 2012

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

Из документации PHPMailer:

$ SingleTo

Предоставляет возможность обрабатывать в поле 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();
4 голосов
/ 10 октября 2013

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

$mail->send();


$mail->ClearAddresses();
1 голос
/ 11 мая 2017

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

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

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

1 голос
/ 13 февраля 2012

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

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

0 голосов
/ 19 июня 2014

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

0 голосов
/ 26 ноября 2013

Я перепробовал все, проверка UTF8 / BOM на всех файлах, свойство SingleTo, свойство CharSet.Это не сработало.

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

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

public function Send() {
  if ($this->Subject == "") {
    return true;
  }
  // ... rest of code...
}
0 голосов
/ 13 августа 2013

Я думаю, что они сделают свою работу:)

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