2mail — SMTP relay desde infraestructura belga

SMTP para Laravel — correo de su aplicación que llega

Laravel lleva integrada una capa de correo completa, con colas, plantillas y avisos. Lo que no aporta es la entregabilidad: eso depende del servidor por el que envía, y la configuración por defecto de un servidor recién montado rara vez es un buen remitente.

Laravel lee sus ajustes de correo del archivo de entorno. Ahí cambia los datos SMTP y el resto de su aplicación se queda igual: no hace falta tocar los mailables, los avisos ni las colas.

Por qué falla sin relay

Una aplicación en desarrollo envía a una dirección de pruebas y todo parece correcto. Al publicarla cambia el público: direcciones reales de proveedores reales, que sí comprueban la autenticación y la reputación. Ese es el momento en que los correos de recuperación dejan de llegar, y solo a una parte de los usuarios, lo que hace difícil detectarlo.

Configurar el SMTP en Laravel

1

Obtener los datos

Acceda a su cuenta de 2mail y obtenga allí su servidor SMTP, su nombre de usuario y su contraseña.

2

Introducirlos en Laravel

Los ajustes de correo están en el archivo de entorno de su aplicación, no en el código. Pone el mailer en SMTP y rellena los cinco datos de abajo. No olvide la dirección y el nombre del remitente: son ajustes aparte, junto a los datos de conexión.

3

Autenticar el dominio

Asegúrese de que SPF, DKIM y DMARC de su dominio son correctos, para que los destinatarios puedan verificar que el correo viene de usted.

4

Probar

Envíe desde su plataforma un mensaje de prueba a una dirección de un gran proveedor y compruebe que llega a la bandeja de entrada y no a la carpeta de spam.

Los campos que pide Laravel

Cada plataforma los llama de una manera algo distinta, pero siempre son los mismos cinco. Los valores concretos dependen de su cuenta y los encuentra en su cuenta de 2mail: cópielos de ahí para asegurarse de usar los correctos.

Campo Qué introducir
Servidor SMTP (host)El nombre del servidor de su cuenta de 2mail.
PuertoEl puerto que corresponde al cifrado elegido; su cuenta le indica cuál.
CifradoTLS. No envíe nunca sin cifrar: de lo contrario sus credenciales viajan en claro.
Nombre de usuarioEl acceso SMTP de su cuenta de 2mail.
ContraseñaLa contraseña correspondiente. No use nunca la contraseña del buzón de un empleado.

Configuración SMTP para Laravel en código

Ejemplos que funcionan para el puerto 587 con STARTTLS, listos para copiar. Sustituya la dirección de remitente por una dirección de su propio dominio y compruebe el nombre del servidor y el acceso en su cuenta de 2mail. La contraseña va en una variable de entorno: nunca en el código y nunca en el control de versiones.

El archivo .env: las variables MAIL_*

Laravel lee todos los datos de conexión de .env. El puerto 587 funciona con STARTTLS: la conexión empieza sin cifrar y se eleva a TLS antes de que su acceso pase por la red. La contraseña está únicamente en el archivo .env del servidor, y ese archivo no debe estar en el control de versiones. Sustituya example.com por un dominio que haya autenticado en 2mail.

MAIL_MAILER=smtp
MAIL_HOST=relay.2mail.eu
MAIL_PORT=587
MAIL_USERNAME="<2mail-smtp-login>"
MAIL_PASSWORD="<2mail-smtp-password>"
MAIL_FROM_ADDRESS="noreply@example.com"
MAIL_FROM_NAME="${APP_NAME}"

# Only when config/mail.php still has an 'encryption' key (older projects):
MAIL_ENCRYPTION=tls

# When config/mail.php has a 'scheme' key instead: leave MAIL_SCHEME unset.
# "smtp" on port 587 upgrades to STARTTLS by itself; "tls" is not a valid scheme.

config/mail.php: el mailer smtp

En un proyecto estándar no tiene que cambiar nada aquí: el archivo se limita a leer las variables de .env. Revíselo, eso sí, cuando un ajuste no tenga efecto: un host escrito directamente en este archivo prevalece siempre sobre su .env. Los proyectos recientes tienen una clave scheme y los más antiguos una clave encryption; el resto es idéntico.

// config/mail.php
'default' => env('MAIL_MAILER', 'smtp'),

'mailers' => [
    'smtp' => [
        'transport' => 'smtp',
        'scheme' => env('MAIL_SCHEME'),                    // newer projects
        // 'encryption' => env('MAIL_ENCRYPTION', 'tls'),  // older projects use this key instead
        'host' => env('MAIL_HOST', 'relay.2mail.eu'),
        'port' => env('MAIL_PORT', 587),
        'username' => env('MAIL_USERNAME'),
        'password' => env('MAIL_PASSWORD'),
        'timeout' => null,
    ],
],

'from' => [
    'address' => env('MAIL_FROM_ADDRESS', 'noreply@example.com'),
    'name' => env('MAIL_FROM_NAME', 'Example'),
],

Enviar un correo de prueba con Tinker

Refresque primero la caché de configuración; de lo contrario seguirá probando los ajustes antiguos. Mail::raw envía de forma síncrona: un error en el host, el puerto o el acceso lo ve de inmediato en el terminal, y no más tarde en el registro de la cola. Envíe a una dirección externa de un gran proveedor.

php artisan config:clear
php artisan tinker

