Me ha pasado recientemente que un formulario web instalado en la página de un cliente no enviaba los correos con el formulario rellenado a pesar de que al remitente le indicaba que si. Jamás llegaban al destino.
He tenido que investigar el asunto y lo comparto aquí por si a alguien más le pasa.
El caso es que WordPress utiliza una función llamada phpmailer para enviar los mails mediante protocolo SMTP. En ocasiones la configuración de esa función no coincide con la que nuestro servidor de hosting exige para poder usar su servicio de correo con lo que el sistema no funciona. Esto se puede deber a varios motivos.
Existen algunos plugins paraWordPress que nos pueden ayudar con este asunto pero instalar un plugin cada vez que tenemos un problema puede sobrecargar demasiado nuestro sitio web, con la consiguiente penalización en el posicionamiento en buscadores (el tiempo de carga es un factor fundamental en el SEO).
Por ello vamos a optar por una solución más eficiente que es la de incluir un código en el fichero functions.php de nuestro tema de WordPress.
Tenemos dos posibles situaciones de partida: que estemos usando un tema de WP o bien un tema hijo (child theme).
En el primer caso simplemente debemos (mediante un cliente ftp) buscar el fichero en /wp-content/themes/nombredeltema/functions. php en nuestra instalación de WordPress, descargarlo y editarlo con un editor de texto para añadirle el código que veremos más adelante.
En el segundo deberemos crear un nuevo fichero funtions.php desde cero, que después se sumará al del tema padre automáticamente, y subirlo a nuestra carpeta con el tema hijo en /wp-content/themes/nombredeltemahijo/
Vamos con el código donde deberás sustituir tus datos el texto que aparece en rojo:
add_action(‘phpmailer_init’,’send_smtp_email’);
function send_smtp_email( $phpmailer )
{
// Especifica que se va a enviar usando el protocolo SMTP
$phpmailer->isSMTP();// La dirección SMTP suministrada por tu hosting
$phpmailer->Host = «smtp.tudominio.com«;// Indica la autenticación por SMTP (true|false)
$phpmailer->SMTPAuth = true;// Puerto SMTP – Te lo indica tu hosting en las configuraciones del correo
$phpmailer->Port = «25«;// Nombre del usuario de la cuenta de correo que va a usar el formulario
$phpmailer->Username = «nombre del usuario«;// Contraseña del usuario del correo
$phpmailer->Password = «contraseña«;// El tipo de encriptación usada – ssl (deprecated) o tls
$phpmailer->SMTPSecure = «tls«;//Aquí van los datos con los que se firmará el envió para que los identifiques en tu buzón cuando lleguen
$phpmailer->From = «tucuentadecorreo@dominio.com«;
$phpmailer->FromName = «Nombre que quieres que aparezca como remitente«;
}
Si estás creando el fichero php desde cero (para un tema hijo, recuerda) no olvides abrir el documento con un <?php y cerrarlo con un ?> , si no la web se quedará en blanco y estarás al borde del infarto.
Si se trata de un tema normal simplemente añáde el código al final del documento original justo delante del ?>
no funciona no llegan los mails de ninjaforms
No conozco ninjaforms así que supongo que o se debe a una incorrecta configuración del plugin o a que este no usa phpmailer.
Tengo alojado mi sitio en un hosting con restricciones. Instale contactform 7 que siempre me ha funcionado de maravillas, pero con las restricciones de hosting no funciona.
De la empresa de hosting me dijeron que usara phpmailer y no iba a tener problemas.
Es posible que tu ejemplo funcione bien considerando lo que te comento?
Muchas gracias
Si, yo creo que por ahí van los tiros. A ver si hay suerte.