Un caso práctico de uso de la clase PHPMailer en el que enviamos correo desde PHP usando el servidor SMTP de Gmail.
En el artículo anterior del taller de PHP explicamos algunos detalles básicos sobre la clase PHPMailer y vimos lo sencillo que era enviar un correo electrónico con características avanzadas, como adjuntar archivos. Pero hay un ejemplo que nos dejamos en el tintero que creo que merece la pena tratar de manera independiente: el envío de email desde PHP, pero usando un servidor SMTP distinto del que tengas configurado en tu php.ini.
Una de las curiosidades, o utilidades, de PHPMailer es la posibilidad de enviar email usando el servidor SMTP de Gmail. Puede servirte de utilidad cuando no tienes tu propio servidor de SMTP, aunque personalmente tengo mis reservas y por eso me refiero a ello más como una curiosidad que otra cosa.
No obstante, el ejemplo de envío de email usando los servidores de envío de Gmail es interesante porque ilustra una de las necesidades que podemos tener en algunos casos, como es el uso de un servidor SMTP que requiera autenticación.
La idea es bien simple, usar los datos de una cuenta de correo Gmail para enviar los mensajes, indicando en PHPMailer los datos de esa cuenta de Google que vas a usar.
require_once('../class.phpmailer.php');
$mail = new PHPMailer();
//indico a la clase que use SMTP
$mail>IsSMTP();
//permite modo debug para ver mensajes de las cosas que van ocurriendo
$mail>SMTPDebug = 2;
//Debo de hacer autenticación SMTP
$mail>SMTPAuth = true;
$mail>SMTPSecure = "ssl";
//indico el servidor de Gmail para SMTP
$mail>Host = "smtp.gmail.com";
//indico el puerto que usa Gmail
$mail>Port = 465;
//indico un usuario / clave de un usuario de gmail
$mail>Username = "tu_correo_electronico_gmail@gmail.com";
$mail>Password = "tu clave";
$mail>SetFrom('tu_correo_electronico_gmail@gmail.com', 'Nombre completo');
$mail>AddReplyTo("tu_correo_electronico_gmail@gmail.com","Nombre completo");
$mail>Subject = "Envío de email usando SMTP de Gmail";
$mail>MsgHTML("Hola que tal, esto es el cuerpo del mensaje!");
//indico destinatario
$address = "destinatario@delcorreoe.com";
$mail>AddAddress($address, "Nombre completo");
if(!$mail>Send()) {
echo "Error al enviar: " . $mail>ErrorInfo;
} else {
echo "Mensaje enviado!";
}
Este código está comentado, por lo que se puede entender bastante bien. Solo llamar la atención sobre el tema del "debug" del servicio SMTP $mail>SMTPDebug = 2; Con esto le indicamos que nos muestre mensajes del proceso de comunicación con el servidor SMTP que estemos usando, así como posibles errores. Podríamos colocarle también como valor el número 1, para decirle que solo nos muestre mensajes de error encontrados. O bien, si no asignamos nada en la propiedad SMTPDebug, no nos mostrará ningún mensaje adicional a los que PHPMailer ya muestra de manera predeterminada.
Posibles problemas al usar otro servidor SMTP autenticado desde PHP
Este ejemplo de uso de PHPMailer puede acarrear diversos problemillas que quizás nos hagan perder alguna hora de trabajo. Nada que no se pueda resolver con un rato de pruebas y algo de calma, pero para simplificarte la vida te comento cómo me ha ido a mi.Este ejemplo lo he conseguido hacer funcionar en dos ordenadores distintos. En mi ordenador con Linux, donde he instalado PHP siguiendo las indicaciones del artículo Instalar Lamp: Apache MySQL PHP, en Linux, ¡he corrido el script con éxito y me ha enviado el correo a la primera!
Pero claro, como todo en la vida no siempre te salen las cosas a la primera y en mi otro ordenador, con un sistema Windows con donde tengo instalado PHP por medio de Xampp, no he tenido la misma suerte. Sin embargo, la solución es bien sencilla.
Desde el sistema Windows con Xampp recibo el siguiente mensaje de error "Unable to find the socket transport 'ssl' did you forget to enable it when you configured PHP?"
La solución pasa por activar la extensión openssl de PHP, para lo que he descomentado en el php.ini la línea (quitado el punto y coma ";" al principio):
extension=php_openssl.dll
Después de esa pequeña configuración, y reiniciado el Apache (por supuesto), se puede enviar sin problemas el email desde mi Xampp instalado en Windows.
Conclusión sobre PHPMailer
Si alguna vez has intentado enviar un archivo adjunto en un email con PHP, habrás comprobado que no era algo inmediato. Si alguna vez has intentado usar un servidor SMTP desde PHP que requiera autenticación, probablemente te habrás vuelto loco al intentar configurar PHP. Si alguna vez quisiste enviar un correo en PHP usando un servidor SMTP no configurado en el php.ini, quizás te habrás dado de cara contra una pared.Si quieres salvar todas esas barreras y seguro que muchas otras, tienes la opción de usar PHPMailer que funciona muy bien, simplifica tareas de envío de email avanzadas y te da soporte a muchas cosas que quizás no sabías hacer de otra manera.
Este artículo ha partido de la base que conocías las características fundamentales de
PHPMailer, relatadas en una publicación anterior. Por lo que te recomendamos leer de nuevo
dicho artículo si piensas que nos hemos dejado en el aire ciertas cosas. Pero en definitiva,
creemos que PHPMailer es una clase importante a tener en cuenta.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...