📧 Envío de correos con Laravel Mail

📧 Envío de correos con Laravel Mail

Automatiza tus notificaciones y comunica con tus usuarios

El sistema Mail de Laravel te permite enviar correos electrónicos desde tu aplicación de forma sencilla y elegante. Puedes usarlo para enviar mensajes de bienvenida, restablecimiento de contraseñas, facturas o confirmaciones de compra.

Laravel se integra fácilmente con servicios de correo como Mailtrap, Mailgun, Amazon SES, y también con servidores SMTP tradicionales como Gmail.

⚙️ Configuración en el archivo .env

Antes de enviar correos, necesitas configurar tu entorno con las credenciales de tu servidor SMTP. Abre tu archivo .env y añade lo siguiente:

.env
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=tu_correo@gmail.com
MAIL_PASSWORD=tu_contraseña
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=tu_correo@gmail.com
MAIL_FROM_NAME="Curso Laravel"
      

Si prefieres hacer pruebas, puedes usar Mailtrap en lugar de Gmail:

MAIL_MAILER=smtp
MAIL_HOST=sandbox.smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=tu_usuario_mailtrap
MAIL_PASSWORD=tu_contraseña_mailtrap
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=notificaciones@tusitio.com
MAIL_FROM_NAME="App Laravel"
      

Estos valores también pueden modificarse en config/mail.php para un control más avanzado.

📬 Creando un Mailable

Un Mailable es una clase que representa un correo electrónico. Contiene el asunto, la plantilla Blade y los datos que se enviarán.

Puedes crear un nuevo Mailable ejecutando el siguiente comando:

php artisan make:mail BienvenidaUsuario

Esto generará el archivo app/Mail/BienvenidaUsuario.php.

🧩 Ejemplo de clase Mailable

Dentro del método build() defines el asunto y la vista del correo:

app/Mail/BienvenidaUsuario.php
<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class BienvenidaUsuario extends Mailable
{
    use Queueable, SerializesModels;

    public $usuario;

    public function __construct($usuario)
    {
        $this->usuario = $usuario;
    }

    public function build()
    {
        return $this->subject('¡Bienvenido al Curso Laravel!')
                    ->view('emails.bienvenida');
    }
}
      

Luego crea la plantilla en resources/views/emails/bienvenida.blade.php:

resources/views/emails/bienvenida.blade.php
<h1>¡Hola {{ $usuario->nombre }}!</h1>
<p>Gracias por registrarte en nuestra plataforma de aprendizaje Laravel.</p>
<p>Estamos emocionados de tenerte a bordo. Si tienes dudas, puedes escribirnos a soporte@tusitio.com</p>
<hr>
<p>Equipo del Curso Laravel 🚀</p>
      

🚀 Enviar el correo desde un controlador

Una vez creada la clase y la vista, ya puedes enviar correos usando el facade Mail:

app/Http/Controllers/UserController.php
use App\Mail\BienvenidaUsuario;
use Illuminate\Support\Facades\Mail;

public function store(Request $request)
{
    $usuario = User::create($request->all());
    Mail::to($usuario->email)->send(new BienvenidaUsuario($usuario));

    return back()->with('success', 'Usuario registrado y correo enviado.');
}
      

Con esto, cada vez que se registre un usuario nuevo, recibirá un correo de bienvenida automáticamente.

⚡ Enviar correos en segundo plano (colas)

Enviar correos puede tardar unos segundos, por lo que en producción es recomendable usar colas.

php artisan queue:table
php artisan migrate
      

Luego, cambia el envío de send() a queue():

Mail::to($usuario->email)->queue(new BienvenidaUsuario($usuario));

Ejecuta el procesador de colas:

php artisan queue:work

🧪 Simulador: vista previa de correo

Escribe un nombre y correo para ver cómo se genera el mensaje:

✅ Buenas prácticas al enviar correos

  • Usa Mailtrap durante el desarrollo para evitar enviar correos reales.
  • Configura correctamente las variables en .env antes de pasar a producción.
  • Emplea colas con queue() para mejorar el rendimiento.
  • Personaliza tus plantillas Blade con logotipos, enlaces y estilos.
  • Verifica siempre los logs en storage/logs/laravel.log ante errores de conexión SMTP.

Publicar un comentario

0 Comentarios