Product
Envío de emails con la API de PHP de Mailgun
Este es un artículo invitado de Mihály Sáróy, del equipo de desarrollo de EDMdesigner.
Ha pasado un tiempo desde que se lanzó el SDK de PHP de Mailgun y hemos visto muchos cambios: nuevas funciones, nuevas integraciones creadas a partir de él, nuevos puntos de conexión de la API… pero la base de PHP sigue siendo la misma. Como fue el primer SDK para la API de Mailgun, ha tenido tiempo de madurar y pasar por iteraciones que lo hacen fácil de usar, algo de lo que nos dimos cuenta al probarlo.
En este artículo vamos a mostrarte cómo implementar la API de Mailgun usando PHP con PEAR.
¿Por qué usar una API de email de PHP para el email transaccional?
Vamos a empezar esta guía diciendo que el email transaccional está en todas partes y es importante que lo hagamos bien. No conseguir que el email funcione correctamente podría significar una pérdida de ingresos para tu negocio y, en general, crear una experiencia desagradable para los clientes.
Como profesional del desarrollo, siempre buscas la manera más sencilla, rápida y eficaz de resolver un problema. A menudo, esto se logra cumpliendo dos condiciones:
- Utilizar bibliotecas externas que se adapten a tu solución.
- Diseñar aplicaciones escalables.
No es necesario explicar la primera condición: no empezarías a escribir un sistema operativo antes de programar una aplicación, ¿verdad? A lo largo del artículo, veremos cómo usar paquetes ya escritos para enviar emails. Pero ahora, pasemos a mi segundo punto: sigue leyendo.
Para un diseño escalable, aquí es donde buscas servicios como Mailgun. Puedes esperar una solución llena de funciones que cumple los requisitos para el envío de emails de gran volumen.
Si te importa la entrega (y debería), Mailgun ofrece una gran fiabilidad, ya que está diseñado para gestionar muy bien el email transaccional. Puedes configurar varios dominios y elegir si quieres compartir IP o construir tu propia reputación. Para proteger los encabezados de tus emails, Mailgun requiere DKIM y SPF que se añadan a la cuenta y que superen los controles a nivel de autenticación y alineación. Todo esto funciona en conjunto para ayudarte con la entrega de emails.
Ahora viene lo bueno: configurar un script contenedor de PHP para Mailgun. Primero usaremos el administrador de paquetes y luego veremos ejemplos de cómo aplicarlo.
Configuración de tu entorno de PHP para la API de email de Mailgun
PEAR es una iniciativa impulsada por la comunidad que nos permite reutilizar componentes de código de PHP, al mismo tiempo que se añade y mantiene el código dependiente.
Primero, necesitarás PHPy el administrador de paquetes para continuar. La mejor forma de instalarlos es mediante Debian Advanced Package Manager (APT) si usas Linux.
Aunque PEAR es una solución antigua, sigue utilizándose de manera generalizada y es la abreviatura de PHP Extension and Application Repository. Dependiendo de la versión de PHP instalada, es probable que ya tengas PEAR disponible. Puedes comprobarlo ejecutando el comando pear sin argumentos. Si recibes una advertencia de que tu sistema no lo tiene, simplemente ejecuta: sudo apt install php-pear. Ahora estamos listos para instalar código PHP de terceros con PEAR.
Si sigues este artículo a la vez que programas, aquí es donde deberías abrir tu cuenta de Mailgun para acceder a la API. Si te atascas, simplemente echa un vistazo a estos consejos para empezar.
Creación de un proyecto de PHP para enviar emails con la API de Mailgun
Los pasos con PEAR se aplican de la siguiente manera:
- Instalar las dependencias del proyecto e incluir los paquetes solicitando la clase principal o el script vendor/autoloader.php
- Proporcionar credenciales relacionadas con la API, como tu clave de API e información del dominio
- Crear una instancia de la clase/cliente de Mail
- Hacer una llamada de función para enviar los emails
Sencillo, ¿verdad?
Uso de PEAR para enviar emails con PHP a través de la API de email de Mailgun
Paso 1: instala las dependencias del proyecto
Podemos instalar el paquete Mail escribiendo sudo pear install Mail con el comando adecuado. Cuando termine la instalación, el siguiente paso es incluirlo en un archivo de script con el directorio de tu proyecto:
require_once "Mail.php";
Ahórrate algo de tiempo y haz lo que sugiere nuestro código base, luego proporciona las variables específicas de la API.
Paso 2: proporciona las variables de entrada
Si vas a tu panel de control de la API, podrás encontrar esta información necesaria en la pestaña del dominio:

