Как не заставить PHPmailer отправлять электронное письмо с несколькими адресами «кому»?

У меня есть таблица в моей базе данных, которая содержит электронные письма для отправки. Скрипт периодически запускается как задание cron для чтения данных из таблицы и отправки электронных писем через SMTP-сервер. Я использую PHPMailer для работы здесь. Сценарий запускает цикл отправки электронных писем, пока все электронные письма в таблице не будут отправлены.

Проблема в том, что большинство отправляемых друг за другом электронных писем имеют общую тему. Итак, когда цикл запускается, каким-то образом все отправленные электронные письма имеют длинный список «кому». Таким образом, в основном, если 5 записей электронной почты (с разными адресами to) имеют одинаковую тему и одинаковое содержание, в конечном итоге будет отправлено только 1 электронное письмо с 5 адресами (по одному для каждой записи электронной почты) в поле «Кому». поле. Это показывает адрес электронной почты каждого человека всем остальным в списке. Это нежелательно, и электронные письма должны быть отправлены только тому человеку, для которого они предназначены.

Я не знаю, что здесь происходит. Какие-либо предложения?


person Vaibhav Kaushal    schedule 27.02.2013    source источник
comment
Похоже, вы должны зацикливаться на пользователях и отправлять электронные письма, а не зацикливаться на электронных письмах и добавлять пользователей.   -  person Axel    schedule 28.02.2013


Ответы (2)


Вы делаете что-то подобное?

$mailer = new PHPMailer();

while($row = fetch_from_db()) {
   $mailer->AddAddress($row['email']);
   $mailer->send();
}

Если это так, вам нужно сделать

$mailer->ClearAllRecipients()

после отправки каждого электронного письма, поэтому вы начинаете со «свежего» To: списка.

person Marc B    schedule 27.02.2013
comment
Меня это достало. Спасибо за помощь, все работает. :) - person Vaibhav Kaushal; 28.02.2013

1-й, получить контакты из вашей базы данных

$contacts = 'GET CONTACTS ARRAY FROM DB'
        if(!empty($contacts)){
            foreach ($contacts as $crt_contact){
               $emails[] = $crt_contact->email ;
            }
        }

2-й используйте следующее, чтобы создать поле «кому»

$to = implode(',', array_unique($emails));

Используйте функцию $to для отправки по почте ()

person tylerpenney    schedule 27.02.2013
comment
Это благородная идея, но то, что я пытаюсь сделать, это отправлять отдельные электронные письма людям, а не одно электронное письмо нескольким людям. Я думаю, что я могу сделать, это использовать один адрес «кому», а остальные можно отправить на «скрытую копию». Дайте-ка подумать. - person Vaibhav Kaushal; 28.02.2013