2012-06-08 2 views
36

Есть много вопросов StackOverflow по этой теме, но я не смог найти тот, который смог помочь с проблемой, с которой я сталкиваюсь. Сценарий, который я пишу, отправляет несколько писем различным получателям с различным содержимым сообщений.phpMailer - Как удалить получателей

я могу получить эту работу путем повторной инициализации phpMailer объект несколько раз, но то, что я хотел бы быть в состоянии сделать это создать объект один раз, а затем повторно назначить следующие поля:

$mail->AddAddress($email); 
$mail->Subject = $subject; 
$mail->IsHTML(false); 
$mail->Body = $message; 

Таким образом, я могу просто запустить эти четыре строки кода, а затем отправить почту, снова и снова, столько раз, сколько необходимо. Области Subject, IsHTML и Body легко меняются, поэтому проблема, которую я испытываю, находится в функции AddAddress.

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

Проще говоря, Как удалить адреса электронной почты, связанные с моим объектом $mail, чтобы я мог назначать их каждый раз при удалении старых адресов?

Есть ли еще функция, кроме AddAddress, что я могу использовать это, просто назначит адреса?

+0

Как насчет наклеивания остальной инициализации в функции? Затем вы можете легко создать почти инициированный экземпляр и задать остальные поля. – Svish

+1

Это на самом деле то, что я делаю. У меня есть функция init_mailer, которая создает объект и назначает все параметры, кроме тех четырех строк, которые я написал выше. Я пытаюсь оптимизировать это как можно лучше. –

ответ

78

Вы можете использовать ClearAllRecipients()

$mailer->ClearAllRecipients(); // clear all

+1

@JoeMajewski здесь документация http://xref.wordpress.org/trunk/PHPMailer/PHPMailer.html – ravi404

24

им с помощью этого всегда перед отправкой электронной почты получателям:

// clear addresses of all types 
$mail->ClearAddresses(); // each AddAddress add to list 
$mail->ClearCCs(); 
$mail->ClearBCCs(); 

тогда им делать только это: (не используя CC или BCC, $ toaddress просто массив получателей)

foreach($toaddress as $key=>$val) { $mail->AddAddress($val); } 

им с использованием PHPMailer 5.2

+0

Итак, судя по сообщению выше, функция ClearAllRecipients удалит Адреса, CC и BCC, в то время как перечисленные вами функции удаляют только те адреса в указанном поле. Вызов всех трех этих функций будет иметь тот же эффект, что и «ClearAllRecipients», если я правильно понимаю. Большое спасибо за Вашу помощь. –

+1

да, это будет иметь почти такой же эффект, но я хочу называть их таким образом, чтобы применить выборочное удаление (иногда) –

+1

Конечно. Я не собираюсь использовать какие-либо CC или BCC в моем скрипте, поэтому я просто буду использовать функцию ClearAddresses для повышения эффективности. –

Смежные вопросы