Spanish (Español) translation by Rene Soto (you can also view the original English article)
En este artículo, vamos a explorar la librería Swift Mailer, que te permite enviar correos electrónicos desde aplicaciones PHP. Comenzando con la instalación y la configuración, veremos un ejemplo practico que demuestra varios aspectos del envío de correos electrónicos utilizando la biblioteca de Swift Mailer.
¿Qué es Swift Mailer?
Cuando se trata de enviar correos electrónicos en aplicaciones PHP, se tiene una gran cantidad de opciones para elegir. Incluso podrías terminar creando tu propio contenedor para configurar funciones de correo electrónico rápidamente. Sin embargo, siempre estarás de suerte si estás utilizando una biblioteca bien mantenida y rica en funciones.
Swift Mailer es una librería popular para enviar correos electrónicos desde aplicaciones PHP, y es ampliamente aceptada por la comunidad PHP. Es una librería rica en funciones en el sentido de que abarca casi todos los aspectos de envío de correos electrónicos, desde la configuración de diferentes transportes hasta la personalización del mensaje que se envía.
De hecho, es un proceso bastante sencillo para enviar correos electrónicos utilizando la librería de Swift Mailer.
- Iniciar el objeto Transport (SMTP / Sendmail).
- Iniciar el objeto Mailer con ese Transport.
- Iniciar el objeto Message.
- Dar el formato y enviar el mensaje.
En la siguiente sección, revisaremos un ejemplo práctico para demostrar cada uno de los pasos antes mencionados.
Instalación y configuración
En esta sección, veremos la instalación y configuración de la librería de Swift Mailer. La instalación es bastante sencilla, ya que está disponible como un paquete Composer. Antes de continuar, asegúrese de haber instalado Composer porque lo necesitaremos para instalar la librería de Swift Mailer.
Una vez que hayas instalado Composer, continúa y tome la libreria de Swift Mailer con el siguiente comando.
$composer require "swiftmailer/swiftmailer:^6.0"
Con eso, se debe instalar la biblioteca de Swift Mailer, junto con las dependencias necesarias en el directorio del proveedor. Y el contenido del recién creado composer.json debería verse así
{ "require": { "swiftmailer/swiftmailer": "^6.0" } }
Esa es la parte de la instalación, pero ¿cómo se supone que debes usarla? De hecho, solo se trata de incluir el archivo autoload.php creado por Composer en su aplicación, como se muestra en el siguiente fragmento.
<?php require_once './vendor/autoload.php'; // your application code... ?>
Como enviar Correos Electrónicos
En la sección anterior, exploramos cómo instalar la biblioteca de Swift Mailer usando Composer. En esta sección, comenzaremos a implementar un ejemplo del mundo real. Continúa y crea el archivo email.php con los siguientes contenidos.
Continúa y crea el archivo email.php con los siguientes contenidos.
<?php require_once './vendor/autoload.php'; try { // Create the SMTP Transport $transport = (new Swift_SmtpTransport('smtp.hostname', 25)) ->setUsername('xxxxxxxx') ->setPassword('xxxxxxxx'); // Create the Mailer using your created Transport $mailer = new Swift_Mailer($transport); // Create a message $message = new Swift_Message(); // Set a "subject" $message->setSubject('Demo message using the SwiftMailer library.'); // Set the "From address" $message->setFrom(['sender@gmail.com' => 'sender name']); // Set the "To address" [Use setTo method for multiple recipients, argument should be array] $message->addTo('recipient@gmail.com','recipient name'); // Add "CC" address [Use setCc method for multiple recipients, argument should be array] $message->addCc('recipient@gmail.com', 'recipient name'); // Add "BCC" address [Use setBcc method for multiple recipients, argument should be array] $message->addBcc('recipient@gmail.com', 'recipient name'); // Add an "Attachment" (Also, the dynamic data can be attached) $attachment = Swift_Attachment::fromPath('example.xls'); $attachment->setFilename('report.xls'); $message->attach($attachment); // Add inline "Image" $inline_attachment = Swift_Image::fromPath('nature.jpg'); $cid = $message->embed($inline_attachment); // Set the plain-text "Body" $message->setBody("This is the plain text body of the message.\nThanks,\nAdmin"); // Set a "Body" $message->addPart('This is the HTML version of the message.<br>Example of inline image:<br><img src="'.$cid.'" width="200" height="200"><br>Thanks,<br>Admin', 'text/html'); // Send the message $result = $mailer->send($message); } catch (Exception $e) { echo $e->getMessage(); }
Veamos cómo funciona este código.
Inicializar Swift Mailer
La biblioteca de Swift Mailer admite diferentes
transportes como SMTP y Sendmail mientras envía un correo electrónico.
Entonces, lo primero que debe hacer es inicializar el objeto transport.
En el ejemplo anterior, he utilizado el transporte SMTP para enviar correos electrónicos.
$transport = (new Swift_SmtpTransport('smtp.hostname', 25)) ->setUsername('xxxxxxxx') ->setPassword('xxxxxxxx');
Por supuesto, si desea utilizar el protocolo Sendmail, deberá inicializar el correspondiente objeto Swift_SendmailTransport.
// Create the SendMail Transport $transport = new Swift_SendmailTransport('/usr/sbin/sendmail -bs');
Una vez que se crea el transporte, necesitamos inicializar un objeto de correo y pasar el transporte que ya hemos creado.
// Create the Mailer using your created Transport $mailer = new Swift_Mailer($transport);
Crear un mensaje
Después de crear los objetos de transporte y envío, lo único que queda es crear una instancia del objeto Swift_Message y decorarlo con los atributos necesarios.
// Create a message $message = new Swift_Message();
Ahora, usaremos el objeto $message para preparar el contenido de nuestro mensaje. Para empezar, el método setSubject le permite establecer el asunto del correo electrónico.
// Set a "subject" $message->setSubject('Demo message using the SwiftMailer library.');
El método setFrom se usa para establecer la dirección "De" del correo electrónico.
// Set the "From address" $message->setFrom(['sender@gmail.com' => 'Sender Name']);
Avanzando, establezcamos la dirección "Para" del correo electrónico. De hecho, hay un par de variaciones para configurar los destinatarios del correo electrónico. Si desea configurar un único destinatario, puede usar el método addTo, y el método setTo, por otro lado, se usa para configurar varios destinatarios.
// Set the "To address" [Use setTo method for multiple recipients, argument should be array] $message->addTo('recipient@gmail.com','receiver name');
Los métodos addCc y addBcc se utilizan para configurar las direcciones CC y BCC del correo electrónico, respectivamente.
// Add "CC" address [Use setCc method for multiple recipients, argument should be array] $message->addCc('recipient@gmail.com', 'recipient name'); // Add "BCC" address [Use setBcc method for multiple recipients, argument should be array] $message->addBcc('recipient@gmail.com', 'recipient name');
Adjuntar archivos
A continuación, echemos un vistazo a cómo puede adjuntar un archivo a un correo electrónico.
Primero necesitas crear una instancia del objeto Swift_Attachment con un nombre de archivo válido. Después de crear el objeto adjunto, puede agregarlo al correo electrónico con el método adjunto. Además, puede usar el método setFilename si desea cambiar el nombre del archivo que aparecerá en el archivo adjunto del mensaje.
// Add an "Attachment" (Also, the dynamic data can be attached) $attachment = Swift_Attachment::fromPath('example.xls'); $attachment->setFilename('report.xls'); $message->attach($attachment);
Junto con archivos adjuntos normales, a veces desea incrustar imágenes en el texto del mensaje. Puede hacerlo utilizando el método de inserción, como se muestra en el siguiente fragmento. El método embed devuelve la identificación única del objeto incrustado, que puede usar más adelante en el mensaje al hacer referencia a la imagen a través de la propiedad src.
// Add inline "Image" $inline_attachment = Swift_Image::fromPath('nature.jpg'); $cid = $message->embed($inline_attachment);
El Cuerpo del Mensaje
A continuación, establezcamos el cuerpo del correo electrónico utilizando el método setBody.
// Set the plain-text "Body" $message->setBody("This is the plain text body of the message.\nThanks,\nAdmin");
Si desea establecer la versión HTML del mensaje, puede usar el método addPart, como se muestra en el siguiente fragmento. Como puede ver, estamos usando $cid para hacer referencia a la imagen que incorporamos anteriormente.
// Set a "Body" $message->addPart('This is the HTML version of the message.<br>Example of inline image:<br><img src="'.$cid.'" width="200" height="200"><br>Thanks,<br>Admin', 'text/html');
Enviar el Mensaje
¡Envía el mensaje! Finalmente, usaremos el método send del objeto Mailer para enviar el correo electrónico.
// Send the message $result = $mailer->send($message);
Intenta ejecutar el script, ¡y deberías recibir
un correo electrónico! Avísame en la sección de comentarios si tienes algún
problema.
Conclusión
Hoy, miramos una de las bibliotecas PHP más populares para
enviar correos electrónicos: Swift Mailer. Con esta biblioteca, puede enviar
fácilmente correos electrónicos desde sus scripts PHP. Siéntase libre de
publicar sus pensamientos y consultas mediante el siguiente formulario.
Siéntate libre de publicar sus pensamientos y consultas mediante el siguiente formulario.