
Woocommerce Brasil
O pedido cai na loja, muda para “Processando” e o cliente jura que não recebeu nada. A dúvida é sempre a mesma: o WooCommerce não disparou o e-mail ou o servidor não entregou? Dá para responder isso em dois comandos, usando um pedido que já está no banco.
Pegue o ID de um pedido em processamento e mande o próprio mailer do Woo trabalhar. O e-mail vai de verdade para o cliente daquele pedido, então escolha um pedido de teste ou um que seja seu. Troque 4021 pelo número:
sudo -u www-data wp eval 'WC()->mailer()->emails["WC_Email_Customer_Processing_Order"]->trigger( 4021 );' --path=/var/www/sualoja/html Chegou na caixa? Então o envio funciona e o buraco está no gatilho: status que muda por plugin de pagamento sem passar pelo hook padrão, ou o e-mail desmarcado em WooCommerce > Configurações > E-mails.
Se nada chegou, tire o WooCommerce da jogada e teste a função que ele usa por baixo:
sudo -u www-data wp eval 'add_action( "wp_mail_failed", function ( $e ) { echo $e->get_error_message(); } );
var_dump( wp_mail( "voce@dominio.com.br", "teste", "corpo" ) );' bool(true) quer dizer que o PHPMailer entregou a mensagem para o sendmail ou para o SMTP sem reclamar, e aí o problema é reputação: SPF, DKIM ou porta 587 fechada na saída. bool(false) mostra o motivo real na hora, que costuma ser autenticação recusada.
Alguns plugins de performance ligam o filtro woocommerce_defer_transactional_emails. Com ele ativo o e-mail não sai na requisição: vai para o processo em segundo plano do Woo, que guarda os lotes em wp_options e é acordado por um loopback para o admin-ajax, com o WP-Cron de rede de segurança. Loopback bloqueado mais DISABLE_WP_CRON no wp-config.php e nenhum cron de verdade no servidor, a fila fica parada.
sudo -u www-data wp option list --search='*wc_background_emailer*' --fields=option_name
sudo -u www-data wp cron event list | grep -i emailer Linha sobrando ali confirma o entupimento. Antes de sair trocando de plugin de SMTP, olhe também WooCommerce > Status > Logs, que lê os arquivos de wp-content/uploads/wc-logs.
O WordPress só oferece hourly, twicedaily, daily e weekly. Use o filtro cron_schedules para criar um intervalo de 5 minutos…
Página em branco no CodeIgniter 4, sem nenhuma mensagem? O ambiente está em production e escondeu o erro. Troque o…
O Google Ads acusa consentimento ausente porque o gtag sobe antes do banner. Veja como injetar o default denied do…
A tela Saúde do site avisa que faltam extensões como intl, imagick ou zip: instale no PHP 8.3, reinicie o…
Chegou um chamado sem passo a passo e sem exemplo. Veja como virar esse relato em um caso de teste…
Negar /.env no nginx parece resolvido até alguém pedir /wp-content/uploads/.env ou backup.sql. As regras que testei e os furos que…