Los clientes reciben sus confirmaciones de pedido sin problema, pero yo no he recibido ni una sola vez el email de Nuevo pedido, y tampoco está en mi carpeta de spam
La notificación de administración es el dominio de tu tienda escribiendo al dominio de tu propia tienda. WooCommerce la envía como orders@yourstore.com a un destinatario de yourstore.com, por PHP desde el servidor web, sin firma DKIM y desde una IP que tu registro SPF no autoriza. Un mensaje sin autenticar que dice venir de un remitente interno se trata mucho peor que ese mismo mensaje llegando a un dominio ajeno, y algunos proveedores lo retienen en la pasarela en lugar de archivarlo en la carpeta de spam, que es justo por lo que no lo encuentras en ninguna parte. El correo a clientes se cuela a duras penas; el de administración, no.
La solución
Pon un remitente SMTP autenticado por delante de wp_mail(), completa la verificación de dominio del proveedor, publica los registros de selector DKIM y añade su include a tu único registro TXT de SPF. Como parche mientras lo montas, cambia el campo Destinatario(s) de WooCommerce > Ajustes > Correos electrónicos > Nuevo pedido a una dirección de otro dominio, para al menos ver los pedidos entrar. Después haz un pedido de prueba real a una dirección de prueba de Unspam, confirma que el valor d= de DKIM es el dominio de tu tienda y vuelve a poner el destinatario original.
Los clientes de Gmail lo reciben todo. Los de Outlook y Hotmail no reciben absolutamente nada, y yo no veo ni un rebote
Como PHP entrega el mensaje a un servidor de correo local y el registro de WooCommerce solo anota que entregó el email al sistema de correo correctamente, tu registro pone Sent y no hay ningún rebote en ninguna parte que puedas leer.
La solución
Sal por completo de la ruta de PHP. Enruta wp_mail() a través de un proveedor SMTP autenticado, termina la verificación de dominio para que el mensaje lleve una firma DKIM del dominio de tu tienda, y añade el include SPF del proveedor. Lo segundo que te compra el proveedor es un registro de rebotes y supresiones, con lo que las caídas silenciosas dejan de ser invisibles. Lanza después una prueba de Inbox Placement y confirma que el mensaje llega de verdad a un buzón de prueba de Outlook, y no solo a uno de Gmail.
Los emails de restablecer contraseña no llegan nunca, así que los clientes que olvidan la suya se rinden y pierdo la venta
Restablecer contraseña (Reset password) es una de las notificaciones que aparecen en WooCommerce > Ajustes > Correos electrónicos, lo que significa que se puede desactivar como cualquier otra, y viaja por la misma ruta sin autenticar que todo lo demás. Es además la peor de todas para perder, porque es el único email que el cliente está esperando activamente y no hay ningún pedido en tu administración que te avise de que falló. Una notificación desactivada, un destinatario que falta y un mensaje filtrado se ven exactamente igual desde la tienda.
La solución
Abre WooCommerce > Estado > Registros y filtra el origen transactional-emails. Disabled significa que la notificación está apagada en WooCommerce > Ajustes > Correos electrónicos > Restablecer contraseña; Skipped, que faltaba una condición previa, por ejemplo un destinatario; Failed, que el servicio de correo devolvió un error; y Sent, que WooCommerce lo entregó y se filtró más adelante. Si no se registra nada, mira desde dónde se pidió el restablecimiento: WooCommerce avisa de que los emails de restablecimiento de contraseña de WordPress y otros emails de administración de WordPress pueden no aparecer en ese registro, y te remite a los registros de tu proveedor SMTP. Arregla primero la ruta con un remitente SMTP que firme por tu dominio y vuelve a probar pidiendo un restablecimiento para una cuenta cuya dirección de email sea una dirección de prueba de Unspam.
Instalé un plugin SMTP como me decían todas las guías, y los emails siguen yendo a spam
El SMTP resolvió el problema de envío, no el de identidad. Ahora el proveedor retransmite tu correo desde una IP con buena reputación y bajo su propio Return-Path, así que SPF pasa contra el dominio del proveedor. Hasta que no termines la verificación de dominio, el mensaje va firmado con DKIM por el dominio del proveedor y no por el tuyo. Tu cabecera From sigue diciendo yourstore.com, no hay nada alineado con ella, y DMARC falla exactamente igual que antes, solo que desde mejor infraestructura.
La solución
En el panel del proveedor, verifica el dominio y no una única dirección de remitente, y publica todos los registros DKIM que emita. Envía un email de pedido real a una dirección de prueba y lee el valor d= de DKIM: si sigue siendo el dominio del proveedor, la verificación está a medias. Mantén un único registro TXT de SPF con el include del proveedor añadido, por ejemplo v=spf1 include:_spf.google.com include:sendgrid.net ~all, en lugar de publicar un segundo registro SPF, que invalida los dos.
Los emails de pedido llegan con horas de retraso, a veces hasta la mañana siguiente, y antes de eso el checkout iba lentísimo
Esto es la cola de emails diferidos. WooCommerce puede sacar los emails transaccionales de la petición del checkout para que el cliente no espere al servidor de correo: es la función Deferred emails de WooCommerce > Ajustes > Avanzado > Características, desactivada de fábrica, y desde código también se puede forzar con el filtro woocommerce_defer_transactional_emails. La cola corre sobre Action Scheduler, y WooCommerce documenta que Action Scheduler se apoya en WP-Cron, que a su vez depende del tráfico del sitio. Una tienda con una noche tranquila no tiene ninguna visita que dispare la cola, así que el recibo espera a la siguiente.
La solución
Abre WooCommerce > Estado > Acciones programadas y busca acciones vencidas; un montón de ellas con más de un día de antigüedad confirma el diagnóstico. La recomendación de WooCommerce es montar un cron propio en el servidor que ejecute WP-Cron por su cuenta y se salte la dependencia del tráfico, algo que de paso arregla los tiempos de todas las tareas programadas de la tienda, no solo del email. Y si el checkout ya iba lento antes de activar el diferido, la causa suele ser que el salto al correo ocurre dentro de la propia petición; pasar a un proveedor SMTP también elimina eso.