Enviar email multiple con PHP
- 23/06/2008
- 12:37 am
En algunas ocasiones nos topamos con la necesidad de enviar email a una lista de correo, esto lo podemos hacer utilizando la librería PHPMailer el cual nos permite enviar emails con algunas opciones avanzadas para este tipo de labores.

Extraer datos de los destinatarios
Sea que tenemos una lista de clientes registrados en una base de datos tienda en la tabla clientes y deseamos enviarle un comunicado a cada uno de ellos de forma personalizada. Lo primero que tenemos que hacer es realizar la consulta a la base de datos y extraer los datos de estos clientes.
-
// echo $row["nombres"];
-
}
Integrando con PHPMailer
El siguiente paso es hacer el envío de los correos, para ello primero incluimos la clase class.phpmailer.php, definimos los datos del remitente y creamos el mensaje personalizado en html y texto a enviar a la lista.
-
require("class.phpmailer.php");
-
-
$mail = new PHPMailer();
-
$mail->Host = "smtp1.example.com";
-
$mail->From = "list@domain.com";
-
$mail->FromName = "List manager";
-
$mail->Subject = "Subject del correo";
-
-
// HTML body
-
$body = "Hola <strong>".$row["nombres"]."</strong>, ";
-
$body.= "<p>Les comunicamos el nuevo servicio... <p>";
-
$body.= "<em>List manager</em>";
-
// Text body
-
$text = "Hola ".$row["nombres"].", \n\n";
-
$text.= "Les comunicamos el nuevo servicio...\n\n";
-
$text.= "List manager";
-
// Configurar Email
-
$mail->Body = $body;
-
$mail->AltBody = $text;
-
$mail->AddAddress($row["email"], $row["nombres"]);
-
// Enviar el email
-
if(!$mail->Send()) {
-
}
-
$mail->ClearAddresses();
-
}
Nótese que incluimos la dirección del destinatario con el método AddAddress en donde le pasamos el email y el nombre de la persona a la que deseamos enviar el email y finalmente utilizamos ClearAddresses el cual elimina las email a los cuales se ha enviado anteriormente el mensaje, de esta forma le llegará a cada usuario una mensaje único si necesidad de mostrar a quienes mas se esta enviando el mensaje.
Observaciones
En el caso que se quiera enviar a listas muy grandes, se deben cambiar algunos parámetros de configuración de PHP por ejemplo el tiempo de ejecución para que no se detenga el envío si el tiempo de proceso excede el tiempo de configuración. Una solución es hacer el envío en bloques de 500 o en bloques de 1000 por vez por ejemplo con lo cual no se superará el tiempo limite.
Finalmente les dejo los archivos fuente para que lo descarguen y realicen sus propias pruebas.
Posts Relacionados
- Envíar E-mail con PHP
- Javascript: Evitar doble Submit
- Enviar email con Flash y PHP
- Enviar email con AS3 y PHP
- AutoClear en Formularios HTML
Total de Comentarios: 14
Preguntilla… ademas de la config del tiempo de load, puedo hacer:
[php]
require(”class.phpmailer.php”);
$mail = new PHPMailer();
$mail->Host = “smtp1.example.com”;
$mail->From = “list@domain.com”;
$mail->FromName = “List manager”;
$mail->Subject = “Subject del correo”;
$body = “lo que sea”;
// bd …
while($bd){
$mail->AddAddress(”$bd”, “$bd”);
}
$mail->Send();
[/php]
o dices que no funcionara? me refiero si esta libreria tiene un limite de maximos de destinatarios.
Es muy probable que haya un limite de direcciones de correo a la cual se pueda enviar el correo a la vez por lo cual es recomendables hacer el envío uno por uno a cada usuario.
De lujo mi hermano, realmente andaba buscando algo así. Soy un gran admirador de tu trabajo. Todo lo que he encontrado aquí me ha servido muchísimo. Muchas gracias.
y … idea de ese numero de maximo usuarios a la vez?
para 15.000 usuarios creo que tardara pero luego implantare el sistema y te cuento.
Gracias por la información, pero tengo un problema, estoy trabajando con un servidor local y me da un error:
require(”class.phpmailer.php”);
$mail = new PHPMailer();
$mail->Host = “www.aves.edu.co”;
$mail->From = “dsalas@aves.edu.co”;
$mail->FromName = “Servidor web”;
$mail->Subject = “Socio nuevo”;
$mail->AddAddress(”deivisjoro@hotmail.com”, “Altas”);
$body = “Nuevo socio\r\n”;
$body .= “Nombre: $nombre\r\n”;
$body .= “Edad: $edad\r\n”;
$mail->Body = $body;
if(!$mail->Send())
echo $mail->ErrorInfo;
Could not instantiate mail function.
buen tutotial
algun codigo para evitar el spam o una explicacion ya que en tu formulario no aplicas ninguna opcion para evitar el spam
deivisjoro… tu hosting o php tiene function ()mail?
porque si mal no estoy, este script usa esta funcion para poder mandar el mail…
Saludos :)…
me han encantado tus tutoriales pero quisiera saber cuantas tablas o cuales son las que necesita el mail lista ya que me sale el siguiente Orror:
“Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\bases\CORREO\php-mail-list\maillist.php on line 13
”
a lo cual ya tenia la base y las supuestas tablas pero al parecer solo hace conexion con la base.
gracias de antemano
hola mira sabes esta recontra intrsante tu pagina, el phpmailer lo descarge y todo pero dime tengo q configurar algo en el phpmailer o no?`porfa ayudame si ? y q partes de phpmailer tendria q cambiar si me ayudas seria de buena infornmacion para ti,, cuidate y gracias, espero tu pronta respuesta
Excellente Hermano, estaba en busca de una class que hiciese esto y en lo personal que estuviese bien documentada y ordena, me parece esta muy buena, y en lo personal, soy admirar de tu blog ya que soy programador y en este blog he llegado por casualidad en busquedas de google y casi siempre he encontrado buen material y mas que todo buena documentacion de lo que tratas de explicar que es lo principal
estoy trabajando localmente y me sale error como podria cconfiguralo localmente
Yo Ya lo estoy poniendo en practica aunque por el momento solo para dos usuario..
Les dejo el Codio Ami Me Funciona…
Efrain yo estoy trabajando Localmente….
Te Dejo el Codigo….
Tienes que Actuvar en Apache el modulo ssl. para que Funcione..
IsSMTP();
$mail->Host = ’ssl://smtp.gmail.com’;
$mail->Port = 465;
$mail->SMTPAuth = true;
$mail->Username = ‘tumailaqui@gmail.com’;
$mail->Password = ‘tupasswors aqui’;
//$mail->Host = “ssl://smtp.gmail.com”;
$mail->FromName = “List manager”;
$mail->Subject = “Subject del correo”;
mysql_connect(”localhost”, “root”, “”);
mysql_select_db(”web_de”);
$result = mysql_query(”SELECT nombre, correoe FROM user”);
while ($row = mysql_fetch_array($result)) {
// HTML body
$body = “Hola “.$row["nombre"].”, “;
$body.= “Les comunicamos el nuevo servicio… “;
$body.= “List manager“;
// Text body
$text = “Hola “.$row["nombre"].”, \n\n”;
$text.= “Les comunicamos el nuevo servicio…\n\n”;
$text.= “List manager”;
// Configurar Email
$mail->Body = $body;
$mail->AltBody = $text;
$mail->AddAddress($row["correoe"], $row["nombre"]);
// Enviar el email
if(!$mail->Send()) {
echo ‘Error: ‘ . $mail->ErrorInfo;
echo “Error al enviar a: ” . $row["correoe"] . “”;
}
else {
echo “Mail enviado!”;
}
$mail->ClearAddresses();
}
?>
Buenas!! Yo estaba haciendo algo muy similar con esto… pero me surgio un problema… estoy usando como servidor a Gmail, por lo tanto, estoy mandando los mails con una cuenta mia de Gmail… pero tengo algunos dramas… primero… tarda bastante en enviar… mandando 4 o 5 mails por minuto… y al intentar mandar 1000 mails, despues de los 400 o 500 me tira el siguiente error:
Mailer Error: Language string failed to load: data_not_accepted
Alguien podria darme una mano?? Gracias
Interesante todo comentario, quisiera saber como hago,,en mi PC tengo windows XP, y mi host tiene LINUX, como hago para trabajar en mi PC para luego subirlo a mi host, que tipo de PHP utilizo,, GRACIAS


