A
medida que aumentan el número de aplicaciones web en internet, los
desarrolladores somos cada vez más conscientes de la importancia de una
comunicación entre la aplicación y el usuario a través del envío de correos
electrónicos (no abusivos) por parte de dicha aplicación. Puede emplearse bien
para recordar contraseñas, para enviar informes de pedidos, enviar facturas,
notificaciones, campañas publicitarias, soporte, etc...
Además
uno de los requisitos indispensables es que la aplicación web pueda enviar
contenido a sus usuarios con la mejor presentación posible y ocupando el menor
espacio.
En este caso vamos a centrarnos en aplicaciones web desarrolladas en PHP y utilizaremos la librería PHPMailer.
En este caso vamos a centrarnos en aplicaciones web desarrolladas en PHP y utilizaremos la librería PHPMailer.
En el
lenguaje PHP ya existe una función nativa para el envío de correo electrónico,
el problema que presenta frente a la solución PHPMailer, es que no soporta
Autentificación ni envío de contenido HTML.
Con la
función Mail nativa de PHP, al no soportar Autentificación no podemos asegurar
que el que envía el correo es quien dice ser, por lo que muchos servidores de
correo catalogan dichos envíos como SPAM, de modo que pocos son los emails que llegan
a su destino. Esto es un gran problema para nuestra aplicación, ya que como
hemos mencionado es imprescindible notificar y captar la atención de los
usuarios para que nuestra aplicación pueda tener éxito.
Otro
punto importante que posibilita la librería PHPMailer es que permite el envío
de contenido HTML lo cual proporciona una gran flexibilidad a la hora de crear
los cuerpos del mensaje tanto en contenido como en diseño.
EJEMPLO
DE ENVÍO DE CORREO ELECTRONICO CON LIBRERÍA PHPMAILER 5.2.1
En
primer lugar descargamos la librería de PHPMailer 5.2.1 de http://phpmailer.apache-extras.org.codespot.com/files/PHPMailer_5.2.1.zip
y descomprimimos, añadiendo la carpeta “PHPMailer_5.2.1” descomprimida en
nuestro proyecto.
Una
vez tenemos la librería descargada utilizaremos la siguiente función php que
hace uso de dicha librería para enviar los correos electrónicos. La función
está comentada con detalle para entender que se hace en cada parte:
function enviarEmailSMTP($origen,$nombreOrigen,$destino,$responderA,$longitudLinea,$tituloEmail,$cuerpoEmail,$servidor,$usuario,$contraseña,$seguridadSMTP,$puerto,$archivosAdjuntos) { require_once('./PHPMailer_5.2.1/class.phpmailer.php'); // Especificamos la utilización de la librería PHPMailer 5.2.1 contenida en el directorio actual $mail = new PHPMailer(true); //el parámetro 'true' significa que lanzará excepciones en los errores que se produzcan, las cuales deben ser capturadas $mail->IsSMTP(); //le decimos a la clase que utilice SMTP try { $mail->SMTPDebug = 0; // activa la información SMTP de depuración (para pruebas) $mail->SMTPAuth = true; //activa autenficicación SMTP $mail->SMTPSecure = $seguridadSMTP; // especifica la seguridad SMTP $mail->Host = $servidor; // especificamos la dirección del servidor de correo $mail->Port = $puerto; // puerto del servidor de correo $mail->Username = $usuario; // usuario del correo origen $mail->Password = $contraseña; //contraseña del correo origen $mail->AddAddress($destino, ''); // dirección de correo destino $mail->SetFrom($origen, $nombreOrigen); // especificamos el origen del correo $mail->Subject = $tituloEmail; // titulo del email $mail->MsgHTML($cuerpoEmail); // cuerpo del email for($i=0;$i<count($archivosAdjuntos);$i++) // recorremos vector de rutas de archivos y adjuntamos { $mail->AddAttachment($archivosAdjuntos[$i]); } $mail->Send(); //Si llegamos a este punto quiere decir que no ha habido ninguna excepción por lo que el envio se realizó correctamente. return true; } catch (phpmailerException $e) { echo $e->errorMessage(); //Excepción de PHPMailer } catch (Exception $e) { echo $e->getMessage(); //Cualquier otra excepción } }
Como
podemos observar esta función utiliza una serie de parámetros de entrada, la
mejor forma de ver que son cada parámetro es mediante un ejemplo de utilización
comentado. El envío se realiza a través de una dirección de GMAIL por ssl:
$origen = "micorreo@gmail.com"; // correo del emisor $nombreOrigen="Mi nombre"; // nombre del emisor $destino = "destino@gmail.com"; // correo del destino $responderA=$origen; // correos a los que queremos que respondan $longitudLinea=50; //longitud de la linea del correo $tituloEmail = "Titulo del email"; // titulo del correo $cuerpoEmail = "Esto es el cuerpo del email, podría tener código HTML."; //cuerpo del correo $servidor = "smtp.gmail.com"; //dirección del servidor de correo $usuario = $origen; //usuario de autentificación $contraseña = "password"; //contraseña de autentificación $seguridadSMTP="ssl"; //seguridad SMTP $puerto=465; //puerto del servicio de correo $archivosAdjuntos=array('./imagenes/logo.png','./archivos/factura.pdf'); //vector de rutas de los archivos a adjuntar en el correo enviarEmailSMTP($origen,$nombreOrigen,$destino,$responderA,$longitudLinea,$tituloEmail,$cuerpoEmail,$servidor,$usuario,$contraseña,$seguridadSMTP,$puerto,$archivosAdjuntos);
Finalmente
mencionar que dependiendo del servidor de correo de la dirección origen los parámetros
serán unos y otros.