Envío de Correos Electrónicos con Laravel

Laravel incluye un excelente soporte de correo electrónico de fábrica, pero aún necesitas un servicio de entrega confiable detrás. El paquete Emailit Laravel se conecta directamente al sistema de correo de Laravel como un transporte nativo. Tus Mailables, Notificaciones y llamadas Mail::send() existentes funcionan sin ningún cambio de código. Además de eso, obtienes acceso completo a la API de Emailit a través de una Facade conveniente.
El envío de correos electrónicos es una de las tareas más comunes en cualquier aplicación Laravel. Confirmaciones de registro de usuarios, restablecimientos de contraseña, recibos de pedidos, actualizaciones de envío y boletines de marketing, todos dependen de una entrega confiable de correo electrónico. Aunque Laravel proporciona una poderosa capa de abstracción de correo, la entrega real aún depende del transporte que configures. Usar una API de correo electrónico como Emailit te brinda alta capacidad de entrega, seguimiento de entregas, gestión de rebotes y análisis detallados, sin tener que administrar servidores SMTP o preocuparte por la reputación de IP.
En esta guía te mostraremos cómo configurar Emailit en una aplicación Laravel y enviar correos electrónicos usando tanto el sistema de correo estándar de Laravel como la Facade de Emailit.
Requisitos
- PHP 8.1 o superior
- Laravel 10, 11 o 12
- Una cuenta de Emailit con una clave API
Instalación
Instala el paquete vía Composer:
composer require emailit/emailit-laravel
El paquete auto-descubre su proveedor de servicios, por lo que no se necesita registro manual. Funciona con Laravel 10, 11 y 12 de inmediato.
Configuración
Agrega tu clave API a .env:
EMAILIT_API_KEY=tu_clave_api
Establece Emailit como tu mailer predeterminado:
MAIL_MAILER=emailit
Agrega el mailer emailit al array de mailers en tu config/mail.php:
'mailers' => [
// ...
'emailit' => [
'transport' => 'emailit',
],
],
Opcionalmente, publica el archivo de configuración para personalizar la URL base de la API:
php artisan vendor:publish --tag=emailit-config
La configuración es intencionalmente mínima. Una vez que estableces tu clave API y el mailer predeterminado, Laravel enrutará automáticamente todo el correo saliente a través de Emailit. No hay necesidad de configurar hosts SMTP, puertos, configuraciones de cifrado o credenciales de autenticación como lo harías con una configuración tradicional de servidor de correo.
Enviando correos con Laravel Mail
Una vez configurado, todas las funciones de correo de Laravel funcionan de inmediato. Nada en tu código existente necesita cambiar.
Usando un Mailable
Crea una clase Mailable como lo harías normalmente:
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class WelcomeEmail extends Mailable
{
use Queueable, SerializesModels;
public function __construct(
public readonly User $user,
) {}
public function envelope(): Envelope
{
return new Envelope(
subject: 'Bienvenido a Nuestra App',
);
}
public function content(): Content
{
return new Content(
view: 'emails.welcome',
);
}
}
Luego envíalo:
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeEmail;
Mail::to('usuario@ejemplo.com')->send(new WelcomeEmail($user));
El correo en cola, Mailables de Markdown y las Notificaciones funcionan exactamente como esperarías. Emailit se sitúa de manera transparente detrás de la capa de correo de Laravel, por lo que puedes intercambiarlo por cualquier transporte existente como SMTP, Mailgun o SES sin tocar el código de tu aplicación. Esto facilita probar Emailit junto a tu proveedor actual o migrar gradualmente.
Usando la Facade de Emailit
Para funciones que van más allá de lo que ofrece el sistema de correo de Laravel, como plantillas con variables, envíos programados o gestión de recursos de API, usa la Facade Emailit. Te da acceso directo al SDK completo de Emailit PHP.
Enviar un correo vía la API
use Emailit\Laravel\Facades\Emailit;
$email = Emailit::emails()->send([
'from' => 'hola@tudominio.com',
'to' => ['usuario@ejemplo.com'],
'subject' => 'Hola desde Emailit',
'html' => '<h1>¡Bienvenido!</h1>',
]);
echo $email->id;
echo $email->status;
Enviar con una plantilla
Referencia plantillas que has construido en el panel de Emailit y pasa variables dinámicas:
use Emailit\Laravel\Facades\Emailit;
$email = Emailit::emails()->send([
'from' => 'hola@tudominio.com',
'to' => 'usuario@ejemplo.com',
'template' => 'email_bienvenida',
'variables' => [
'name' => 'Juan Pérez',
'company' => 'Acme Inc',
],
]);
Usar plantillas del lado del servidor es un patrón poderoso para aplicaciones Laravel. Tus diseñadores y especialistas en marketing pueden actualizar el contenido, estilo y diseño del correo electrónico en el panel de Emailit sin requerir cambios de código o nuevos despliegues. El código PHP solo necesita pasar los datos, y la plantilla maneja el renderizado.
Programar un correo
use Emailit\Laravel\Facades\Emailit;
$email = Emailit::emails()->send([
'from' => 'recordatorios@tudominio.com',
'to' => 'usuario@ejemplo.com',
'subject' => 'Recordatorio de Cita',
'html' => '<p>Tu cita es mañana a las 2 PM.</p>',
'scheduled_at' => '2026-04-10T09:00:00Z',
]);
Los correos programados son manejados completamente por la API de Emailit, lo que significa que funcionan independientemente de tu sistema de colas de Laravel. Esto es ideal para recordatorios de citas, avisos de renovación de suscripciones y campañas sensibles al tiempo donde quieres entrega garantizada en un momento específico, incluso si tu servidor de aplicación experimenta tiempo de inactividad.
Enviar con archivos adjuntos
use Emailit\Laravel\Facades\Emailit;
$email = Emailit::emails()->send([
'from' => 'facturas@tudominio.com',
'to' => 'cliente@ejemplo.com',
'subject' => 'Tu Factura #12345',
'html' => '<p>Por favor encuentra tu factura adjunta.</p>',
'attachments' => [
[
'filename' => 'factura.pdf',
'content' => base64_encode(file_get_contents('factura.pdf')),
'content_type' => 'application/pdf',
],
],
]);
Gestión de recursos
La Facade expone cada servicio de la API de Emailit, por lo que puedes gestionar toda tu infraestructura de correo electrónico desde Laravel.
Dominios
use Emailit\Laravel\Facades\Emailit;
$domain = Emailit::domains()->create([
'name' => 'ejemplo.com',
'track_loads' => true,
'track_clicks' => true,
]);
$domain = Emailit::domains()->verify('sd_123');
Gestionar dominios de envío a través de la API es útil para plataformas SaaS que necesitan configurar dominios personalizados para cada cliente. Puedes automatizar todo el flujo de trabajo de verificación de dominio, incluyendo verificaciones de registros DNS, directamente desde tu aplicación Laravel.
Contactos
use Emailit\Laravel\Facades\Emailit;
$contact = Emailit::contacts()->create([
'email' => 'usuario@ejemplo.com',
'first_name' => 'Juan',
'last_name' => 'Pérez',
]);
$contacts = Emailit::contacts()->list();
Verificación de correo electrónico
use Emailit\Laravel\Facades\Emailit;
$result = Emailit::emailVerifications()->verify([
'email' => 'test@ejemplo.com',
]);
echo $result->status; // valid
echo $result->risk; // low
Verificar direcciones de correo electrónico en el punto de registro o envío de formularios te ayuda a mantener una lista de contactos limpia y protege tu reputación como remitente. Altas tasas de rebote de direcciones inválidas pueden hacer que tus correos lleguen a carpetas de spam, por lo que la verificación es una mejor práctica para cualquier aplicación Laravel que envíe correos transaccionales o de marketing a escala.
Inyección de dependencias
Si prefieres no usar Facades, puedes inyectar el cliente directamente:
use Emailit\EmailitClient;
class EmailController extends Controller
{
public function send(EmailitClient $emailit)
{
$email = $emailit->emails()->send([
'from' => 'hola@tudominio.com',
'to' => ['usuario@ejemplo.com'],
'subject' => 'Hola',
'html' => '<p>¡Hola!</p>',
]);
return response()->json(['id' => $email->id]);
}
}
El contenedor de servicios de Laravel resuelve automáticamente la instancia EmailitClient con la clave API de tu configuración, por lo que obtienes la misma conveniencia que la Facade con los beneficios de capacidad de prueba de la inyección de dependencias.
Manejo de errores
El SDK de PHP subyacente lanza excepciones tipadas, por lo que puedes capturar tipos de error específicos:
use Emailit\Exceptions\AuthenticationException;
use Emailit\Exceptions\RateLimitException;
use Emailit\Exceptions\ApiErrorException;
use Emailit\Laravel\Facades\Emailit;
try {
Emailit::emails()->send([...]);
} catch (AuthenticationException $e) {
// Clave API inválida (401)
} catch (RateLimitException $e) {
// Demasiadas solicitudes (429)
} catch (ApiErrorException $e) {
// Cualquier otro error de API
echo $e->getHttpStatus();
}
En una aplicación Laravel, también puedes manejar estas excepciones globalmente en tu manejador de excepciones o usar middleware para capturar errores de límite de tasa e implementar lógica de reintento automático. Esto asegura que tu aplicación se mantenga resistente incluso cuando envía grandes volúmenes de correo electrónico.
Todos los servicios disponibles
La Facade te da acceso a todo en la API de Emailit:
| Servicio | Uso | Descripción |
|---|---|---|
| Emails | Emailit::emails() | Enviar, listar, obtener, cancelar, reintentar correos |
| Domains | Emailit::domains() | Crear, verificar, listar, gestionar dominios de envío |
| API Keys | Emailit::apiKeys() | Crear, listar, gestionar claves API |
| Audiences | Emailit::audiences() | Crear, listar, gestionar audiencias |
| Subscribers | Emailit::subscribers() | Agregar, listar, gestionar suscriptores |
| Templates | Emailit::templates() | Crear, listar, publicar plantillas de correo |
| Suppressions | Emailit::suppressions() | Crear, listar, gestionar direcciones suprimidas |
| Email Verifications | Emailit::emailVerifications() | Verificar direcciones de correo electrónico |
| Email Verification Lists | Emailit::emailVerificationLists() | Verificación masiva de correo electrónico |
| Webhooks | Emailit::webhooks() | Crear, listar, gestionar webhooks |
| Contacts | Emailit::contacts() | Crear, listar, gestionar contactos |
| Events | Emailit::events() | Listar y recuperar eventos |
Comenzar
Instala el paquete y comienza a enviar en menos de un minuto:
composer require emailit/emailit-laravel
Revisa la documentación completa del paquete en GitHub, el SDK de Emailit PHP para el cliente subyacente, o dirígete a la Referencia de API para detalles sobre cada endpoint.
Blog
Las últimas noticias y actualizaciones, directamente desde Emailit.
Mantente al día con los últimos artículos del Blog de Emailit.


