
«El formulario de contacto no me llega.» Es una de las consultas más repetidas sobre WordPress, y casi nunca es culpa del formulario.
Por defecto, WordPress envía los correos con la función mail() de PHP, que entrega el mensaje al servidor sin ninguna identificación. Para Gmail, Outlook y compañía, eso se parece demasiado al spam. El resultado: correos que se pierden o terminan en la carpeta de correo no deseado.
La solución es enviarlos por SMTP, autenticándote con una cuenta de correo real. La mayoría lo hace con un plugin, pero son 30 líneas de código, y así tienes una dependencia menos.
Paso 1: crea la cuenta de correo
En cPanel, ve a Cuentas de correo electrónico y crea una cuenta tipo [email protected]. Luego, en Conectar dispositivos (o «Configurar cliente de correo») anota el servidor de salida (SMTP) y el puerto. Normalmente es mail.tudominio.cl con el puerto 465.
Si tu correo está en Google Workspace o en un servicio transaccional (Brevo, Mailgun, Amazon SES, Postmark), usa sus datos SMTP. Para cuentas de Google necesitas una contraseña de aplicación de Google, no tu contraseña normal.
Paso 2: los datos, en wp-config.php
Nunca escribas contraseñas en un archivo de plugin o en functions.php. Agrégalas a wp-config.php, antes de «That’s all, stop editing»:
define( 'CWP_SMTP_HOST', 'mail.tudominio.cl' );
define( 'CWP_SMTP_PORT', 465 ); // 465 = SSL, 587 = TLS
define( 'CWP_SMTP_SECURE', 'ssl' ); // 'ssl' con 465, 'tls' con 587
define( 'CWP_SMTP_USER', '[email protected]' );
define( 'CWP_SMTP_PASS', 'la-contraseña-de-la-cuenta' );
define( 'CWP_SMTP_FROM_NAME', 'Mi Sitio' );
Paso 3: el mu-plugin
Crea wp-content/mu-plugins/cwp-smtp.php:
<?php
/**
* Plugin Name: SMTP sin plugins (Curso WordPress)
* Description: Envía los correos de WordPress por SMTP usando los datos de wp-config.php.
*/
add_action( 'phpmailer_init', function ( $phpmailer ) {
if ( ! defined( 'CWP_SMTP_HOST' ) ) {
return; // Sin datos, WordPress sigue como siempre.
}
$phpmailer->isSMTP();
$phpmailer->Host = CWP_SMTP_HOST;
$phpmailer->Port = CWP_SMTP_PORT;
$phpmailer->SMTPSecure = CWP_SMTP_SECURE;
$phpmailer->SMTPAuth = true;
$phpmailer->Username = CWP_SMTP_USER;
$phpmailer->Password = CWP_SMTP_PASS;
// El remitente debe ser la misma cuenta que se autentica.
$phpmailer->setFrom( CWP_SMTP_USER, CWP_SMTP_FROM_NAME, false );
} );
// Si un correo falla, deja constancia en el registro de errores.
add_action( 'wp_mail_failed', function ( $error ) {
$datos = $error->get_error_data();
$para = isset( $datos['to'] ) ? implode( ', ', (array) $datos['to'] ) : '?';
error_log( '[cwp-smtp] Falló el envío a ' . $para . ': ' . $error->get_error_message() );
} );
El remitente importa. Si tu formulario envía los correos «de parte de» la persona que escribe (De: [email protected]), Gmail los rechazará aunque uses SMTP, porque tu servidor no puede enviar en nombre de Gmail. Usa siempre tu cuenta como remitente y pon el correo del cliente en Responder a (casi todos los plugins de formularios tienen esa opción).
Paso 4: prueba
Con WP-CLI, desde la terminal de cPanel:
wp eval 'var_dump( wp_mail( "[email protected]", "Prueba SMTP", "Si lees esto, funciona." ) );'
Si responde bool(true) y el correo llega a la bandeja de entrada, listo. Si responde bool(false), revisa el archivo error_log de tu sitio: ahí verás el motivo exacto (contraseña incorrecta, puerto bloqueado, etc.).
Sin terminal, usa la opción «Olvidé mi contraseña» en la pantalla de inicio de sesión con tu propio usuario. Es un correo que WordPress envía con wp_mail().
Paso 5: la otra mitad, SPF, DKIM y DMARC
SMTP demuestra que tienes una cuenta. Estos tres registros DNS demuestran que tu dominio autoriza a tu servidor a enviar correo. Sin ellos, Gmail y Outlook rechazan cada vez más mensajes.
- En cPanel, abre Capacidad de entrega de correo electrónico (Email Deliverability).
- Si al lado de tu dominio dice que hay problemas, pulsa Administrar y luego Reparar en SPF y DKIM. Si tu DNS está en Cloudflare, copia los registros que te muestra y créalos allá.
- Agrega un registro DMARC básico (tipo
TXT, nombre_dmarc):
v=DMARC1; p=none; rua=mailto:[email protected]
Con p=none solo recibes reportes, sin bloquear nada. Cuando confirmes durante unas semanas que todo pasa, puedes subirlo a p=quarantine.
Si administras un VPS con WHM: la opción SMTP Restrictions impide que los sitios se conecten a servidores SMTP externos. Si usas el correo del mismo servidor no te afecta; si usas Brevo o Google, tendrás que desactivarla o permitir ese puerto en CSF.
¿Tus correos siguen en spam? Comparte en el foro los encabezados de un correo que llegó a spam (en Gmail: «Mostrar original») y vemos qué está fallando.





