WooCommerce, and most plugins sending email, send mail by using the wp_mail() function which is a core function of WordPress.
In most cases, if email is not being sent/received, then the issue is not with WooCommerce itself, but with the core email function on your web host. Read on for solutions to common issues, however, try installing the MailPoet (Plugin), activate an account using the starter plan, and bypass the web host server entirely.
There are multiple factors that can be the cause. Before explaining the actual mail side of the issue, please ensure that it’s not one described below.
If your new orders have the status Pending, no email would have been sent yet. Pending orders are orders where the customer selected Place Order but abandoned the payment page (depending on the payment gateway, i.e., PayPal) or had their credit card transaction declined.
If you have pending orders but receive payment for them via a payment gateway such as PayPal, the orders are not being updated, and this could indicate a problem with the payment gateway. In this case, you are not looking at an email issue; you are looking at an issue with your payment gateway and may need to submit a support ticket.
For PayPal Standard, we have this troubleshooting page.
Plugins can also return errors before status changes occur. To find out what may be causing this, you can either rule out conflicts by disabling plugins/themes other than WooCommerce itself, or you can use the WP debug log to view errors. If there are ‘fatal errors,’ this may be the problem.
Orders that are properly updating to Processing should generate an email.
Another possible issue is mistakenly disabling emails from sending. Double-check that “Enable this email notification” is ticked for order notifications at WooCommerce > Settings > Emails and select the Processing Order email template. An additional test should be setting the Email Type to plain text.
If emails are enabled and orders are updating to Processing, there could be an issue in the email delivery to a recipient. This could be a spam blocker that classified your emails are spam and stopped them. Installing a mail logging plugin can help.
Install WP Mail Logging plugin. This will log all outgoing emails so you can see what is being sent. Once installed:
- Generate a test order
- Go to your admin dashboard > WP Mail Log
- Check that your test order generated an email, and if there are any sending errors reported
After a successful send, the screen should look something like this:
If the email was sent, but not received, there are a few steps that can be taken:
- Make sure you’re using an email address attached to your own domain in the “From” Address field in WooCommerce > Settings >Emails. Using your @gmail.com, @yahoo.com or similar public domain email address will likely cause emails to land in spam folders due to mismatch between the declared sender (servers of Gmail or Yahoo) and the actual sender (your server).
- Sign up for an account with a dedicated SMTP provider (an average site can usually stay within free usage) that will send the email for you. This should be more reliable than your own server’s mail-sending function.
If the email was not sent, this could indicate a plugin conflict blocking the send by, for example, erring before they are generated. To find out what is causing this, you can either rule out conflicts by disabling plugins/themes other than WooCommerce itself, or you can use the WP debug log to view errors. If there are ‘fatal errors,’ this may be the problem.
A dedicated SMTP provider is like web hosting, but for email. The difference is instead of hosting websites, you use the servers of the host (or SMTP provider) to send and receive emails.
While Gmail is an email provider where you send and receive emails, its most common application is for a human to log in and use it on the web. A dedicated SMTP provider lets you use your own domain name, connect to it via external services (such as your WooCommerce store), and is usually less strict in terms of volume limits.
Yes, but it is not ideal. Gmail will disable your account if you send emails to more than 500 unique recipients in a 24-hour period. This includes emails you send yourself and all emails your website is sending. More at: Google Support: Gmail Answers.
There are dedicated SMTP providers that work for most websites. All have their own plugin on WordPress.org, can be installed from your WordPress dashboard, and have support available to help you get started.
- MailPoet (Plugin) – Send unlimited emails free per month (1,000 unique recipients limit).
- Mailjet (Plugin) – Send 6,000 emails free per month.
- Sendinblue (Plugin) – Send 9,000 emails free per day.
- Postmark (Plugin) – Priced plans start at 10,000 emails a month.
- Amazon SES (Plugin) – Send 62,000 emails free per month if your website is hosted on AWS or pricing starts at $0.10 for every 1,000 emails.
The team at MailPoet, the developers of the WP Mail Logging plugin, wrote up an article about SMTP and WordPress which you may find useful.
Comparing a path an email takes to reach its destination vs. driving a car on a road trip, emails do not travel directly from point A to point B. The final destination is more like point W, and the email is bouncing from one server to another at the speed of light while being filtered at each step.
Google has compiled this representation of the path an email follows. This story is specific to Gmail and delivering to a mobile device but helps explain how email works. More at: Story of Send.
WooCommerce, and most plugins sending email, send mail by using the wp_mail() function that is a core function of WordPress.
Neither are sending the email. What happens is WooCommerce calls the wp_mail() function, which then requests WordPress to send the email. Because WordPress is not an email server, it typically asks PHP to send the email for it. PHP then checks for a local email server within the web server and tells that email server to send the email. Your email takes three steps before reaching your web server.
By using a plugin the SMTP provider has available or the Post SMTP plugin, the wp_mail() function reroutes the email from PHP to your SMTP provider. From there, the SMTP provider receives the request and adds your email to a queue to be sent.
The spam filter is the last and final spam filter your email is filtered through, at which point it is going to spam based on your email client settings or how you mark other emails as spam. If your emails are denied by another spam filter before that, it simply is not delivered.
Without deep investigation into server logs and tracking exact email paths, this is not a simple question to answer.
- The short version is there is a lot more to spam filters than scanning for typical spam. Spam filters check the IP address of origin, the sending user and domain, the amount of email that IP/sender has sent, how many times emails from that sender have been marked as spam, and the wording of emails.
- The most common factor is where the email originates, which brings your overall score with spam filters down low enough that even minor differences in wording and formatting of WooCommerce emails may be flagged as spam and not sent.
Check and monitor the reputation of your websites IP address for sending emails, if you have your own dedicated server for sending emails. You can also use this for shared and virtual hosting environments, but it is better to get a dedicated SMTP provider instead because those environments are not recommended for sending emails. Visit Senderscore.org to learn more.
Do you still have questions and need assistance?
- Get in touch with a Happiness Engineer via our Help Desk. We provide support for extensions developed by and/or sold on Woo.com, and Jetpack/WordPress.com customers.
- If you are not a customer, we recommend finding help on the WooCommerce Support Forum or hiring a WooExpert agency. They are trusted agencies with a proven track record of building highly customized, scalable online stores. Learn more about WooExpert agencies.