Para enviar correos por PHP, 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.
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 título 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.’;
}
?>