Cuando estamos desarrollando una aplicación no queremos que los correos que se envían desde ésta desde nuestro entorno de pruebas, lleguen a correos reales, ya que se llenarían los inbox de correos de prueba. Para evitar esto, existen varias harramientas que nos permiten enviar correos desde nuestro entorno de pruebas y que lleguen todos estos correos a un mismo inbox. Veremos dos herramientas diferentes que hacen esto, la primera será con Mailtrap.io, que es una aplicación online, y la segunda con MailHog, que es un paquete que tendremos que instalar en nuestro local y todo esto lo configuraremos para que funcione con Laravel.
? Enviar correos de prueba con Mailtrap.io
Mailtrap.io es una aplicación online, la cual nos proveé un servidor SMTP falso para que podamos ver, testear y compartir los correos salientes de nuestra aplicación en entornos de prueba. Todos los correos salientes irán a parar al inbox de Mailtrap.io. Así no tendremos que preocuparnos por si estos correos de prueba llegan a los correos reales, ya que si tenemos configurado Mailtrap.io, siempre llegarán a su inbox.
Mailtrap.io tiene varios planes. Uno gratis y dos de pago. Según tus necesidades deberás elegir el que más te convenga. Yo voy a utilizar el plan Free.
Procedemos al registro en la aplicación, nos podremos registrar de varias maneras:
Una vez registrados y accedamos dentro, verás una página llamada “My inboxes” en está página aparecerán una lista de todos los inbox que habéis creado y sus datos. Si tienes una cuentra Free, solamente podrás tener 1 inbox.
Si entramos en el inbox de prueba, veremos que a la derecha hay varias pestañas. La primera pestaña tiene unos datos SMTP y POP y abajo nos salen las integraciones con diferentes frameworks y lenguajes. Estos datos SMTP serán los que tendremos que añadir en nuestro .env de nuestro proyecto con Laravel.
Vamos a archivo .env y añadimos los siguientes datos:
1 2 3 4 5 6 7 8 |
MAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=username smtp mailtrap.io MAIL_PASSWORD=password smtp mailtrap.io MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=correo MAIL_FROM_NAME=nombre que saldrá en el correo enviado |
Para comprobar que funciona vamos a enviar un correo desde Laravel. Para hacerlo de manera simple y rápida, porque se podría hacer de otra manera, vamos a poner este código en un controlador. Simplemente es para probar que se envían los correos y llegan correctamente a Mailtrap.io:
1 2 3 4 5 6 7 |
use Mail; Mail::send('mails.test', [], function ($mail) { $mail->to('test@test.com')->subject('Test'); }); |
Le estamos indicando en el primer parámetro del método send la vista de nuestro email, el segundo serán los datos que tendrá acceso el mail (yo no he pasado ningúno, pero es un array estilo el que se pasa en cualquier vista de Laravel) y tercero es una función donde definimos el asunto y a quien se va a enviar. Para más información sobre los mails de Laravel consulta la documentación.
Creamos la vista anteriormente mencionada en resources/views/mails/test.blade.php. Puedes crearla donde quieras y ponerle el mombre que quieras, pero ten en cuenta que para que funcione tendrás que cambiarlo en el método send también. Dentro de esta vista yo he puesto un texto plano cualquiera.
Vamos a la ruta del controlador y si todo a funcionado correctamente en el inbox de Mailtrap.io deberías haber recibido el correo ? ??:
Y con esto ya tendríamos Mailtrap.io configurado con Laravel para poder enviar emails en nuestro entorno de pruebas.
? Enviar correos de prueba con MailHog
Ahora vamos a instalar MailHog que viene a ser lo mismo que Mailtrap.io, pero en tu local. Para instalarlo puedes hacerlo de varias maneras, en este enlace de la documentación las explica. Yo voy a hacerlo con Docker, pero tú puedes hacerlo con la que quieras. En futuras entradas explicaré como montar nuestro entorno de desarrollo completo con Docker.
Una vez instalado, tenemos que poner los datos del servidor SMTP en nuestro .env para que Laravel se pueda conectar. Abrimos el archivo .env y los añadimos:
1 2 3 4 5 6 7 8 |
MAIL_DRIVER=smtp MAIL_HOST=localhost MAIL_PORT=1025 MAIL_USERNAME=testuser MAIL_PASSWORD=testpwd MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=correo MAIL_FROM_NAME=nombre que saldrá en el correo enviado |
Una vez tengamos esto, si vamos a http://localhost:8025/ veremos la interfaz gráfica que nos proporciona MailHog, será aquí donde nos llegarán todos los correos de nuestra aplicación. Sería como el inbox de Mailtrap.
Vamos a hacer una prueba rápida y sencilla para ver que funciona correctamente. Vamos a poner este código en un controlador:
1 2 3 4 5 6 7 |
use Mail; Mail::send('mails.test', [], function ($mail) { $mail->to('test@test.com')->subject('Test'); }); |
Este código ya está explicado anteriormente. Creamos la vista en resources/views/mails/test.blade.php y le ponemos un texto de prueba.
Vamos a la ruta del controlador y si todo a funcionado correctamente veremos en la UI de MailHog el mail ? ??:
Y esto sería el correo abierto:
Tanto Mailtrap.io como MailHog son herramientas que vienen a hacer lo mismo, pero una está online y tienes que registrarte en una página de terceros y la otra está en tu local, simplemente instalando un paquete ya tienes el mismo servicio. Dependiendo tus necesidades puede interesarte más una u otra.
-
– MailHog: https://github.com/mailhog/MailHog
– Mailtrap.io: https://mailtrap.io/
– Documentación de los Mails en Laravel: https://laravel.com/docs/5.6/mail