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 SMTP Relay en Laravel

Respuesta corta

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 .env del 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.

  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 reenvío, 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 respaldo 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. Establecer MAIL_ENCRYPTION en tls en la mayoría de los casos. Déjalo en blanco solo si el proveedor dice explícitamente puerto 25 sin cifrado.
  6. Establecer MAIL_FROM_ADDRESS y MAIL_FROM_NAME. Estos controlan el encabezado "De" predeterminado, y deben coincidir con un dominio que hayas verificado con el relé.
  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 de retransmisión
PUERTO_DE_CORREO587Puerto de conexión
ENCRIPTACIÓN_DE_CORREOtlsEncripta la sesión SMTP
NOMBRE_DE_USUARIO_DE_CORREOpostmaster@tudominio.comIdentificador de cuenta de retransmisión
CONTRASEÑA_DE_CORREOtu-clave-apisecreto 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.

  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('you@example.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, revisa 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 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:

  1. Instale el paquete de Laravel del proveedor a través de Composer, por ejemplo composer require symfony/mailgun-mailer symfony/http-client para Mailgun.
  2. Establecer 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 espera el controlador.
  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 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 .env en 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.

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.