Envío de correos masivos desde PHP

Requisitos:

  • PHP
  • MySQL
  • PHPMailer

¿Que es PHPMailer?

Es una librería que permite poder enviar correos electrónicos de forma fácil, simple y efectiva desde correos SMTP, GMAIL o desde nuestro propio servidor de correo electrónico. Puedes descargar dicha librería aquí: https://github.com/Synchro/PHPMailer

Ejemplo básico:

  1. Crear la base de datos:
  2. --
    -- Base de datos: `dbMail`
    --
    create database dbMail;
    use dbMail;
    
    --
    -- Estructura de tabla para la tabla `person`
    --
    CREATE TABLE `person` (
      `idperson` int(11) NOT NULL,
      `nameperson` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
      `emailperson` varchar(60) COLLATE utf8_unicode_ci NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    
    --
    -- Indices de la tabla `person`
    --
    ALTER TABLE `person`
      ADD PRIMARY KEY (`idperson`);
    
  3. Llenar la base de datos.
  4. Descargamos desde https://github.com/Synchro/PHPMailer en formato zip (boton abajo a la derecha) la librería PHPMailer
  5. Descomprimimos la librería en la carpeta que utilizamos de HOST.
  6. Creamos nuestro script HTML/PHP
  7. <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
            <title>PHPMailer - GMail SMTP Test</title>
        </head>
        <body>
            <?php
                // Libreria PHPMailer
                require './Resources/PHPMailer/PHPMailerAutoload.php';
                
                // Creamos una nueva instancia
                $mail = new PHPMailer();
     
                // Activamos el servicio SMTP
                $mail->isSMTP();
                // Activamos / Desactivamos el "debug" de SMTP (Lo activo para ver en el HTML el resultado)
                // 0 = Apagado 
                // 1 = Mensaje de Cliente 
                // 2 = Mensaje de Cliente y Servidor 
                $mail->SMTPDebug = 2; 
    
                // Log del debug SMTP en formato HTML 
                $mail->Debugoutput = 'html'; 
    
                // Servidor SMTP (para este ejemplo utilizamos gmail) 
                $mail->Host = 'smtp.gmail.com'; 
    
                // Puerto SMTP 
                $mail->Port = 587;
     
                // Tipo de encriptacion SSL ya no se utiliza se recomienda TSL 
                $mail->SMTPSecure = 'tls'; 
    
                // Si necesitamos autentificarnos 
                $mail->SMTPAuth = true; 
    
                // Usuario del correo desde el cual queremos enviar, para Gmail recordar usar el usuario completo (usuario@gmail.com) 
                $mail->Username = "gymcaobacr@gmail.com"; 
    
                // Contraseña 
                $mail->Password = "HolaAmigo"; 
     
                // Conectamos a la base de datos 
                //El orden es: dirección del host, usuario, contraseña, nombre de la base de datos.
                $db = new mysqli('localhost', 'root', '', 'dbMail'); 
    
                if ($db->connect_errno > 0) 
                {
                    die('Error connect: [' . $db->connect_error . ']'); 
                } 
    
                // Creamos la sentencias SQL 
                $result = $db->query("select nameperson,emailperson from person;");
    
                // Iniciamos el "bucle" para enviar multiples correos. 
                while($row = $result->fetch_assoc())
                { 
                    //Añadimos la direccion de quien envia el corre, en este caso 
                    //YARR Blog, primero el correo, luego el nombre de quien lo envia. 
                    $mail->setFrom('gymcaobacr@gmail.com', 'YARR Blog'); 
                    $mail->addAddress($row['emailperson'], $row['nameperson']); 
    
                    //La linea de asunto 
                    $mail->Subject = 'Welcome to YARR Blog!'; 
                    
                    /*
                     * Existen dos formas de mandar un correo:
                     * - Escribiendo el mensaje en un String y mandarlo. (Así se va hacer en el ejemplo).
                     * - Crear un HTML e ingresarlo Se haría así:
                     * $mail->msgHTML(file_get_contents('contenido.html'), dirname(__FILE__)); 
                     * PHPMailer permite insertar imágenes, css, etc.
                     * NOTA: No se recomienda el uso de JavaScript.
                     * 
                     * Mediante un String se haría así:
                     */
                    //Creamos el mensaje
                    $message = "Hello ".$row['nameperson'].", this is a email message from YARR Blog.";
                    
                    //Agregamos el mensaje al correo
                    $mail->msgHTML($message);
                    
                    // Enviamos el Mensaje 
                    $mail->send(); 
    
                    // Borramos el destinatario, de esta forma nuestros clientes no ven los correos de las otras personas y parece que fuera un único correo para ellos. 
                    $mail->ClearAddresses(); 
                }  
            ?>
        </body>
    </html>
    
  8. Corren dicho documento y debe generar un resultado HTML como el siguiente:
  9. Con el ejemplo anterior, a las personas les va a llegar un correo como el siguiente:
Pueden descargar el repertorio del ejemplo aquí.
Agradecimiento a CodeJobs.

2 comentarios: