Saltar al contenido

Tutoriales5 min de lectura

Envío de emails con PHP

Aprende a enviar emails en PHP con el SDK de Emailit para PHP. Desde mensajes sencillos hasta plantillas, archivos adjuntos y envíos programados, todo con una API limpia y moderna.

GPor

Envío de emails con PHP

Enviar emails desde PHP ha significado tradicionalmente pelearse con mail(), configurar servidores SMTP o cargar con dependencias pesadas. El SDK de Emailit para PHP te ofrece una alternativa limpia y moderna. Puedes enviar emails transaccionales, gestionar dominios, verificar direcciones y procesar webhooks, todo a través de un sencillo cliente de API.

PHP sigue siendo uno de los lenguajes más utilizados en el desarrollo web, y el envío de emails es un requisito básico de casi cualquier aplicación PHP. Tanto si estás creando un producto SaaS como una tienda online o un sistema de gestión de contenidos, una entrega de emails fiable es esencial para el alta de nuevos usuarios, el restablecimiento de contraseñas, las confirmaciones de pedidos y las campañas de marketing. En lugar de depender de la función integrada mail() de PHP, que ofrece un control limitado y ninguna garantía de entrega, usar una API de email dedicada asegura que tus mensajes lleguen de verdad a la bandeja de entrada.

En esta guía veremos cómo instalar el SDK y usarlo para enviar emails desde cualquier aplicación PHP.

Requisitos

Instalación

Instala el SDK con Composer:

composer require emailit/emailit-php

El SDK de Emailit para PHP está disponible como paquete de Composer, por lo que se integra sin problemas en cualquier proyecto PHP que use Composer para gestionar sus dependencias. No hace falta incluir archivos a mano ni usar autoloaders personalizados.

Inicializar el cliente

Crea una instancia del cliente con tu clave de API:

require 'vendor/autoload.php';

$emailit = Emailit::client('tu_clave_api');

Encontrarás tu clave de API en el panel de Emailit, en Claves de API.

Enviar un email básico

Para enviar un email basta con una sola llamada a un 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 de servicio devuelven objetos de recurso tipados con acceso directo a sus propiedades, así que siempre sabes exactamente con qué estás trabajando.

En comparación con la función nativa mail() de PHP, enviar emails a través de una API te ofrece seguimiento de la entrega, gestión de rebotes e información detallada sobre el estado de cada mensaje. No tienes que preocuparte de configurar Sendmail o Postfix en tu servidor, y consigues una entrega fiable en todos los grandes proveedores de email, como Gmail, Outlook y Yahoo.

Enviar con una plantilla

Si has creado una plantilla en el panel de Emailit, puedes hacer referencia a ella por su slug y pasarle 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 emails fuera del código y permiten que personas sin perfil técnico actualicen los textos sin necesidad de un despliegue. Esto es especialmente útil para emails transaccionales como mensajes de bienvenida, enlaces para restablecer la contraseña, facturas y recibos o avisos de envío de pedidos, en los que el diseño y la redacción cambian con más frecuencia que el código que los activa.

Enviar con archivos adjuntos

Adjunta archivos pasando su 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 PDF, imágenes, hojas de cálculo o cualquier otro tipo de archivo. Es habitual usarlo para enviar facturas, informes o documentos generados directamente desde tu aplicación PHP, sin necesidad de un enlace de descarga aparte.

Programar un email para más tarde

Pasa una marca de tiempo scheduled_at para enviarlo 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 emails programados se pueden cancelar antes de que se envíen:

$emailit->emails()->cancel('em_abc123');

La programación es útil para comunicaciones en las que la puntualidad es clave, 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 propio contenido.

Listar y gestionar los emails enviados

Obtén una lista paginada de tus emails:

$emails = $emailit->emails()->list(['page' => 1, 'limit' => 10]);

foreach ($emails as $email) {
    echo $email->id . ' - ' . $email->status . "\n";
}

Reintenta un email fallido:

$emailit->emails()->retry('em_abc123');

Tener visibilidad completa de tus emails enviados y de su estado de entrega, además de poder reintentar los que fallan, te da un nivel de control que la función mail() de PHP sencillamente no puede ofrecer. Esto es fundamental en aplicaciones en las que cada email importa, como recibos de compra, enlaces de verificación de cuenta y códigos de autenticación en dos pasos.

Verificar las direcciones de email antes de enviar

Reduce los rebotes verificando las direcciones de antemano:

$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 emails es una buena práctica para proteger tu reputación de remitente. Enviar a direcciones no válidas o desechables aumenta tu tasa de rebote, lo que puede activar los filtros de spam y perjudicar la entregabilidad de todo tu dominio. Si verificas las direcciones antes de enviar, mantienes baja tu tasa de rebote y tu reputación intacta.

Gestionar eventos de webhook

El SDK incluye clases de eventos tipadas y verificación de firmas para webhooks. Así puedes reaccionar a los 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 reaccione al instante cuando un email se entrega, rebota, se abre o recibe un clic. Esto es esencial para crear flujos de trabajo basados en eventos, como actualizar un CRM cuando se entrega un mensaje, avisar a tu equipo de soporte cuando se produce un rebote o medir la interacción con tus campañas de email.

Gestión de errores

El SDK lanza excepciones tipadas para que puedas tratar 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();
}

Una buena gestión de errores garantiza que tu aplicación se degrade de forma controlada cuando algo falla. Las excepciones por límite de peticiones, por ejemplo, se pueden gestionar con una estrategia de reintentos, mientras que los errores de autenticación deberían activar una alerta para que puedas rotar tu clave de API.

Más allá del envío

El SDK te da acceso a toda la API de Emailit, no solo al envío. Puedes gestionar dominios, claves de API, listas, suscriptores, plantillas, direcciones bloqueadas, 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 convierte el SDK de Emailit para PHP en un kit completo de infraestructura de email. En lugar de usar bibliotecas o servicios distintos para gestionar dominios, listas de contactos y envíos, puedes hacerlo todo a través de un único cliente PHP coherente.

Empieza ya

Instala el SDK y envía tu primer email en menos de un minuto:

composer require emailit/emailit-php

Consulta la documentación completa del SDK en GitHub o ve a la referencia de la API para ver los detalles de cada endpoint.

Compartir

Prueba lo que acabas de leer.

3000 emails al mes gratis. Sin tarjeta de crédito.

3000 emails al mes gratis · Sin tarjeta de crédito