Podríamos decir que el correo electrónico sigue siendo una de las herramientas más utilizadas en Internet. Todo funciona gracias a él, y todo el mundo tiene al menos uno. Son necesarios para recibir notificaciones, correo personal, suscripciones, acceso a aplicaciones… En definitiva, es muy importante que una aplicación cuente con un sistema de envío de e-mails.
Así pues, en este tutorial vamos a configurar una aplicación que pueda mandar e-mails desde Laravel.
Servidor de correo
Lo primero que tenemos que tener es un servidor de correo, el cual tenga habilitado el protocolo SMTP o POP3.
Esto hará de baliza para el envío de los correos electrónicos a través de Internet, ya que Laravel no tiene su propio servidor de correo.
Para este ejemplo podemos usar Mailtrap. Mailtrap es un servidor de correo bastante utilizado por los desarrolladores para el testeo de sus aplicaciones. Es muy sencillo y su paquete freemium nos deja una bandeja de entrada de hasta 50 correos.
Una vez nos hemos logueado o creado una cuenta tenemos que copiarnos los datos y credenciales del servidor. Estos se encuentran en «Demo Inbox».
Dentro de la configuración se nos deja escoger entre el tipo de aplicación que va a conectarse al servidor. Si escogemos Laravel, vemos que ya nos genera un código, listo para pegar en nuestro fichero de configuración.
Esta información irá en el fichero .env de Laravel.
MAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME="el usuario que te den" MAIL_PASSWORD="la pass que te genere" MAIL_ENCRYPTION=tls
Nota importante: Muchos servidores de correo, ya implementan la doble autentificación para acceder. Es posible que con estos datos nos de algún error de conexión y no funcione correctamente.
Para solucionar esto, debemos copiar esta misma configuración y grabarla en el archivo mail.php dentro del directorio config.
// solo en el caso de servidores con doble autentificación 'driver' => env('MAIL_DRIVER', 'smtp'), 'host' => 'smtp.mailtrap.io', 'port' => 2525, 'from' => [ 'address' => 'from@example.com', 'name' => 'Example', ], 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'username' => 'tu usuario', 'password' => 'tu pass', 'sendmail' => '/usr/sbin/sendmail -bs', 'pretend' => false,
Preparar la ruta
Para este ejemplo se va a desarrollar una ruta que reciba una función anónima donde utilizaremos la clase Mail de Laravel.
Mail cuenta con un método llamado send() que recibe 3 parámetros, a saber: vista/plantilla del correo electrónico, los datos que queremos enviar, y una función anónima.
La vista podemos prepararla dentro del directorio /views/emails y allí crear un archivo llamado notificacion.blade.php
// esta es la vista del correo // podemos usar etiquetas HTML Visita mi web <a href="{{ $link }}">{{ $link }}</a> para ver muchos más tutoriales.
Esta vista en especial, va a recibir una variable llamado link que lo pasaremos por el data.
Ahora podemos pasar a la ruta:
// web.php Route::get('enviar',function(){ $data = [ 'link' => 'https://jesuschicano.es' ]; \Mail::send('emails.notificacion', $data, function($msg){ $msg->from('jesus@shivaweb.es', 'Jesús chicano'); $msg->to('user@example.com')->subject('Notificación'); }); } );
Lo primero que declaramos en nuestra función anónima es el array $data, el cual contiene un elemento llamado link. En este array podemos agregar todos aquellos datos que nos sean de utilidad para incluir en el cuerpo del correo.
Después hacemos la llamada a la clase Mail que recibe la vista que habíamos creado antes, el array $data y la función anónima. Esta función recibe un objeto al que se le pasan los datos del from y el to.
El primero será para el correo origen desde el que se enviaría, y el segundo para el destinatario.
Con esto ya hemos desarrollado un envío de mail cada vez que ingresemos la dirección www.nuestraaplicacion.com/enviar. Si comprobamos la bandeja de entrada de Mailtrap, veremos que ya tenemos un nuevo correo electrónico en el panel derecho y que si lo abrimos, aparece el cuerpo que hemos creado en la vista.
Hay que decir que este tutorial es muy básico y que en futuras ediciones iré actualizando con mayor calidad y mejores herramientas.