2012-06-08 13 views
36

Ci sono un sacco di domande StackOverflow su questo argomento, ma non sono riuscito a trovarne uno in grado di aiutare con il problema che sto avendo. Lo script che sto scrivendo invia più email a vari destinatari con contenuti di messaggi diversi.phpMailer - Come si rimuovono i destinatari

posso ottenere questo lavoro da ri-inizializzare i phpMailer oggetto più volte, ma quello che mi piacerebbe essere in grado di fare è creare l'oggetto una sola volta, e poi ri-assegnare i seguenti campi:

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

In questo modo posso solo eseguire queste quattro righe di codice e quindi inviare la posta, ancora e ancora, tutte le volte necessarie. I campi Subject, IsHTML e Body sono facilmente modificabili, quindi il problema riscontrato è nella funzione AddAddress.

Come probabilmente si può intuire, dopo aver inviato la prima e-mail, la modifica dei destinatari per le e-mail future si tradurrà in quelli che si sovrappongono all'elenco corrente dei destinatari.

Per dirla semplicemente, come è possibile rimuovere gli indirizzi di posta elettronica associati all'oggetto $mail in modo che sia possibile assegnarli ogni volta rimuovendo i vecchi indirizzi?

C'è un'altra funzione oltre a AddAddress che posso utilizzare che assegnerà solo gli indirizzi?

+0

Come limitare il resto dell'inizializzazione in una funzione? Quindi è possibile creare facilmente un'istanza quasi avviata e impostare il resto dei campi. – Svish

+1

Questo è in realtà quello che sto facendo. Ho una funzione 'init_mailer' che crea l'oggetto e assegna tutte le opzioni tranne quelle quattro righe che ho postato sopra. Sto cercando di ottimizzarlo nel miglior modo possibile. –

risposta

78

È possibile utilizzare ClearAllRecipients()

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

+1

@JoeMajewski, ecco una documentazione http://xref.wordpress.org/trunk/PHPMailer/PHPMailer.html – ravi404

24

im utilizzando questo sempre prima di inviare e-mail ai destinatari:

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

quindi sto facendo proprio questo: (non si utilizza CC o BCC, $ a indirizzo è solo una serie di destinatari)

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

im utilizzando PHPMailer 5,2

+0

Quindi, a giudicare dal post precedente, la funzione 'ClearAllRecipients' rimuoverà gli indirizzi, i CC e i BCC, mentre le funzioni elencate rimuoveranno solo quegli indirizzi nel campo specificato. Chiamare tutte e tre queste funzioni avrà lo stesso effetto di "ClearAllRecipients', se ho capito bene. Grazie mille per il tuo aiuto. –

+1

sì, questo avrà praticamente lo stesso effetto, ma voglio chiamarli in questo modo per applicare la rimozione selettiva (a volte) –

+1

Naturalmente. Non intendo utilizzare alcun CC o BCC nel mio script, quindi userò semplicemente la funzione 'ClearAddresses' per l'efficienza. –

Problemi correlati