2012-06-08 22 views
36

Hay muchas preguntas de StackOverflow sobre este tema, pero no pude encontrar una que pudiera ayudar con el problema que estoy teniendo. La secuencia de comandos que estoy escribiendo envía múltiples correos electrónicos a varios destinatarios con diferentes contenidos de mensajes.phpMailer - Cómo se eliminan los destinatarios

puedo conseguir este trabajo por la re-inicialización de los phpMailer objeto varias veces, pero lo que me gustaría ser capaz de hacer es crear el objeto una sola vez, y luego volver a asignar los siguientes campos:

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

De esa manera puedo simplemente ejecutar esas cuatro líneas de código y luego enviar el correo una y otra vez, tantas veces como sea necesario. Los campos Subject, IsHTML y Body se cambian fácilmente, por lo que el problema que tengo es en la función AddAddress.

Como probablemente adivinará, después de enviar el primer correo electrónico, el cambio de destinatarios para futuros correos dará como resultado que se acumulen en la lista actual de destinatarios.

En pocas palabras, ¿cómo puedo eliminar las direcciones de correo electrónico asociadas con mi objeto $mail para que pueda asignarlas cada vez que elimine las direcciones antiguas?

¿Existe otra función además de AddAddress que pueda usar que solo asigne las direcciones?

+0

¿Qué tal se pegue el resto de la inicialización en una función? Entonces podría crear una instancia casi iniciada fácilmente y establecer el resto de los campos. – Svish

+1

Eso es realmente lo que estoy haciendo. Tengo una función 'init_mailer' que crea el objeto y asigna todas las opciones excepto las cuatro líneas que publiqué arriba. Estoy tratando de optimizar esto lo mejor posible. –

Respuesta

78

puede utilizar ClearAllRecipients()

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

+1

@JoeMajewski aquí hay una documentación http://xref.wordpress.org/trunk/PHPMailer/PHPMailer.html – ravi404

24

im usando esto siempre antes de enviar correo electrónico a los destinatarios:

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

entonces estoy haciendo esto: (no usar CC o CCO, $ a dirección es sólo un conjunto de destinatarios)

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

im utilizando PHPMailer 5,2

+0

Por lo tanto, a juzgar por la publicación anterior, la función 'ClearAllRecipients' eliminará las direcciones, los CC y los BCC, mientras que las funciones enumeradas eliminarán solo esas direcciones en el campo especificado. Llamar a las tres de esas funciones tendrá el mismo efecto que 'ClearAllRecipients', si entiendo correctamente. Muchas gracias por su ayuda. –

+1

sí, esto tendrá el mismo efecto, pero quiero llamarlos de esta manera para aplicar la eliminación selectiva (a veces) –

+1

Por supuesto. No pretendo usar ningún CC o BCC en mi script, así que solo usaré la función 'ClearAddresses' para mayor eficiencia. –

Cuestiones relacionadas