Cómo configurar el SMTP Relay en Laravel
Aprende a configurar el SMTP relay en Laravel con una configuración .env paso a paso, consejos de prueba y una alternativa de API transaccional.
¿Qué es un relé SMTP y por qué usar uno con Laravel
Un relé SMTP es un servicio de terceros que acepta correos salientes de tu aplicación y los reenvía a los buzones de los destinatarios en tu nombre. El envío basado en mail() integrado en Laravel, o una instalación local de Postfix en tu servidor, también puede enviar correos electrónicos técnicamente. Pero generalmente se marca como spam. Rápido. Este artículo explica cómo configurar un relé SMTP en Laravel para que tus mensajes transaccionales realmente lleguen a la bandeja de entrada en lugar de a la carpeta de spam.
El problema es la reputación. Una IP de hosting compartido desde la que también envían docenas de otras aplicaciones no tiene historial con Gmail, Outlook o Yahoo. Los filtros de spam consideran la reputación del remitente, los registros de autenticación y el volumen de envío antes de decidir si un mensaje llega a la bandeja de entrada o a la carpeta de spam. Un proveedor de relé como Mailgun, SendGrid o Postmark ya ha construido esa reputación, y gestiona reintentos, procesamiento de rebotes y calentamiento de IP para que no tengas que escribir esa lógica tú mismo.
Los relés son preferidos sobre los servidores de correo locales siempre que una aplicación envíe algo transaccional: restablecimientos de contraseña, facturas, confirmaciones de pedidos, enlaces de verificación de registro. Los envíos de marketing también se benefician, pero el correo electrónico transaccional es la única categoría donde una entrega fallida rompe directamente un flujo de usuario: nadie restablece su contraseña dos veces. Si quieres una visión más completa sobre la colocación en la bandeja de entrada, esta guía sobre mejores prácticas de entregabilidad de correo electrónico cubre la puntuación de reputación con más profundidad.
Requisitos Antes de Comenzar
Antes de tocar cualquier archivo de configuración, reúne una lista corta de cosas. Saltarse este paso es la razón más común por la que la configuración se prolonga durante una tarde en lugar de diez minutos.
- Una instalación de Laravel en funcionamiento (Laravel 8 a 11 utilizan la misma estructura de configuración de correo).
- Acceso al archivo
.envdel proyecto, ya sea localmente o en el servidor desplegado. - Una cuenta con un proveedor de retransmisión SMTP — Mailgun, SendGrid, Postmark, Amazon SES, o un servicio similar.
- Credenciales de retransmisión: host SMTP, puerto, nombre de usuario y contraseña (o una clave API utilizada como contraseña).
- Un dominio de envío verificado en el lado del proveedor, para que el correo saliente no sea rechazado antes de salir.
La mayoría de los proveedores muestran estas credenciales directamente en su panel bajo una sección etiquetada como "SMTP" o "Integración." Cópialas en un lugar seguro. Necesitarás cada campo.
Configuración de SMTP de Laravel — Configuración Paso a Paso
Laravel mantiene la configuración del correo dividida entre dos archivos: config/mail.php, que define la estructura de cada remitente, y .env, que contiene los valores reales. Casi nunca necesitas editar config/mail.php directamente; los valores predeterminados ya leen de las variables de entorno. Si nunca has hecho esto antes, aprender a configurar el reenvío SMTP en Laravel realmente se reduce a llenar las variables de entorno correctas en el orden correcto.
- Abre tu
.envy estableceMAIL_MAILER=smtp. Esto le dice a Laravel que use el transporte SMTP en lugar delog,sendmail, o un controlador de API. - Establece
MAIL_HOSTa la dirección del servidor SMTP del reenvío, por ejemplosmtp.mailgun.orgosmtp.sendgrid.net. - Establece
MAIL_PORT. Los valores comunes son 587 para TLS, 465 para SSL, o 2525 como respaldo cuando 587 está bloqueado. - Establece
MAIL_USERNAMEyMAIL_PASSWORDa las credenciales que tu proveedor emitió. Para algunos proveedores, el "nombre de usuario" es literalmente la palabraapikey, y la contraseña es tu clave API real. - Establecer
MAIL_ENCRYPTIONentlsen la mayoría de los casos. Déjalo en blanco solo si el proveedor dice explícitamente puerto 25 sin cifrado. - Establecer
MAIL_FROM_ADDRESSyMAIL_FROM_NAME. Estos controlan el encabezado "De" predeterminado, y deben coincidir con un dominio que hayas verificado con el relé. - Ejecuta
php artisan config:cleardespués de guardar. Laravel almacena en caché la configuración de manera agresiva, y los valores obsoletos son la principal razón por la que una nueva configuración "no funciona" en el primer intento.
Así es como se ve un bloque típico una vez completado:
| Variable | Valor de ejemplo | Propósito |
|---|---|---|
| MAIL_MAILER | smtp | Selecciona el controlador de transporte |
| MAIL_HOST | smtp.mailgun.org | Dirección del servidor de retransmisión |
| PUERTO_DE_CORREO | 587 | Puerto de conexión |
| ENCRIPTACIÓN_DE_CORREO | tls | Encripta la sesión SMTP |
| NOMBRE_DE_USUARIO_DE_CORREO | postmaster@tudominio.com | Identificador de cuenta de retransmisión |
| CONTRASEÑA_DE_CORREO | tu-clave-api | secreto de autenticación de Relay |
Nada exótico aquí. Es principalmente copiar y pegar, y los errores suelen provenir de combinaciones de puerto y cifrado desajustadas, no de errores tipográficos.
Probando tu conexión SMTP Relay en Laravel
Nunca confíes en un cambio de configuración hasta que un correo electrónico real llegue. Pruébalo.
- Abre una sesión de Tinker con
php artisan tinker. - Ejecuta
Mail::raw('Mensaje de prueba desde el relay SMTP de Laravel', function ($message) { $message->to('you@example.com')->subject('Prueba SMTP'); });. - Revisa tu bandeja de entrada — y tu carpeta de spam, por si acaso — dentro de uno o dos minutos.
- Si no llega nada, revisa
storage/logs/laravel.logpara el error SMTP real devuelto por el proveedor. - Verifica el resultado contra el panel de control de tu proveedor, que generalmente registra cada intento de envío con un estado de entrega.
Dos errores aparecen constantemente. Un tiempo de espera de conexión generalmente significa que el puerto está bloqueado por su proveedor de alojamiento o firewall, lo cual es tristemente común en planes VPS baratos que bloquean el puerto saliente 25 por defecto. Un fallo de autenticación casi siempre significa que el nombre de usuario y la contraseña se intercambiaron, o que una clave API se pegó con un espacio al final. Si desea una forma más sistemática de verificar la entregabilidad más allá de un solo envío de prueba, hay herramientas dedicadas de prueba de entregabilidad de correo electrónico que verifican la puntuación de spam, la autenticación y las banderas de contenido en una sola pasada.
Laravel API de Correo Electrónico Transaccional — Una Alternativa a SMTP
SMTP no es la única opción. Cada proveedor de retransmisión importante también expone una API REST, y Laravel tiene paquetes de controladores oficiales o comunitarios para la mayoría de ellos: Mailgun, SendGrid, Postmark y SES funcionan de esta manera.
La ruta de la API omite completamente el apretón de manos de SMTP. En lugar de abrir una conexión de socket, autenticar y transmitir el mensaje línea por línea, su aplicación realiza una única solicitud POST HTTPS con la carga útil del correo electrónico adjunta como JSON. Esto es importante porque un buen número de entornos de alojamiento bloquean o limitan los puertos SMTP, mientras que el puerto 443 casi nunca está bloqueado. El envío a través de API también es generalmente más rápido para aplicaciones transaccionales de alto volumen, ya que no hay una conexión persistente que negociar por mensaje.
La configuración varía ligeramente según el proveedor, pero el patrón es consistente:
- Instale el paquete de Laravel del proveedor a través de Composer, por ejemplo
composer require symfony/mailgun-mailer symfony/http-clientpara Mailgun. - Establecer
MAIL_MAILER=mailgun(o el nombre del controlador equivalente) en.env. - Agrega la clave API y el dominio como variables de entorno, siguiendo las claves específicas que espera el controlador.
- Limpia la caché de configuración y envía un mensaje de prueba de la misma manera que lo harías con SMTP.
SMTP todavía tiene su lugar — es universal y funciona de la misma manera sin importar el proveedor, lo cual es útil si alguna vez cambias de relés. Los equipos que desarrollan fuera de Laravel se encuentran con el mismo problema de bloqueo de puertos; el razonamiento en esta guía de relés SMTP para aplicaciones Node.js se aplica igual de bien conceptualmente, aunque el código difiera.
Asegurando tus credenciales SMTP
Trata las contraseñas SMTP y las claves API como credenciales de base de datos de producción. Porque eso es esencialmente lo que son.
- Nunca cometas
.enven el control de versiones. Confirma que está listado en.gitignore— está por defecto en Laravel, pero verifica nuevamente después de cualquier actualización del framework. - Usa credenciales separadas para staging y producción. Una clave de staging filtrada no debería poder enviar correos desde tu dominio de producción.
- Rota las claves API periódicamente, especialmente después de que un miembro del equipo se vaya o se pierda una laptop. La mayoría de los proveedores te permiten generar una nueva clave
y deshabilitar la antigua sin tiempo de inactividad.
Si tu proveedor admite la lista blanca de IP, restringe el acceso a los servidores que realmente envían correos. Combina eso con acceso de menor privilegio en tus herramientas de nube y despliegue para que solo el entorno de la aplicación pueda leer los secretos de correo.
Resolviendo problemas comunes de relé SMTP
Incluso con todo configurado correctamente, la entrega de correos aún puede fallar por razones ajenas a Laravel. Cuando eso sucede, trabaja en el problema de manera sistemática:
- Verifica el nombre de host, el puerto, la configuración de cifrado, el nombre de usuario y la contraseña en tu archivo de entorno.
- Verifica si tu proveedor requiere un dominio de remitente verificado o una dirección de From específica.
- Asegúrate de que el tráfico SMTP saliente esté permitido por el firewall de tu servidor o proveedor de hosting.
- Inspecciona los registros de actividad del proveedor en busca de mensajes de rechazo, límites de tasa o fallos de autenticación.
- Envía un mensaje de prueba desde Laravel Tinker o una ruta simple para aislar el problema del resto de tu aplicación.
Si los mensajes son aceptados pero nunca llegan, el problema puede ser la entregabilidad en lugar de la entrega. En ese caso, revisa tu configuración de SPF, DKIM y DMARC, y confirma que tus registros DNS coincidan con el servicio SMTP que estás utilizando.
Reflexiones Finales
Configurar el reenvío SMTP en Laravel se trata principalmente de usar las credenciales correctas, elegir un proveedor confiable y mantener tu configuración limpia y segura. Una vez que funcione, obtienes una entregabilidad, visibilidad y control mucho mejores que con un servidor de correo básico.
Con un reenvío sólido en su lugar, tu aplicación puede enviar correos de manera consistente en desarrollo, pruebas y producción sin dolores de cabeza innecesarios.
En esta página
← Todos los artículosUn clic. Nos dice qué escribir a continuación.
No hay calificaciones aún — la tuya sería la primera.
Comentarios
Los comentarios se leen antes de aparecer.