Skip to main content

Funcionalidad de correo en Laravel

La funcionalidad de correo de Laravel se construye sobre Symfony Mailer y admite drivers como SMTP, Mailgun, Postmark, Resend, Amazon SES o sendmail.
El antiguo SwiftMailer usado en versiones anteriores está discontinuado. Desde Laravel 9 se utiliza Symfony Mailer.
La configuración se gestiona en config/mail.php. Puedes cambiar el driver con el archivo .env.

Crear una clase Mailable

En Laravel, cada correo que envía la aplicación se representa como una clase “Mailable”. Genera la clase con el comando Artisan make:mail.
La clase se genera en el directorio app/Mail/.

Configuración del Mailable

La clase Mailable generada tiene tres métodos: envelope(), content() y attachments().

Configurar el remitente

Indica el remitente en envelope().
Si configuras un remitente global en config/mail.php, puedes omitir la indicación en cada Mailable.

Configurar el cuerpo del correo

Con content() indicas la plantilla Blade. Los datos que asignes a propiedades public en el constructor estarán disponibles automáticamente en la plantilla.
Crea la plantilla Blade correspondiente (resources/views/mail/orders/shipped.blade.php).
También puedes pasar los datos explícitamente con with. En ese caso, marca las propiedades como protected o private.

Envío del correo

Con to() de la fachada Mail indicas el destinatario y con send() envías el correo.
También puedes indicar CC y BCC.
Para enviar con un mailer concreto, usa mailer().

Envío con cola

Como el envío de correo afecta al tiempo de respuesta, se recomienda enviarlo en segundo plano con una cola.
Para usar la cola necesitas configurarla previamente y tener workers corriendo.
También puedes retrasar el envío.
Implementando ShouldQueue en la clase Mailable, incluso al llamar a send() se encola siempre.

Indicar la conexión y el nombre de la cola con atributos PHP

Con atributos de PHP puedes indicar directamente en la clase Mailable la conexión y el nombre de la cola. En lugar de encadenar on()->queue(), lo configuras de forma declarativa a nivel de clase.
De esta forma, dejas claro en la definición de la clase que este Mailable siempre se envía a la cola emails de la conexión SQS.

Crear un correo con Markdown

Los correos en Markdown te permiten aprovechar las plantillas HTML responsivas y elegantes que ofrece Laravel.

Generar un Mailable con Markdown

Añade la opción --markdown al generar el Mailable.
Usa el parámetro markdown en content().

Escritura de la plantilla Markdown

Crea el cuerpo del correo con los componentes Blade que ofrece Laravel.
Los componentes disponibles son:
Los correos en Markdown generan automáticamente también una versión en texto plano. Se pueden leer incluso con clientes que no soporten HTML.

Previsualización del correo

Si devuelves una instancia de Mailable desde una ruta, puedes previsualizar el correo en el navegador. Muy útil durante el desarrollo.

Correos en desarrollo local

Para evitar envíos accidentales en producción, en desarrollo conviene usar herramientas como Mailpit.
Laragon o Laravel Herd incluyen Mailpit por defecto.
Con el driver log, el contenido del correo se registra en el archivo de log. Es la opción más sencilla si solo quieres comprobar el envío.

Resumen

Última modificación el 13 de julio de 2026