Envío de Correos Electrónicos con PHP

Enviar correos electrónicos desde PHP tradicionalmente ha significado lidiar con mail(), configurar servidores SMTP o incluir dependencias pesadas. El SDK de Emailit para PHP te ofrece una alternativa limpia y moderna. Puedes enviar correos transaccionales, gestionar dominios, verificar direcciones y manejar webhooks, todo a través de un cliente API sencillo.
PHP sigue siendo uno de los lenguajes más utilizados para el desarrollo web, y el envío de correos electrónicos es un requisito fundamental para casi cualquier aplicación PHP. Ya sea que estés construyendo un producto SaaS, una tienda de comercio electrónico o un sistema de gestión de contenidos, la entrega confiable de correos es esencial para la incorporación de usuarios, restablecimiento de contraseñas, confirmaciones de pedidos y campañas de marketing. En lugar de depender de la función integrada mail() de PHP, que ofrece control limitado y ninguna garantía de entrega, usar una API de correo dedicada asegura que tus mensajes realmente lleguen a la bandeja de entrada.
En esta guía te mostraremos cómo instalar el SDK y usarlo para enviar correos desde cualquier aplicación PHP.
Requisitos
- PHP 8.1 o superior
- Una cuenta de Emailit con una clave API
- Composer
Instalación
Instala el SDK a través de Composer:
composer require emailit/emailit-php
El SDK de Emailit para PHP está disponible como un paquete de Composer, por lo que se integra perfectamente en cualquier proyecto PHP que use Composer para la gestión de dependencias. No necesitas incluir archivos manualmente ni usar cargadores automáticos personalizados.
Inicializar el cliente
Crea una instancia del cliente con tu clave API:
require 'vendor/autoload.php';
$emailit = Emailit::client('tu_clave_api');
Puedes encontrar tu clave API en el panel de Emailit bajo Claves API.
Enviar un correo básico
Enviar un correo requiere una sola llamada al método:
$email = $emailit->emails()->send([
'from' => 'hola@tudominio.com',
'to' => ['usuario@ejemplo.com'],
'subject' => 'Hola desde Emailit',
'html' => '<h1>¡Bienvenido!</h1><p>Gracias por registrarte.</p>',
]);
echo $email->id; // em_abc123...
echo $email->status; // pending
Todos los métodos del servicio devuelven objetos de recursos tipados con acceso directo a propiedades, para que siempas exactamente con qué estás trabajando.
Comparado con usar la función nativa mail() de PHP, enviar correos a través de una API te proporciona seguimiento de entrega, manejo de rebotes e información detallada del estado de cada mensaje. No tienes que preocuparte por configurar Sendmail o Postfix en tu servidor, y obtienes entrega confiable en todos los principales proveedores de correo como Gmail, Outlook y Yahoo.
Enviar con una plantilla
Si has creado una plantilla en el panel de Emailit, puedes referenciarla por su identificador y pasar variables:
$email = $emailit->emails()->send([
'from' => 'hola@tudominio.com',
'to' => 'usuario@ejemplo.com',
'template' => 'correo_bienvenida',
'variables' => [
'nombre' => 'Juan Pérez',
'empresa' => 'Acme Inc',
],
]);
Las plantillas mantienen el contenido de tus correos fuera de tu código base y permiten que personas no técnicas actualicen el texto sin necesidad de un despliegue. Esto es especialmente útil para correos transaccionales como mensajes de bienvenida, enlaces de restablecimiento de contraseña, recibos de facturas y notificaciones de envío, donde el diseño y la redacción cambian más frecuentemente que el código que los activa.
Enviar con archivos adjuntos
Adjunta archivos pasando contenido codificado en base64:
$email = $emailit->emails()->send([
'from' => 'facturas@tudominio.com',
'to' => 'cliente@ejemplo.com',
'subject' => 'Tu Factura #12345',
'html' => '<p>Adjuntamos tu factura.</p>',
'attachments' => [
[
'filename' => 'factura.pdf',
'content' => base64_encode(file_get_contents('factura.pdf')),
'content_type' => 'application/pdf',
],
],
]);
Puedes adjuntar PDFs, imágenes, hojas de cálculo o cualquier otro tipo de archivo. Esto se usa comúnmente para enviar facturas, reportes o documentos generados directamente desde tu aplicación PHP sin requerir un enlace de descarga separado.
Programar un correo para más tarde
Pasa una marca de tiempo scheduled_at para enviar en una fecha futura:
$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',
]);
echo $email->status; // scheduled
echo $email->scheduled_at; // 2026-04-10T09:00:00Z
Los correos programados pueden cancelarse antes de ser enviados:
$emailit->emails()->cancel('em_abc123');
La programación es útil para comunicaciones sensibles al tiempo como recordatorios de citas, avisos de renovación de suscripciones y campañas de goteo donde el momento del envío importa tanto como el contenido mismo.
Listar y gestionar correos enviados
Obtén una lista paginada de tus correos:
$emails = $emailit->emails()->list(['page' => 1, 'limit' => 10]);
foreach ($emails as $email) {
echo $email->id . ' - ' . $email->status . "\n";
}
Reintentar un correo fallido:
$emailit->emails()->retry('em_abc123');
Tener visibilidad completa de tus correos enviados, su estado de entrega y la capacidad de reintentar fallos te da un nivel de control que la función mail() de PHP simplemente no puede proporcionar. Esto es crítico para aplicaciones donde cada correo importa, como recibos transaccionales, enlaces de verificación de cuenta y códigos de autenticación de dos factores.
Verificar direcciones de correo antes del envío
Reduce los rebotes verificando las direcciones por adelantado:
$result = $emailit->emailVerifications()->verify([
'email' => 'test@ejemplo.com',
]);
echo $result->status; // valid
echo $result->score; // 0.95
echo $result->risk; // low
La verificación de correos electrónicos es una buena práctica para proteger tu reputación como remitente. Enviar a direcciones inválidas o desechables aumenta tu tasa de rebotes, lo que puede activar filtros de spam y perjudicar la entregabilidad en todo tu dominio. Al verificar direcciones antes del envío, mantienes bajas tus tasas de rebote y tu reputación intacta.
Manejar eventos de webhook
El SDK incluye clases de eventos tipadas y verificación de firmas para webhooks. Esto te permite reaccionar a eventos de entrega en tiempo real:
use Emailit\WebhookSignature;
use Emailit\Events\EmailDelivered;
use Emailit\Events\EmailBounced;
$event = WebhookSignature::verify(
file_get_contents('php://input'),
$_SERVER['HTTP_X_EMAILIT_SIGNATURE'],
$_SERVER['HTTP_X_EMAILIT_TIMESTAMP'],
'tu_secreto_de_firma_webhook'
);
match (true) {
$event instanceof EmailDelivered => manejarEntregado($event),
$event instanceof EmailBounced => manejarRebote($event),
default => log("No manejado: {$event->type}"),
};
Los webhooks permiten que tu aplicación PHP responda instantáneamente cuando un correo es entregado, rebotado, abierto o clicado. Esto es esencial para construir flujos de trabajo basados en eventos como actualizar un CRM cuando se entrega un mensaje, alertar a tu equipo de soporte sobre rebotes o rastrear métricas de participación para tus campañas de correo.
Manejo de errores
El SDK lanza excepciones tipadas para que puedas manejar cada caso de error con precisión:
use Emailit\Exceptions\AuthenticationException;
use Emailit\Exceptions\RateLimitException;
use Emailit\Exceptions\UnprocessableEntityException;
use Emailit\Exceptions\ApiErrorException;
try {
$emailit->emails()->send([...]);
} catch (AuthenticationException $e) {
// Clave API inválida (401)
} catch (RateLimitException $e) {
// Demasiadas solicitudes (429)
} catch (UnprocessableEntityException $e) {
// Validación fallida (422)
} catch (ApiErrorException $e) {
// Cualquier otro error de API
echo $e->getHttpStatus();
}
El manejo adecuado de errores asegura que tu aplicación se degrade elegantemente cuando algo sale mal. Las excepciones de límite de tasa, por ejemplo, pueden manejarse con una estrategia de reintento, mientras que los errores de autenticación deberían activar una alerta para que puedas rotar tu clave API.
Más allá de los correos
El SDK te da acceso a toda la API de Emailit, no solo al envío. Puedes gestionar dominios, claves API, audiencias, suscriptores, plantillas, supresiones, contactos y eventos, todo desde PHP:
$domain = $emailit->domains()->create(['name' => 'ejemplo.com']);
$contact = $emailit->contacts()->create(['email' => 'usuario@ejemplo.com']);
$templates = $emailit->templates()->list();
Esto hace del SDK de Emailit para PHP un conjunto completo de herramientas de infraestructura de correo. En lugar de usar bibliotecas o servicios separados para gestión de dominios, listas de contactos y envío de correos, puedes manejar todo a través de un solo cliente PHP consistente.
Comenzar
Instala el SDK y envía tu primer correo en menos de un minuto:
composer require emailit/emailit-php
Consulta la documentación completa del SDK en GitHub, 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.


