> Manuales > Taller de PHP

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.

Nota: Si no tienes servidor SMTP en local para envío de emails en PHP, existen diversos programas que te facilitan esa función como el software PostCastServer que ya comentamos en DesarrolloWeb.com hace años. La mayoría de los servidores de hosting (o al menos todos los que he utilizado) tienen un servidor de SMTP disponible que puedes usar desde PHP. Lo que sí me he encontrado en alguna ocasión es con un proveedor de hosting que requiere autenticación SMTP para enviar correos desde PHP. Para todos estos casos, ¡PHPMailer es un aliado excepcional!

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.

Nota: En esta ocasión he simplificado algo el código del ejemplo, pues parte del código está comentado con detalle en el artículo de introducción a PHPMailer. El ejemplo que estoy comentando a continuación está basado en el código que encontramos en la descarga del PHPMailer, en el archivo test_smtp_gmail_basic.php de la carpeta "examples".

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.

Nota: Mediante un script similar también podríamos enviar email desde PHP usando servidores SMTP de otros proveedores gratuitos como Hotmail (ahora Outlook.com) o el que tengas. Simplemente tienes que saber los datos de configuración de ese servicio (dirección de email, servidor de SMTP, usuario y clave, así como el puerto). Simplemente se trataría de indicar todos datos de esa cuenta de correo que pretendes usar.

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.

Nota: Lo primero, claro está, es comprobar que tu cuenta Gmail está perfectamente especificada. Me refiero al nombre de usuario y la contraseña de Gmail, que debes haber indicado en el las propiedades $mail­>Username y $mail­>Password. Lo segundo es verificar el puerto, que en mi caso ha funcionado con el valor 465.

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...

Manual