Enviar email multiple con Php

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.

  1. mysql_connect("localhost", "usuario", "password");
  2. mysql_select_db("tienda");
  3. $result = mysql_query("SELECT nombres, email FROM clientes");
  4. while ($row = mysql_fetch_array($result)) {
  5. // echo $row["nombres"];
  6. }

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.

  1. require("class.phpmailer.php");
  2. $mail = new PHPMailer();
  3. $mail->Host = "smtp1.example.com";
  4. $mail->From = "list@domain.com";
  5. $mail->FromName = "List manager";
  6. $mail->Subject = "Subject del correo";
  7. mysql_connect("localhost", "usuario", "password");
  8. mysql_select_db("tienda");
  9. $result = mysql_query("SELECT nombres, email FROM clientes");
  10. while ($row = mysql_fetch_array($result)) {
  11. // HTML body
  12. $body = "Hola ".$row["nombres"].", ";
  13. $body.= "

    Les comunicamos el nuevo servicio...

    ";

  14. $body.= "List manager";
  15. // Text body
  16. $text = "Hola ".$row["nombres"].", \n\n";
  17. $text.= "Les comunicamos el nuevo servicio...\n\n";
  18. $text.= "List manager";
  19. // Configurar Email
  20. $mail->Body = $body;
  21. $mail->AltBody = $text;
  22. $mail->AddAddress($row["email"], $row["nombres"]);
  23. // Enviar el email
  24. if(!$mail->Send()) {
  25. echo "Error al enviar a: " . $row["email"] . "
    "
    ;
  26. }
  27. $mail->ClearAddresses();
  28. }

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.

No hay comentarios:

Publicar un comentario