The detail that duplicates are gateway-specific is the strongest clue here, since it points at webhook retry behavior rather than a generic plugin conflict, and it’s worth checking the gateway’s own webhook logs (most gateways log delivery attempts) before assuming the bug is on the WooCommerce side.
WooCommerce
Debug duplicate WooCommerce order confirmation emails
A triage prompt for customers receiving 2-3 copies of the same order confirmation, walking through the SMTP, webhook, and status-flapping causes rather than just disabling the email.
Works with Claude / GPT1,980 uses★ 4.6
The prompt
woocommerce-duplicate-order-confirmation-emails-fix
Customers of a WooCommerce store are reporting they receive the same order confirmation email 2-3 times for a single order. Details: SETUP: [WooCommerce default emails, plus a separate SMTP plugin (WP Mail SMTP) for deliverability, plus a custom order-sync plugin that pushes new orders to a fulfillment warehouse via webhook] OBSERVED PATTERN: [duplicates seem to happen on orders paid by a specific payment gateway, not all orders] Walk through the diagnosis in this order: 1. Check whether more than one mail-sending plugin or SMTP configuration is active at once (for example, a legacy SMTP setup left enabled after WP Mail SMTP was added), since two active mailers can each independently catch WooCommerce's "send order email" call and both fire. 2. Check whether the order status is flapping between Processing and Completed, or between Pending and Processing, more than once for the affected orders. Since the "new order" and "processing order" emails are triggered by order-status-change hooks, a payment gateway webhook that fires multiple times for the same event (a known behavior with some gateways under retry logic) can trigger the status change hook repeatedly and resend the email each time, which matches the detail that duplicates cluster on orders from one specific gateway. 3. Check the custom order-sync plugin's webhook logic: if it also listens for order creation and, on its own retry logic, re-saves or re-triggers the order object when the warehouse API call times out, that re-save can be enough to re-fire WooCommerce's email hooks even though it wasn't a genuine second order event. 4. Check Action Scheduler (Tools > Scheduled Actions) for the relevant email or webhook action, for stuck or failed actions that are being retried and re-executing the email send as part of the retry rather than just retrying the failed part. Judgment call: don't fix this by simply disabling the "order processing" email, since that removes the confirmation for every customer and just trades a duplicate-email complaint for a no-confirmation-email complaint. The fix needs to address which hook is firing multiple times, not suppress the email itself. Replace the bracketed plugin names and payment gateway with your own site's setup.