# At the tinker prompt:
Mail::raw('Sent through the 2mail SMTP relay.', fn ($m) => $m->to('you@example.org')->subject('SMTP test'));

Qué correos envía Laravel

Una vez configurado el relay, todos estos pasan por 2mail: no tiene que configurarlos uno a uno.

Recuperación de contraseña y verificación de correo
Avisos y correos de eventos de la aplicación
Facturas y mensajes de suscripción
Informes de tareas programadas
Mensajes de error a los administradores

Errores frecuentes con Laravel

La cola tiene que estar en marcha

Si pone el correo en cola sin un procesador activo, no sale nada y no ve ningún error. Ante un problema de entrega, esta debería ser la primera comprobación, no la última.

La caché de configuración tras un cambio

Si su aplicación funciona con la configuración cacheada, los ajustes de correo modificados no tienen efecto hasta que se refresque esa caché. Un ajuste que "no funciona" a menudo es un ajuste que aún no se ha leído.

Entornos de prueba que envían de verdad

Un entorno de staging con una copia de la base de datos de producción puede enviar sin querer a clientes reales. Limite ahí los destinatarios de forma explícita, o use un acceso aparte.

Mensajes de error habituales con Laravel

Los mensajes que recibe cuando el host, el puerto, el cifrado o el acceso no son correctos: citados literalmente, para que los reconozca en su registro, con la causa y la solución al lado.

Mensaje Causa Solución
Connection could not be established with host "relay.2mail.eu:587": stream_socket_client(): Unable to connect to relay.2mail.eu:587 (Connection timed out) Su servidor no llega al relay. Lo habitual es que el cortafuegos de su proveedor de alojamiento bloquee el tráfico saliente por el puerto 587, o que haya una errata en MAIL_HOST o MAIL_PORT. Pruebe desde el mismo servidor con openssl s_client -starttls smtp -connect relay.2mail.eu:587. Si no hay respuesta, pida a su proveedor de alojamiento que abra el tráfico saliente por el puerto 587.
Connection could not be established with host "ssl://relay.2mail.eu:587": stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:…:SSL routines::wrong version number El scheme está en smtps (o, en un proyecto más antiguo, MAIL_ENCRYPTION=ssl). Laravel espera entonces TLS desde el primer byte, mientras que el puerto 587 empieza sin cifrar y solo después se eleva a TLS por STARTTLS. Deje MAIL_SCHEME vacío o póngalo en smtp; en un proyecto más antiguo, ponga MAIL_ENCRYPTION=tls. El puerto sigue siendo el 587.
Failed to authenticate on SMTP server with username "…" using the following authenticators: "LOGIN", "PLAIN". … Expected response code "235" but got code "535" El relay rechaza el acceso: un usuario o una contraseña incorrectos, una contraseña con un espacio o una # que no va entre comillas en .env, o una configuración antigua en caché. Ponga el valor entre comillas dobles, ejecute php artisan config:clear y use el acceso SMTP de su cuenta de 2mail, no la contraseña de un buzón.
The "tls" scheme is not supported; supported schemes for mailer "smtp" are: "smtp", "smtps". En MAIL_SCHEME pone tls. Esa variable no es la sucesora de MAIL_ENCRYPTION: solo conoce smtp y smtps. Elimine MAIL_SCHEME o póngalo en smtp. En el puerto 587, el mailer pasa por sí solo a STARTTLS.
Expected response code "250/251/252" but got code "554", with message "554 5.7.1 <noreply@example.com>: Sender address rejected" El acceso es correcto, pero la dirección de remitente pertenece a un dominio que no está vinculado a su cuenta de 2mail. A menudo MAIL_FROM_ADDRESS conserva todavía el valor por defecto del archivo de ejemplo. Ponga en MAIL_FROM_ADDRESS una dirección de un dominio que haya añadido en 2mail, y compruebe que ningún Mailable fija un from() propio en otro dominio.
SPF, DKIM y DMARC explicados Sobre la entregabilidad

¿Otra plataforma?

SMTP es un protocolo estándar: cualquier sistema que hable SMTP —un CRM, un ERP, una aplicación propia o un servidor— puede enviar a través de 2mail con esos mismos cinco campos.

Preguntas frecuentes sobre el SMTP para Laravel

Laravel aporta la capa de correo, no la entregabilidad: eso depende del servidor por el que envía. La configuración por defecto de un servidor recién montado rara vez es un buen remitente, porque no hay autenticación ni reputación construida.
En el archivo de entorno de su aplicación, no en el código. Pone el mailer en SMTP y rellena el host, el puerto, el usuario, la contraseña y el cifrado. No olvide la dirección y el nombre del remitente: son ajustes aparte, al lado.
Si su aplicación funciona con la configuración cacheada, los ajustes de correo modificados no tienen efecto hasta que se refresque esa caché. Un ajuste que "no funciona" a menudo es un ajuste que aún no se ha leído.
Compruebe si la cola se está procesando. Si pone el correo en cola sin un procesador activo, no sale nada y tampoco aparece ningún mensaje de error. Esta debería ser la primera comprobación, no la última.
Un entorno de staging con una copia de la base de datos de producción puede enviar sin querer a direcciones reales. Limite ahí los destinatarios de forma explícita, o use un acceso aparte para poder seguir ese tráfico por separado.
Trust Guard Security Scanned
Llamar ahora
Enviar un correo