Necesitamos las variables host, account user y password, y el port que usaremos:
Usamos la conexión SMTP para enviar emails a través de nuestra cuenta de Mailgun.
Paso 3: crea la instancia del cliente
Reunimos los parámetros anteriores en una matriz y creamos una instancia de la clase Mail con esto:
Paso 4: realiza una llamada al cliente
El paso final es llamar al método send() de la clase Mail y ya estaremos listos:
Aquí, la variable $to contiene el valor de la dirección del destinatario, mientras que la variable $headers es una matriz que contiene campos adicionales para la entrega.
Llegados a este punto, puede que quieras revisar todo el código final:
Puedes descargar el código fuente completo aquí.
Sigamos; si ya has configurado todo, puedes intentar ejecutar el script: php mailer.php.
Lo ejecutas, ¡y recibes un horrible seguimiento de la pila de errores! Examínalo detenidamente:
PHP Fatal error: Uncaught Error: Class 'Net_SMTP' not found in /usr/share/php/Mail/smtp>php:366.
Esto significa que olvidamos añadir otra dependencia del proyecto que es necesaria para usar PEAR Mail. Ejecuta sudo pear install Net_SMTP e inténtalo de nuevo.
El resultado es:
¡Mensaje enviado correctamente!
Si has seguido los pasos, tu mensaje debería haber llegado al buzón especificado, y te estoy aplaudiendo en silencio. ¡Bravo!
Función mail() de PHP
La función nativa mail() de PHP puede enviar mensajes desde tu aplicación, pero tiene sus inconvenientes. Como depende de la configuración local de email de tu servidor, los emails enviados de esta manera a menudo acaban en los filtros de spam o se bloquean directamente. También carece de elementos modernos esenciales como funciones de seguimiento, analíticas y entregabilidad fiable. Lo más crítico es que las implementaciones sencillas pueden exponerte a ataques de inyección en los encabezados. En resumen, mail() sirve para un apuro, pero para emails en producción querrás una API dedicada como el SDK de PHP de Mailgun.
¿Cuáles son los inconvenientes de utilizar la función mail() de PHP?
- Entregabilidad: los mensajes dependen de la configuración local de email de tu servidor, que a menudo carece de una alineación adecuada de SPF, DKIM y DMARC. Esto reduce tu reputación como remitente y la llegada a la bandeja de entrada.
- Riesgo de spam: a menudo, los filtros que desconfían de las IP de servidores genéricos y de la falta de autenticación marcan o rechazan los emails procedentes de servidores web.
- Sin autenticación SMTP: mail() no es compatible de forma nativa con el protocolo SMTP autenticado. Debes crear las configuraciones a mano o utilizar otra biblioteca para realizar envíos a través de un servidor SMTP adecuado.
- Sin seguimiento ni analíticas: no existe una forma integrada de hacer un seguimiento de aperturas, clics, rebotes o quejas, ni webhooks de eventos para la monitorización programática.
Para conseguir una entrega, autenticación y analíticas fiables, utiliza un servicio dedicado como la API de PHP de Mailgun.
Resumen de la API de email de PHP: próximos pasos y recursos
Hemos visto un script de muestra para empezar a usar Mailgun con el administrador de paquetes PEAR, y hemos creado scripts de PHP para enviar un email con SMTP y la API HTTP. La incorporación de pruebas adecuadas garantiza que tu entrega de emails funcione como esperas. Pero hay otras opciones que podrías usar si PEAR no es tu opción favorita. Alternativas como SendGrid te permiten replicar el mismo resultado usando Composer, algo sobre lo que Mailgun ya ha detallado previamente en el blog. O para obtener unas instrucciones más detalladas, echa un vistazo a nuestro tutorial sobre la implementación de la API de Mailgun con PHP.
Y, por supuesto, si quieres mejorar tus habilidades con PHP, estos son algunos de mis recursos favoritos que recomendaría para el envío de emails con PHP y para tratar con emails en HTML en general.
Preguntas frecuentes
Utiliza el SDK de PHP de Mailgun (instalación de Composer) y llama al punto de conexión de Messages. Normalmente, una solicitud de API es más rápida de configurar y más fiable que la configuración de un SMTP local para enviar emails con PHP.
Una API de email para PHP te ofrece solicitudes autenticadas, mejor entregabilidad, reintentos, webhooks y analíticas. Evita los riesgos de spam y los dolores de cabeza de configuración de servidores tan habituales de mail().
Autentícate con tu clave de API a través de HTTPS. En PHP, configura la clave como una variable de entorno e inicializa el cliente de Mailgun con ella. No se requiere nombre de usuario ni contraseña SMTP.
Sí. Puedes configurar cuerpos de texto y html, adjuntar archivos y renderizar plantillas con variables, algo ideal cuando quieres enviar emails con PHP que tengan un aspecto excelente y sean escalables.
Habilita el seguimiento en la configuración de dominio de Mailgun o en los parámetros por mensaje y, a continuación, consume los eventos a través de webhooks o la Events API desde tu aplicación PHP para obtener analíticas en tiempo real.
- 401/403: clave de API o región de dominio incorrectas
- 400: faltan campos (from, to, subject, text/html).
- 429: límite de tasa: pon en cola o retrocede con los reintentos. Valida tu dominio (SPF/DKIM) para mejorar la entrega y reducir los rebotes temporales.
Abstrae tu función “send”, cambia la llamada de mail() por una solicitud del cliente de Mailgun y añade autenticación de dominio (SPF/DKIM/DMARC). Ganarás entregabilidad, seguimiento y visibilidad de errores con unos cambios mínimos en el código.