YourTrend
API de correo electrónico y SMTP Campañas Automatizaciones SMS Web push Mensajeros Bandeja de entrada unificada Correo seguro Analítica
ENUKRUDEESFRITPLPTHIZH
Iniciar sesión Comenzar gratis
API & SMTP

Cómo configurar el relé SMTP en Laravel

Respuesta corta

Aprende a configurar el relé SMTP en Laravel con una configuración .env paso a paso, consejos de prueba y una alternativa de API transaccional.

Qué es un relay SMTP y por qué usar uno con Laravel

Un relay 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 relay 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 analizan 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 relay 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 relays 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 el flujo de un 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 previos 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 .env del proyecto, ya sea localmente o en el servidor desplegado.
  • Una cuenta con un proveedor de relay SMTP: Mailgun, SendGrid, Postmark, Amazon SES o un servicio similar.
  • Credenciales de relay: host SMTP, puerto, nombre de usuario y contraseña (o una clave API utilizada como contraseña).
  • Un dominio de envío verificado del 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 SMTP de Laravel — Configuración Paso a Paso

Laravel mantiene la configuración de correo dividida entre dos archivos: config/mail.php, que define la estructura de cada mailer, 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.

  1. Abre tu .env y establece MAIL_MAILER=smtp. Esto le dice a Laravel que use el transporte SMTP en lugar de log, sendmail, o un controlador de API.
  2. Establece MAIL_HOST a la dirección del servidor SMTP del relay, por ejemplo smtp.mailgun.org o smtp.sendgrid.net.
  3. Establece MAIL_PORT. Los valores comunes son 587 para TLS, 465 para SSL, o 2525 como una alternativa cuando 587 está bloqueado.
  4. Establece MAIL_USERNAME y MAIL_PASSWORD a las credenciales que tu proveedor emitió. Para algunos proveedores, el "nombre de usuario" es literalmente la palabra apikey, y la contraseña es tu clave API real.
  5. Establece MAIL_ENCRYPTION a tls en la mayoría de los casos. Déjalo en blanco solo si el proveedor dice explícitamente puerto 25 sin cifrado.
  6. Establece MAIL_FROM_ADDRESS y MAIL_FROM_NAME. Estos controlan el encabezado "De" predeterminado, y deben coincidir con un dominio que hayas verificado con el relay.
  7. Ejecuta php artisan config:clear despué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:

VariableValor de ejemploPropósito
MAIL_MAILERsmtpSelecciona el controlador de transporte
MAIL_HOSTsmtp.mailgun.orgDirección del servidor relay
MAIL_PORT587Puerto de conexión
MAIL_ENCRYPTIONtlsEncripta la sesión SMTP
MAIL_USERNAMEpostmaster@tudominio.comIdentificador de cuenta relay
MAIL_PASSWORDtu-clave-apiSecreto de autenticación del relay

Nada exótico aquí. Es principalmente copiar y pegar, y los errores suelen provenir de combinaciones de puerto y encriptación desajustadas, no de errores tipográficos.

Probando tu conexión de relay SMTP en Laravel

Nunca confíes en un cambio de configuración hasta que un correo electrónico real llegue. Pruébalo.

  1. Abre una sesión de Tinker con php artisan tinker.
  2. Ejecuta Mail::raw('Mensaje de prueba desde el relay SMTP de Laravel', function ($message) { $message->to('tú@ejemplo.com')->subject('Prueba SMTP'); });.
  3. Revisa tu bandeja de entrada — y tu carpeta de spam, por si acaso — dentro de uno o dos minutos.
  4. Si no llega nada, verifica storage/logs/laravel.log para el error SMTP real devuelto por el proveedor.
  5. 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 tu proveedor de hosting o firewall, lo cual es deprimente 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 deseas una forma más sistemática de verificar la entregabilidad más allá de una única prueba de envío, 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.

API de Correo Electrónico Transaccional de Laravel — 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 SMTP. En lugar de abrir una conexión de socket, autenticar y transmitir el mensaje línea por línea, tu aplicación realiza una única solicitud POST HTTPS con la carga del correo electrónico adjunta como JSON. Esto es importante porque un buen número de entornos de hosting bloquean o limitan los puertos SMTP, mientras que el puerto 443 casi nunca está bloqueado. El envío por 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:

  1. Instala el paquete de Laravel del proveedor a través de Composer, por ejemplo composer require symfony/mailgun-mailer symfony/http-client para Mailgun.
  2. Establece MAIL_MAILER=mailgun (o el nombre del controlador equivalente) en .env.
  3. Agrega la clave API y el dominio como variables de entorno, siguiendo las claves específicas que el controlador espera.
  4. 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 independientemente del proveedor, lo cual es útil si alguna vez cambias de relés. Los equipos que construyen fuera de Laravel se enfrentan al mismo problema de bloqueo de puertos; la lógica en esta guía de relé 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 .env en el control de versiones. Confirma que está listado en .gitignore — por defecto está en Laravel, pero verifica nuevamente después de cualquier actualización del marco.
  • 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 va o se pierde una laptop. La mayoría de los proveedores te permiten generar una nueva clave
y desactivar 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 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 relé 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 esté funcionando, obtienes una entregabilidad, visibilidad y control mucho mejores que con un servidor de correo básico.

Con un relé sólido en su lugar, su aplicación puede enviar correos de manera consistente en desarrollo, pruebas y producción sin dolores de cabeza innecesarios.

Términos explicados en el glosario: SPF · DKIM · DMARC
En esta página ← Todos los artículos
¿Fue útil?

Un 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.
  1. No hay comentarios aún. Inicia la conversación.
Ponerlo en práctica

Comienza a enviar en minutos

Esta página fue encontrada buscando por

Consultas de búsqueda reales que traen personas aquí — las resaltadas abren la página correspondiente.