La gran mayoría de personas que programan en PHP, utilizan la función mail() para realizar envíos, ya sean simples o complejos. El problema está cuando intentan realizar envíos masivos con esta función. Esta es mucho más simple por su compatibilidad y facilidad de uso con MySQL, pero no esta preparada para grandes cantidades de envíos.
Por suerte, existen clases como PHPMailer, que nos permiten realizar estos mismos envíos por el puerto y smtp que queramos, creando una aplicación mucho más potente y con la posibilidad de tener un mejor control de los envíos al existir reportes de correo.
PHPMailer es una clase de PHP gratuita y la puedes descargar en: https://github.com/PHPMailer/PHPMailer
Algunas de las funciones que trae son:
- Envíos a varios remitentes, con CC, CCO, etc.
- Soporta 8bits, base64 y binarios
- Autenticación por SMTP
- Envíos con HTML
- Envíos de emails con adjuntos
- Inclusión de imágenes en el correo
Una vez que tenemos la clase en nuestro sitio, debemos iniciar la misma desde PHP, usando la función require y cargando la clase de PHP:
require("class.phpmailer.php"); $mail = new PHPMailer(); //Luego tenemos que iniciar la validación por SMTP: $mail->IsSMTP(); $mail->SMTPAuth = true; $mail->Host = ""; // SMTP a utilizar. Por ej. smtp.elserver.com $mail->Username = ""; // Correo completo a utilizar $mail->Password = ""; // Contraseña $mail->Port = 25; // Puerto a utilizar //Con estas pocas líneas iniciamos una conexión con el SMTP. Lo que ahora deberíamos hacer, es configurar el mensaje a enviar, el //From, etc. $mail->From = "info@elserver.com"; // Desde donde enviamos (Para mostrar) $mail->FromName = "Nombre"; //Estas dos líneas, cumplirían la función de encabezado (En mail() usado de esta forma: “From: Nombre <correo@dominio.com>”) de //correo. $mail->AddAddress("correo"); // Esta es la dirección a donde enviamos $mail->IsHTML(true); // El correo se envía como HTML $mail->Subject = “Titulo”; // Este es el titulo del email. $body = “Hola mundo. Esta es la primer línea<br />”; $body .= “Acá continuo el <strong>mensaje</strong>”; $mail->Body = $body; // Mensaje a enviar $exito = $mail->Send(); // Envía el correo. //También podríamos agregar simples verificaciones para saber si se envió: if($exito){ echo ‘El correo fue enviado correctamente.’; }else{ echo ‘Hubo un inconveniente. Contacta a un administrador.’; }
Adjuntos
Este script va a funcionar perfecto, pero está claro que no todos los clientes de correo o Webmails soportan HTML, por lo que podríamos querer mostrar un texto alternativo plano. Esto lo podemos hacer agregando la siguiente línea:
$mail->AltBody = "Hola mundo. Esta es la primer línean Acá continuo el mensaje”;
Como bien comente antes, PHPMailer tiene cantidades de funciones, entre ellas la posibilidad de enviar adjuntos. Los mismos se pueden agregar de la siguiente forma:
$mail->AddAttachment("imagenes/imagenadjunta.jpg", "nombre_a_mostrar.jpg");
El primer valor es el que se utiliza para elegir la ruta del archivo. El segundo, es para marcar el nombre del archivo a mostrar.
CC y BBC
También tenemos la posibilidad de agregar cuentas en copia oculta para cuando tenemos muchos remitentes con las siguientes líneas:
$mail->AddCC("cuenta@dominio.com"); $mail->AddBCC("cuenta@dominio.com");
Sistema completo
Para finalizar, dejo el sistema completo para que no haya confusiones:
<?php require("class.phpmailer.php"); $mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPAuth = true; $mail->Host = ""; // SMTP a utilizar. Por ej. smtp.elserver.com $mail->Username = ""; // Correo completo a utilizar $mail->Password = ""; // Contraseña $mail->Port = 25; // Puerto a utilizar $mail->From = "info@elserver.com"; // Desde donde enviamos (Para mostrar) $mail->FromName = "ELSERVER.COM"; $mail->AddAddress("correo"); // Esta es la dirección a donde enviamos $mail->AddCC("cuenta@dominio.com"); // Copia $mail->AddBCC("cuenta@dominio.com"); // Copia oculta $mail->IsHTML(true); // El correo se envía como HTML $mail->Subject = "Titulo"; // Este es el titulo del email. $body = "Hola mundo. Esta es la primer línea<br />"; $body .= "Acá continuo el <strong>mensaje</strong>"; $mail->Body = $body; // Mensaje a enviar $mail->AltBody = "Hola mundo. Esta es la primer línean Acá continuo el mensaje"; // Texto sin html $mail->AddAttachment("imagenes/imagen.jpg", "imagen.jpg"); $exito = $mail->Send(); // Envía el correo. if($exito){ echo "El correo fue enviado correctamente."; }else{ echo "Hubo un inconveniente. Contacta a un administrador."; } ?>