Enviar email con Laravel

En este artículo aprenderemos a enviar correos desde una cuenta gmail en nuestra aplicación laravel. Para ello, vamos a crear un formulario de contacto en nuestra aplicación, uno de los usos más comunes en el envio de correos.

Configuración de nuestra cuenta de correo

Para comenzar, debemos configurar nuestra cuenta de correo para que se pueda hacer uso de ella con nuestra aplicación laravel. Lo único que debemos hacer es dirigirnos a nuestro correo y, arriba en el menú, selecionaremos la primera opción con el nombre de «Cuenta». Se nos abrirá otra ventana donde seleccionaremos en el apartado «inicio de sesión y seguridad» la opción «aplicaciones con acesso a la cuenta» y marcaremos en la siguiente ventana esta opción:

Laravel envio correo

Configuración de nuestra aplicación laravel

Ahora toca configurar nuestra aplicación para indicarle que correo debe utilizar, su contraseña, que protocolo de comunicación, etc.

Sin tener nuestro servidor corriendo, nos dirigimos a nuestro archivo .env que se encuentra en la raíz de nuestro proyecto, y lo modificaremos de tal forma:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=tucorreo@gmail.com
MAIL_PASSWORD=Lacontraseñadetucorreo
MAIL_ENCRYPTION=tls

Una vez hecho esto, ejecutamos un comando que es conveniente utilizar cada vez que modifiquemos nuestro archivo .env:

php artisan config:clear

En cuanto termine su ejecución, podremos arrancar nuestro servidor.

Ruta, vista y controllador para el envío de email

Creación de vistas

Para comenzar, vamos a crear dos vistas, una será la que contendrá nuestro formulario y otra la que se envie por email.

Para ellos nos dirigimos a la carpeta resources/views. Crearemos dos vistas, una será test.blade.php (Donde añadiremos nuestro formulario) y otra email.blade.php (El cuerpo de nuestro correo).

En test.blade.php añadiremos el siguiente formualrio:

<h2>Formulario de contacto</h2>
<form action={{route('contact')}} method="POST">
     {{ csrf_field() }}
    <div class="form-group">
        <label for="name">Nombre</label>
        <input name="name" type="text">
    </div>
    <div class="form-group">
        <label for="name">Mensaje</label>
                                <input name="msg" type="text">
    </div>
    <div class="form-group">
        <button type="submit" id='btn-contact' class="btn">Enviar</button>
    </div>
</form>

Y en email.blade.php añadiremos las variables que se van a enviar desde el formulario, que sería «name» y «msg»

<h2>Nombre: {{$name}}</h2>
<h2>Mensaje: {{$msg}}</h2>

Hecho esto, crearemos un controlador que contendra la función para el envío de email (Puedes crear esta función en el controlador que quieras, no es necesario su creación).

Creación del controlador

Para este ejemplo, vamos a crear un controlador que llamaremos EmailController.php, y añadiremos la siguiente función:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Mail; //Importante incluir la clase Mail, que será la encargada del envío

class EmailController extends Controller
{

    public function contact(Request $request){
        $subject = "Asunto del correo";
        $for = "correo_que_recibira_el_mensaje@gmail.com";
        Mail::send('email',$request->all(), function($msj) use($subject,$for){
            $msj->;from("tucorreo@gmail.com","NombreQueApareceráComoEmisor");
            $msj->subject($subject);
            $msj->to($for);
        });
        return redirect()->back();
    }
}
  • Obtenemos los datos enviados desde nuestro formulario por el request.
  • En la variable subject añadiremos el asunto que queramos que tenga nuestro correo, como por ejemplo «formulario de contacto»
  • En la variable for será el que recibirá el correo, podemos añadirnos nuestro propio correo.
  • En la función send añadiremos la vista que se enviará en el email ( «email»), como segundo parametro enviaremos el request.
  • Y en la variable $msj añadimos el correo que aparecerá como el emisor ( El que añadimos en nuestro .env) y el nombre que recibirá en el correo.
  • Por último añadimos la variable subject y for que creamos anteriormente.

Finalmente, solo quedará crear la ruta de contacto.

Configuración de rutas para nuestro envío de Email.

Para enviar emails con nuestra aplicación laravel, modificaremos nuestro archivo web.php con las siguientes rutas:

Route::get('/', function () {
    return view('test');
}); //Esta ruta la ponemos en la raiz para que nada mas ejecutar nuestra aplicación aparezca nuestro formulario

Route::post('/contactar', 'EmailController@contact')->name('contact');
//Ruta que esta señalando nuestro formulario

Una vez hecho esto, ya solo quedaría enviar nuestro correo mediante nuestro formulario!

Si quisieramos modificar el estilo del correo, debemos añadir la etiquta <style> dentro de nuestro plantilla y ahí crear nuestros estilos. Si queremos hacer uso de alguna imagen, recuerda que debe apuntar a una que este subida a internet.

Cualquier duda contacta con nosotros, ¡un saludo!