Una de las incidencias que más se repiten (o al menos una de las consultas más recurrentes que me llegan) es que WordPress no envía emails. Hablamos, claro está, de los emails de nuevos usuarios, de cambio de contraseña, de los envíos del formulario de contacto o incluso los relativos a los pedidos de WooCommerce.
Las causas pueden ser varias, y lo primero que tenemos que hacer es saber por qué está ocurriendo para aplicar una solución u otra. Así que vamos a repasar las posibles razones de que WordPress no esté enviando emails, y cómo solucionar cada una de ellas.
Por cierto, que la herramienta que veremos al final te servirá perfectamente también si necesitas enviar emails con WordPress instalado en un servidor en localhost.
Tabla de contenidos
Qué está pasando con los emails en mi WordPress
Con esto, como con todo, para poder aplicar una solución efectiva es imprescindible saber cuál es el problema, así que hay que comenzar haciendo algunas pruebas para conocer la causa de que WordPress no esté enviando emails.
O a lo mejor sí lo está haciendo…
Enviando emails de prueba con WordPress
Lo primero que necesitamos es poder enviar emails de prueba (o, al menos, intentarlo) para comprobar qué está pasando y poder utilizar, configurar y probar las herramientas que vamos a ir viendo.
Para esto no hay nada mejor que Check Email, un sencillo plugin que te permite enviar mediante WordPress emails de prueba.
Al activarlo tienes la herramienta correspondiente en Herramientas > Check Email, y no sólo te permite enviar (o, al menos, intentarlo) un email de prueba desde WordPress: además te informa de cuál es la configuración para envío de emails (SendMail y/o servidor SMTP) y las cabeceras que están configuradas en la web (campo From y tipos MIME). Y, no sólo eso, sino que además te permite utilizar cabeceras personalizadas para realizar la prueba.
Pero ojo, que Check Email te informe de que el email haya sido enviado no significa que realmente el email haya sido enviado, sino que WordPress ha hecho su trabajo. Sin embargo, esto nos va a facilitar una primera comprobación y una herramienta útil para hacer la pruebas necesarias en la resolución de nuestro problema.
Si por el contrario recibes el email enviado por Check Email (el asunto será Test email from https://www.tudominio.com) tendrás que buscar otra causa: tu WordPress sí está enviando emails correctamente.
Revisa la configuración del formulario de contacto, de los emails de WooCommerce (WooCommerce > Ajustes > Correos electrónicos) o de lo que sea que no te está enviando los correos. El problema no es de WordPress.
Los emails que envía tu web van a spam
A veces resulta que WordPress sí está enviando emails, pero éstos se van directos a la carpeta de spam, o son rechazados por el servidor por esta misma causa. Así que, si no recibes emails de tu web, lo primero que tienes que hacer es comprobar la bandeja de correo no deseado.
Si es esto lo que está pasando, lo siento mucho: ya no tienes el problema de que WordPress no envíe emails, pero tienes uno más peliagudo.
Dejo pendiente la tarea de qué acciones se pueden tomar para evitar que los emails que salen de tu web se vayan directos a la bandeja de correo no deseado, pero de momento te remito a una herramienta: Email tester.
Actualización. Puedes ampliar la información sobre este tema aquí:
Esta web te permite comprobar la puntuación de spam de tus emails con sólo enviarle un correo electrónico (puedes utilizar la herramienta que acabamos de ver en el apartado anterior) y te dice qué aspectos de éstos necesitas mejorar para evitar las carpetas de correo no deseado, junto a unas indicaciones sobre cómo hacerlo.
¿Estás construyendo tu tienda online o eres implementador WordPress?
¿Necesitas plugins de calidad y con soporte para implementar funcionalidades concretas?
Consigue todos los plugins a la venta en la sección de plugins de esta web y todos los que siga añadiendo. Acceso a los 96 plugins (y subiendo) con soporte directo del desarrollador, actualizaciones y uso ilimitado: úsalos en tantas webs como lo necesites.
Qué hacemos si realmente WordPress no está enviando emails
Bien, pues resulta que has probado Check Email y, aunque te diga que los emails se están enviando, tú no recibes nada. Has comprobado la carpeta de correo basura, y allí tampoco hay nada (ojo a muchos servidores, que a veces no envían el spam allí y simplemente lo rechazan, comprueba con una dirección Gmail o Hotmail).
Vale, ¿qué toca hacer ahora? La primera opción es, por supuesto, ponerte en contacto con tu proveedor de hosting. Es poco probable que la incidencia se deba a ellos, pero quizá puedan hacer algo al respecto o darte alguna pista (mirando los logs) de lo que está pasando en tu servidor de correo.
Si resulta que es uno de estos servicios de hosting baratos con un servicio de atención al cliente pésimo, simplemente te contestan que han hecho las comprobaciones y por su parte está todo correcto, o simplemente resulta que sí, que tu hosting está bloqueando determinados puertos y eso no permite que salgan emails, no te queda otra: tienes que buscar alternativas.
Y la alternativa más fácil y efectiva es utilizar un servidor SMTP externo. Esto podrás implementarlo gracias al plugin Post SMTP Mailer/Email Log que te permite precisamente eso: configurar un servidor SMTP para que WordPress lo utilice en sus envíos de correo electrónico.
Este plugin te permitirá utilizar para el envío de emails (incluso desde un servidor en local, como XAMPP) utilizando otros servicios como:
- GMail
- Mandrill (que es el servicio de envío SMTP de MailChimp, requiere cuenta premium)
- SendGrid (hasta doce mil emails mensuales con la cuenta gratuita)
- Cualquier otro proveedor que utilice OAuth 2.0
La configuración es realmente sencilla (Ajustes > Postman SMTP), ya que además incluye un asistente de configuración:
Una vez configurado ya sabes qué tienes que hacer: enviar un nuevo email de prueba. Esta vez no necesitas Check Email ya que Postman SMTP incluye también una herramienta similar (Ajustes > Postman SMTP > Send a Test Email).
Si sigues sin recibirlo no desesperes: ahora tendrás más pistas de lo que ha pasado. Sólo tienes que ir a Herramientas > Email log (donde Postman SMTP guarda un registro de la actividad) y mirar la causa del error del email de prueba.
Sin embargo esta vez serán cosas sencillas de resolver, ya que estás utilizando un servidor SMTP: un nombre de usuario o contraseña mal puestos, seguramente. En cualquier caso, con la descripción del error que te dé Postman SMTP podrás fácilmente encontrar una solución.
Y si no, me puedes consultar y, si está en mi mano, te echaré una mano encantado. No tienes más que usar el formulario de contacto. 🙂
Actualización: si WooCommerce no envía los emails cuando se recibe un nuevo pedido
La actualización a WooCommerce 3.0 está causando muchos problemas, y uno recurrente es que no se envían los emails de nuevo pedido (ni el que debería recibir el gestor de la tienda ni el del cliente).
Sin embargo, si entras al pedido y haces que se envíen esos emails mediante las acciones del pedido se envían correctamente, al igual que cualquier otro email de WooCommerce.
Si estás sufriendo este problema, puedes solucionarlo fácilmente añadiendo este filtro en el archivo functions.php de tu plantilla:
add_filter ('woocommerce_defer_transactional_emails', '__return_false');
Eduardo dice
Genial Enrique!
Estaré a la espera del post en el que hables de cómo solucionar cuando te lo envían a spam. en Mail-tester me da una nota de 4/10 🙁 y precisamente estoy escribiendo a mi hosting a ver si me ayudan a solucionarlo.
Un abrazo!
Enrique J. Ros dice
Pues intentaré que sea esta misma semana que entra 🙂
Un saludo y gracias!
Eduardo dice
Dicho y hecho!! Gracias Enrique! 🙂
Enrique J. Ros dice
De nuevo, a ti 🙂
Dan dice
Hola, podrías especificar qué es lo que hace exactamente el filtro para los correos en WooCommerce? Gracias
Enrique Ros dice
Hola Dan
Desde WooCommerce 3.0 los emails de nuevo pedido se encolan para hacer que el checkout sea más rápido, al no tener que generarse en ese momento (esos segundos en que la ruedecita se queda dando vueltas). Sin embargo, en algunos servidores/configuraciones puede ocurrir que finalmente no se envíen. Deshabilitar ese filtro hace que se envíen al momento del checkout.
Un saludo.
Daniel dice
Hola enrique!
Antes de nada gracias por toda la ayuda, conocimietnos y soluciones que nos brindas! tengo una duda… ¿A qué se puede deber que Woocommerce no envíe los correos de cambio de estado del pedido a los clientes que hacen la compra como invitados sin registrarse?
No sé que más hacer ya para solucionarlo.
Un saludo y gracias por tu tiempo
Enrique Ros dice
Hola daniel
Pues habría que hacer diversas pruebas hasta dar con la causa. Lo primero que podrías intentar es a desactivar el resto de plugins, es posible que alguno de ellos esté estableciendo un filtro que interfiera con esta función.
Un saludo.
elena dice
Hola Enrique, gracias por tu interesantísimo artículo.
Quería consultarte porque efectivamente no me funciona el envío de correos en:
nuevo pedido, pedido cancelado y pedido fallido
Si funcionan todos los demás, los que se envían al cliente como: registro, pedido completado etc.
Y tal y como cuentas en este artículo, si enviaba los correos si los forzaba desde Pedidos/Acciones del pedido/reenviar…
Pero desde que he actualizado a la versión de woocommerce 3.2.0, ni siquiera tengo estas opciones. Solo aparecen:
– Enviar por correo electrónico al cliente los detalles
– Regenerar los permisos de descarga
Aún así, he incluido la línea que comentas en functions.php y nada… sigue sin enviar estos tres tipos de correos.
¿se te ocurre qué puede estar pasando?
Muchísimas gracias de antemano por tu interés.
Enrique J. Ros dice
Hola Elena
Pues en ese caso hay que comprobar todo paso a paso, a ver dónde puede estar el fallo. Lo primero de todo, ¿esos correos están activados? Puede parecer una obviedad, pero te sorprendería la cantidad de «errores» me encuentro que finalmente resultan estar causados por la propia configuración. Si lo están (WooCommerce > Ajustes > Correos electrónicos) tendrás que empezar a hacer de detective, con los logs de emails, de WooCommerce y de servidor.
Un saludo.
Elena dice
Buenos días Enrique,
Muchas gracias por tu rápida respuesta.
Efectivamente los correos están activados.
Y envía todos los correos de woocommerce excepto: nuevo pedido, pedido cancelado y pedido fallido al administrador.
Todo esto ocurre desde la actualización a 3.1.2, que es la que tengo activa actualmente.
Antes tenía la versión 2.3.13 y funcionaba correctamente.
He hecho un log de correos y es que ni siquiera llega a generar esos tres correos.
He implementado la línea que comentas en functions y nada de nada.
Y ahí me he quedado, jejeje, no sé que más hacer.
Gracias por tu interés 😉
Enrique J. Ros dice
Pues entonces tendrás que ver si se genera algún error (en los logs del servidor) e incluso activa el modo debug para ver posibles avisos y mensajes que se estén produciendo, y a partir de ahí comenzar a investigar.
Un saludo.
Elena dice
Muchas gracias por tus recomendaciones Enrique.
Seguiré tus consejos 🙂
Saludos
Cristian Quirós dice
Hola Enrique,
Gracias por la información. Mi caso es el siguiente, a ver si sabes ayudarme:
Wordpress manda emails correctamente por SMTP pero Woocommerce no. Sólo al cambiar el estado manualmente.
Tengo una versión 3.2.4 reciéna ctualizada ayer a ver si solucionaba el problema, pero nada.
He probado a meter la linea de código que das en el functions.php pero nada.
Creo que lo próximo va a ser resintalar Woocommerce en una versión anterior si no encuentro la solución.
El log del debug al cancelar un pedido no me dice mucho. te lo pongo por si te suena. Gracias.
[22-Nov-2017 11:01:51 UTC] PHP Notice: post se llamó incorrectamente. No se debería acceder a las propiedades del producto directamente. Backtrace: require(‘wp-blog-header.php’), require_once(‘wp-includes/template-loader.php’), include(‘/themes/betheme/page.php’), mfn_builder_print, mfn_print_column, do_shortcode, preg_replace_callback, do_shortcode_tag, WC_Shortcodes::checkout, WC_Shortcodes::shortcode_wrapper, WC_Shortcode_Checkout::output, WC_Shortcode_Checkout::order_pay, wc_get_template, include(‘/plugins/woocommerce/templates/checkout/order-receipt.php’), do_action(‘woocommerce_receipt_redsys’), WP_Hook->do_action, WP_Hook->apply_filters, WC_Redsys->receipt_page, WC_Redsys->generate_redsys_form, WC_Abstract_Legacy_Product->__get, wc_doing_it_wrong Por favor, visita Depuración en WordPress para más información. (Este mensaje se añadió en la versión 3.0.) in /homepages/42/d689102010/htdocs/clickandbuilds/U2FITNESS/wp-includes/functions.php on line 4139
[22-Nov-2017 11:01:51 UTC] PHP Notice: post se llamó incorrectamente. No se debería acceder a las propiedades del producto directamente. Backtrace: require(‘wp-blog-header.php’), require_once(‘wp-includes/template-loader.php’), include(‘/themes/betheme/page.php’), mfn_builder_print, mfn_print_column, do_shortcode, preg_replace_callback, do_shortcode_tag, WC_Shortcodes::checkout, WC_Shortcodes::shortcode_wrapper, WC_Shortcode_Checkout::output, WC_Shortcode_Checkout::order_pay, wc_get_template, include(‘/plugins/woocommerce/templates/checkout/order-receipt.php’), do_action(‘woocommerce_receipt_redsys’), WP_Hook->do_action, WP_Hook->apply_filters, WC_Redsys->receipt_page, WC_Redsys->generate_redsys_form, WC_Abstract_Legacy_Product->__get, wc_doing_it_wrong Por favor, visita Depuración en WordPress para más información. (Este mensaje se añadió en la versión 3.0.) in /homepages/42/d689102010/htdocs/clickandbuilds/U2FITNESS/wp-includes/functions.php on line 4139
[22-Nov-2017 11:01:51 UTC] PHP Notice: billing_first_name se llamó incorrectamente. Order properties should not be accessed directly. Backtrace: require(‘wp-blog-header.php’), require_once(‘wp-includes/template-loader.php’), include(‘/themes/betheme/page.php’), mfn_builder_print, mfn_print_column, do_shortcode, preg_replace_callback, do_shortcode_tag, WC_Shortcodes::checkout, WC_Shortcodes::shortcode_wrapper, WC_Shortcode_Checkout::output, WC_Shortcode_Checkout::order_pay, wc_get_template, include(‘/plugins/woocommerce/templates/checkout/order-receipt.php’), do_action(‘woocommerce_receipt_redsys’), WP_Hook->do_action, WP_Hook->apply_filters, WC_Redsys->receipt_page, WC_Redsys->generate_redsys_form, WC_Abstract_Legacy_Order->__get, wc_doing_it_wrong Por favor, visita Depuración en WordPress para más información. (Este mensaje se añadió en la versión 3.0.) in /homepages/42/d689102010/htdocs/clickandbuilds/U2FITNESS/wp-includes/functions.php on line 4139
[22-Nov-2017 11:01:51 UTC] PHP Notice: billing_last_name se llamó incorrectamente. Order properties should not be accessed directly. Backtrace: require(‘wp-blog-header.php’), require_once(‘wp-includes/template-loader.php’), include(‘/themes/betheme/page.php’), mfn_builder_print, mfn_print_column, do_shortcode, preg_replace_callback, do_shortcode_tag, WC_Shortcodes::checkout, WC_Shortcodes::shortcode_wrapper, WC_Shortcode_Checkout::output, WC_Shortcode_Checkout::order_pay, wc_get_template, include(‘/plugins/woocommerce/templates/checkout/order-receipt.php’), do_action(‘woocommerce_receipt_redsys’), WP_Hook->do_action, WP_Hook->apply_filters, WC_Redsys->receipt_page, WC_Redsys->generate_redsys_form, WC_Abstract_Legacy_Order->__get, wc_doing_it_wrong Por favor, visita Depuración en WordPress para más información. (Este mensaje se añadió en la versión 3.0.) in /homepages/42/d689102010/htdocs/clickandbuilds/U2FITNESS/wp-includes/functions.php on line 4139
Enrique J. Ros dice
Hola Cristian
Los avisos del log no tienen nada que ver con eso (es por una mala integración de la plantilla con WooCommerce 3.0). Tendrás que investigar cuál es la causa, empieza cambiando momentáneamente a Storefront y desactivando el resto de plugins, a ver si la plantilla o algún otro plugin están interfiriendo.
Un saludo.
Rubén dice
Elena, me pasa lo mismo que a ti. ¿Has conseguido resolver?
marta dice
Hola Enrique!
muy buen articulo.
estoy empezando con woocommerce y tengo un problema de envio de emails. Lo que me ocurre a mi es que tengo la tienda en modo test con stripe. Si hago el pedido estando logueada como admin de wp el email de nuevo pedido me llega bien, en cambio si lohago en incognito con otro correo no me funciona y no me llega el email de nuevo pedido, aunque al email si que me llega el email de nueva cuenta y el del pedido del cliente, pero el email de «nuevo pedido de cliente» en el email de la tienda no me llegua. Es normal? es proque estoy en test?
un saludo y gracias
Enrique J. Ros dice
Hola Marta
¿Has comprobado el log de emails para ver si realmente se están generando esos emails?
Un saludo
carlos dice
Buenas tardes Enrique,
Me pasa exactamente el caso que comentas con Woocommerce. El caso es que tengo un tema hijo en mi WP, no se si el filtro (add_filter (‘woocommerce_defer_transactional_emails’, ‘__return_false’);) debería añadirlo en el functions.php del tema hijo o del tema padre, y en que lugar del archivo debería hacerlo.
Espero que me puedas ayudar!
Muchas gracias!!
Enrique J. Ros dice
Hola Carlos
Cualquier modificación ha de hacerse siempre sobre el tema hijo, que para eso está 🙂
Un saludo.
Carlos dice
Por cierto Enrique, hay algún al meter dicho código? siempre me da un poco de respeto tocar el functions.php jaja!
Gracias!!!
Carlos dice
Algún peligro*
Enrique J. Ros dice
El de siempre: de copiar y pegar mal, y se vaya algún carácter de más o de menos. Cualquier modificación de este tipo debe hacerse por FTP para poder deshacer en caso de que no se haga correctamente.
Un saludo.
Carlos dice
Muchas gracias por la rápida respuesta Enrique, el caso es que he probado tanto en el tema padre como en el tema hijo pero no me ha funcionado 🙁
Sabes a que más se puede deber este error??
Muchas gracias de nuevo.
rosa dice
Le doy 5 estrellas a este tutorial, me ayudo mucho.