eCommerce order confirmation emails not being received? How to find and fix the delivery failures you can’t see

Order confirmation emails usually go missing because the store sends them without proper authentication, the receiving provider filters them after accepting them, a platform setting or cron job stops the send, or a plugin or app interferes. Check the platform’s email log, authenticate your sending domain with SPF and DKIM, place a test order to a Gmail address, and reconcile paid orders against sent emails.
A customer pays, waits for the confirmation, and nothing arrives. Within minutes some of them contact support to ask where their order is, and a few place the order again. Your platform shows the email as sent, your logs look clean, and you cannot see what the customer sees, which is why this problem can run for days before anyone connects the tickets to a cause.
Email providers are also getting stricter. Gmail’s sender requirements apply to everyone who sends to personal Gmail accounts: SPF or DKIM authentication, valid forward and reverse DNS records, a TLS connection, and a spam rate below 0.3%. Gmail has also been ramping up enforcement on non-compliant traffic since November 2025, with temporary and permanent rejections for messages that fail. This guide explains why a “sent” email can still go missing, what causes it on WooCommerce, Shopify, and Adobe Commerce, how to find the failure point step by step, how to fix it, what changes when order volume spikes on Black Friday, and how to keep a missing email from turning into a duplicate order.
Why do order confirmation emails go missing when your platform says they were sent?
“Sent” is only one stage of a longer chain, and an email can fail at any of the stages after it. Check them in order, because the stage tells you what to fix:
| Stage | What it means | Where to look |
|---|---|---|
| 1. Trigger | The order reached a status or event that should send the email | Notification settings, order status, and the queue or cron job on platforms that send in the background |
| 2. Hand-off | The platform gave the message to a mail system | The platform’s email log. On WooCommerce, “Sent” means handed over, not received |
| 3. Sending | Your server or email service sent it, with or without authentication | Your SMTP or email service dashboard, and the message headers |
| 4. Acceptance | The receiving server accepted or rejected it | SMTP error codes and bounce logs |
| 5. Placement | The inbox, a tab, or spam | A test order to a real inbox, and Gmail’s Postmaster Tools |
One more trap: do not use open rates as proof of delivery. Google does not track open rates and cannot verify the open rates that third parties report, and it says a low open rate is not necessarily an accurate sign of a deliverability or spam problem.
What does the problem look like?
The first signs are usually downstream, not an email error:
- “Where’s my order?” tickets from customers who completed checkout minutes ago
- Duplicate orders from customers who assumed the first attempt failed
- Missing account and password-reset emails, which stop customers from signing in or recovering access
- Shipping notifications that never arrive, so customers do not know the order is on its way
- Payment disputes from customers who do not recognise a charge because they never received a receipt
What causes order confirmation emails not to arrive?
There is no reliable ranking of the causes across stores, so work through all of them rather than assuming the first one is the answer.
The store sends mail without authentication
By default, WooCommerce sends mail with the WordPress wp_mail() function, which on many servers hands the message to PHP’s own mail function. Mail sent that way often carries no authentication and gives you little visibility. Gmail requires SPF or DKIM from every sender, and messages that are not authenticated might be marked as spam or rejected. Self-hosted Adobe Commerce stores can have the same weakness if the server’s local mail transport is not authenticated.
The sending IP or domain has a poor reputation
If your mail leaves from a shared IP address, the activity of every sender on that address affects the reputation of all of them, and a bad reputation can reduce your delivery. This is common on shared hosting and some email service setups. Gmail asks shared-IP senders to make sure the address is not on a blocklist, and to check the IP’s reputation in Postmaster Tools if an email provider manages it. It also requires the sending IP to have matching forward and reverse DNS records.
DNS authentication records are missing, wrong, or broken after a change
The SPF record must include every service that sends for your domain, otherwise mail from those services is more likely to be marked as spam. DKIM must be turned on for the sending domain, with a key of at least 1024 bits and 2048 bits recommended. DMARC needs a published record, and for direct mail the domain in the From address must align with the SPF or DKIM domain. A domain move, a hosting change, or a DNS update can break any of these without anyone noticing.
The email was never sent: trigger, queue, or cron
Sometimes nothing is wrong with delivery because the message was never created. On WooCommerce, the notification may be disabled in the email settings, or the order may never reach the status that triggers it. On Adobe Commerce, Adobe recommends asynchronous sending, which sends sales emails at regular intervals, and all asynchronous operations in Commerce run through the Linux cron command. If cron stops, queued order emails can stop with it. Check whether the email was triggered before you spend time on authentication.
A plugin, app, or theme interferes
On WooCommerce, an SMTP plugin with expired credentials, two SMTP plugins running at once, a caching plugin, or an outdated email template override in the theme can all stop a message. On Shopify, apps that send their own customer emails, such as review requests or post-purchase surveys, can confuse customers about which sender to trust, so review them if customers report unfamiliar messages. These are leads to check, not proven causes.
The content looks promotional
Gmail advises against mixing different types of content in the same message, for example adding promotions to a sales receipt, and recommends a consistent From address for each message category, such as one address for receipts and another for promotions. A receipt that doubles as an advert is easier for filters, and for recipients, to treat as marketing.
How do you find where the email failed?
Step 1: Place a test order to a real external address
Do not test with an address on the same server as your store. Use a personal Gmail, Outlook, or Yahoo address and check the inbox, the spam folder, and any tabs. Then open the message headers (in Gmail, Show original) and read the SPF, DKIM, and DMARC results.
Step 2: Check the platform’s own record
| Platform | Where to check | What to verify |
|---|---|---|
| WooCommerce | WooCommerce, Status, Logs, then the transactional-emails source, plus the private notes on the order |
Sent means handed to the mail system, Failed includes the reason. The email must also be enabled under WooCommerce, Settings, Emails |
| Shopify | Settings, Notifications, including the Sender email section | The notification is on, the sender address is on your domain, and the domain is authenticated |
| Adobe Commerce | Stores, Configuration, Sales, Sales Emails, General Settings, and your SMTP provider’s dashboard | Whether Asynchronous sending is on, whether cron is running, which mail transport is configured, and delivery data at the provider |
Step 3: Read the rejection codes
When Gmail rejects or rate-limits a bulk sender’s message, the error code names the requirement that failed. Your email service’s bounce log or your server’s mail log will show them:
| Code | What Gmail says it means | What to fix |
|---|---|---|
4.7.23 or 5.7.25 |
The sending IP has no PTR record, or its forward DNS does not match | Set valid reverse and forward DNS for the sending IP |
4.7.27 or 5.7.27 |
SPF did not pass | Add every sending service to the SPF record |
4.7.30 or 5.7.30 |
DKIM did not pass | Turn on DKIM signing for the sending domain |
4.7.31 |
No DMARC record or policy | Publish a DMARC record, at minimum p=none |
4.7.32 |
The From header is not aligned with the authenticated SPF or DKIM domain | Align the From domain with the authenticating domain |
4.7.29 or 5.7.29 |
The message was not sent over TLS | Enable TLS on the sending connection |
A code beginning with 4 is a temporary rate limit, and one beginning with 5 is a block. A message that is not authenticated might also be rejected with a 5.7.26 error.
Step 4: Check DNS authentication
| Check | What Google expects |
|---|---|
| SPF | A record that includes every sender for your domain, including third-party services |
| DKIM | Turned on for the sending domain, with a key of at least 1024 bits (2048 bits recommended) |
| DMARC | A published record. For bulk senders, a policy of none is accepted, and the From domain must align with the SPF or DKIM domain |
| PTR (reverse DNS) | The sending IP matches the hostname in its PTR record, and that hostname resolves back to the same IP |
| TLS | Mail is sent over a TLS connection |
Google Admin Toolbox’s check tool can inspect many of these settings for a domain, and your email service’s setup pages show the exact records to add.
Step 5: Check reputation and spam rate
Use Postmaster Tools to see spam rate, domain and IP reputation, authentication, and delivery errors for mail sent to Gmail. Gmail asks senders to keep the spam rate below 0.10% and never reach 0.30%. The data is not real-time, so a problem that started this morning may not show until tomorrow.
Step 6: Confirm the email was actually triggered
If the log shows no send at all, go back to the trigger stage: the notification setting, the order status, a stopped queue or cron job, or a plugin that intercepts the email. This separates a delivery problem from a trigger problem and saves hours of DNS work you did not need.
How do you fix missing order emails on WooCommerce, Shopify, and Adobe Commerce?
WooCommerce
Replace unauthenticated server mail with an SMTP plugin connected to a transactional email service, send from an address on your own domain, and set up SPF, DKIM, and DMARC for that domain. Then confirm the email types are enabled under WooCommerce, Settings, Emails, and read the transactional-emails log after a test order. Mail that is not a WooCommerce transactional email is not covered by that log, so check your SMTP provider’s logs or a mail logging plugin for those.
Shopify
Check the Sender email settings under Settings, Notifications. The sender email is the From address for notification and order confirmation emails, and Shopify’s domain authentication adds CNAME records that handle SPF and DKIM. If your domain was bought through Shopify, authentication is set up automatically. Make sure the sender address is on a domain you own and that its authentication shows as complete, and investigate third-party apps only if they send separate customer emails.
Adobe Commerce
Confirm which mail transport is configured (local sendmail, SMTP, or a third-party delivery service), and check authentication and delivery logs there. Local sendmail can work, but it often gives less visibility and reputation control than a dedicated service. Check the Sales Emails settings for Asynchronous sending, and verify that cron is running, because queued sales emails depend on it.
For every platform
A dedicated transactional email service gives you more control over authentication, delivery logs, bounce handling, and reputation monitoring. Actual inbox placement still depends on your domain, your sending practices, your volume, and recipient engagement, so it improves your odds and your visibility rather than guaranteeing delivery.
Should order confirmations and marketing emails follow the same rules?
Not in every respect. Gmail’s sender guidelines FAQ says one-click unsubscribe is required only for marketing and promotional messages, and that transactional messages are excluded. Its examples of transactional messages are password resets, reservation confirmations, and form submission confirmations. It also notes that the line can vary by industry and regulation, and that recipients, not Google, decide what they consider a message to be.
| Email type | Examples | Gmail one-click unsubscribe |
|---|---|---|
| Transactional | Order confirmation, shipping update, password reset | Not required |
| Marketing or promotional | Newsletters, promotions, abandoned-cart campaigns | Required for bulk senders, using List-Unsubscribe headers |
The practical rule is to keep the two separate: send them from different addresses, ideally with separate sending identities, and keep promotions out of receipts. That also protects order confirmations if a marketing campaign draws spam complaints.
What changes on Black Friday when order email volume spikes?
Peak sales create a burst of transactional email on the same sending infrastructure as everything else. Gmail’s guidance for large senders is relevant here: send at a consistent rate, avoid bursts, and avoid sudden volume spikes if you have no history of sending large volumes. For example, suddenly doubling previously sent volumes could result in rate limiting or reputation drops. If you exceed a quota, Gmail typically rejects messages with the error code 4.7.28, and it advises pausing for at least 10 minutes and resuming gradually.
- Ask your email service about its capacity and how it handles a sudden rise in volume, before the sale.
- Avoid sending a large marketing campaign through the same IP at the same moment as peak order confirmations. Gmail suggests using different IP addresses for different message types when you must send from more than one.
- On Adobe Commerce, watch the queue. If asynchronous sending is on, a stalled cron job turns a busy day into a backlog of unsent confirmations.
- Watch bounces and deferrals through the day, and slow down if they rise.
How do you stop missing emails turning into duplicate orders and support tickets?
- Show a clear confirmation page with the order number straight after checkout, so a missing email does not leave the customer unsure the order went through.
- Give support a fast check. A one-step way to see whether the original order exists prevents a refund or a second order for something already placed.
- Offer a resend option, and tell customers to check spam and promotions before reordering.
- Reconcile orders against email events. Compare paid orders with your email service’s send and delivery events. A paid order with no send event points to a trigger or queue problem. A send event with no matching order points to a checkout or data problem. This separates email failures from other failures.
How do you confirm the fix worked and keep it working?
- Place test orders to Gmail, Outlook, Yahoo, and Apple Mail addresses, and confirm each arrives, noting whether it lands in the primary inbox or another tab.
- Test every transactional email type: order confirmation, shipping notification, order status update, account creation, and password reset.
- Watch bounces, complaints, and deferrals in your email service for the following week.
- Set alerts relative to your own baseline for accepted rate, bounce rate, and complaint rate, and investigate sudden changes, rather than relying on a universal threshold.
- Recheck authentication after any DNS, hosting, or email-service change.
Email delivery does not stay fixed on its own. Providers change their rules, DNS records drift during migrations, and a platform update can change when or how an email is sent.
Spotting the causes behind missing order emails with AuditIQ
AuditIQ does not follow an individual email into a customer’s inbox, but it watches several of the layers that make order emails fail:
- Server Monitoring: runs daily email deliverability validation, which covers DMARC, SPF configuration, and spam blacklist checks, alongside SSL certificate, PHP end-of-life, and Cloudflare configuration checks. It applies to the Magento, Adobe Commerce, and WooCommerce plans.
- Configuration Tracking: logs every Magento and Adobe Commerce configuration change with before and after values, including changes made directly in the database, so a switched-off notification or a changed sender address can be traced to a time.
- Log Monitoring: surfaces PHP errors and exceptions as they happen, with the full stack trace, so an error raised while an order is placed does not stay buried in a log file.
AuditIQ does not replace your email service’s delivery logs or Postmaster Tools, and it cannot tell you whether a specific customer’s message reached the inbox. Use it to catch configuration drift, blacklisting, and application errors that precede missing emails, and keep your email service’s own reporting for delivery and bounces.
Beyond email, AuditIQ is a 360° eCommerce monitoring platform purpose-built for Magento, Adobe Commerce, and Shopify stores. It continuously monitors every critical layer of a store — performance, infrastructure, SEO, security, user experience, configuration, and code quality — from a single, unified dashboard, so the quiet failures behind a missing confirmation email surface before customers write in.
Start monitoring your store for free today and catch email configuration problems before your customers do.
Others also read
- Email shows “delivered” but revenue has dropped? How to diagnose deliverability before Black Friday
- eCommerce Holiday Traffic Readiness: How to find silent storefront failures
- The 90% Problem: Why most eCommerce bugs never get reported, and what that costs you
Frequently asked questions
1. Why does my WooCommerce store show emails as sent but customers don’t receive them?
WooCommerce’s log records the outcome of handing the email to the mail system, so “Sent” means handed over, not received. If your server uses unauthenticated mail, the receiving provider may filter or reject the message afterwards. Connect an authenticated SMTP service, and check that provider’s logs for what happened next.
2. Can Shopify order confirmation emails go to spam?
Yes, it can happen. A sender address that is not on an authenticated domain, content that reads as promotional, or a domain reputation problem can all push a message into spam. Check Settings, Notifications for the sender email and its domain authentication, and send yourself a test.
3. Do order confirmation emails need an unsubscribe link?
Gmail requires one-click unsubscribe only for marketing and promotional messages, and excludes transactional messages such as order confirmations. Keep receipts clearly transactional and free of promotions, and put the unsubscribe headers on your marketing email.
4. Why did my Adobe Commerce order emails stop sending?
If asynchronous sending is on, sales emails depend on cron, so a stopped cron job can stop them. Check the Sales Emails settings, confirm cron is running, and then check the mail transport and your SMTP provider’s dashboard.
5. What’s the difference between delivery and inbox placement?
Delivery means the recipient’s mail server accepted the message. Inbox placement means it reached the inbox rather than spam or another folder. A high acceptance rate does not guarantee customers saw the email, which is why you need both a test to a real inbox and reputation data from tools such as Postmaster Tools.
6. How do I know if my DNS records are causing the problem?
Check that SPF includes every sending service, that DKIM is on with a key of at least 1024 bits, and that a DMARC record exists with the From domain aligned to SPF or DKIM. Rejection codes such as 5.7.27 for SPF or 5.7.30 for DKIM in your bounce log point to the failing record.
7. Do I need a dedicated transactional email service?
Not always, but it helps. A dedicated service gives you more control over authentication, delivery logs, bounce handling, and reputation monitoring than server mail. It does not guarantee inbox placement, which still depends on your domain, sending practices, volume, and recipient engagement.
About the author
Ginny Ngo writes from AuditIQ's experience monitoring eCommerce performance, SEO, security, and reliability issues across Magento, Shopify, WooCommerce, and Adobe Commerce stores.