My webshop emails are not arriving
Your webshop's mail usually does not work because the shop sends its messages straight from the web server, with no authentication and no reputation. To the receiving server that is an unknown machine claiming to speak for your domain, so the order confirmation lands in spam or is refused. The fix has two steps: send through a real sending server with a login, and put SPF, DKIM and DMARC on your domain.
Why this is expensive
An order confirmation that never arrives costs more than one email. The customer doubts whether the payment went through, phones or emails customer service, sometimes orders a second time, or leaves a negative review. For a shop with a hundred orders a day, one per cent loss is already a daily phone call. And the confirmation is only the start: shipping notices, password resets, invoices and return labels all travel the same route.
First: what kind of problem is it?
Before you change anything, ask one question: does nothing arrive, or only with some recipients?
- Nothing arrives, not even in your own mailbox. Then it is a configuration error: wrong server, wrong password, a port blocked by your hosting, or a plugin that was disabled after an update. Look in the shop's log; the error message is usually there word for word.
- It arrives for you, but not for customers with an address at a large provider. Then it is a reputation or authentication problem. Your own mail server trusts your domain; the customer's does not.
- It arrives, but in the spam folder. Also authentication or reputation, and usually solved with the two steps below.
The most common cause
WooCommerce, PrestaShop and Magento use the web server's own mail function by default. That server is not listed in your SPF record, signs nothing with DKIM, and often shares its IP address with dozens of other websites. One of those sites having been hacked at some point and sending spam is enough to get the whole address on a blocklist. Your shop did nothing wrong and yet nothing arrives any more.
The fix in two steps
- Configure your webshop to send through a real sending server, with a server name, port 587 and its own credentials. In WooCommerce that is an SMTP plugin; in PrestaShop and Magento it sits in the settings under "email". The steps per platform are on SMTP for WooCommerce, SMTP for PrestaShop and SMTP for Magento.
- Put SPF, DKIM and DMARC on your domain. Without those records the sending server has only moved the problem. What exactly to enter is explained under SPF, DKIM and DMARC.
Mind the sender address
Use an address on your own domain, for example orders@yourshop.com, and not a free address from a large provider. Those providers apply a strict DMARC policy, precisely because forgers use their addresses; automated mail with such a sender is almost always refused. Never set the customer's address as sender either ("send on behalf of the customer"): that fails authentication on every send.
Test what you cannot see
Place a test order with an address at three or four different large providers, both business and personal. Your own mailbox is not a good test: it probably already trusts your domain. For each test message, open the original headers and look for "spf=pass" and "dkim=pass". If you see "fail", you know which record is wrong. Repeat that test after every hosting migration and every major plugin update; those are the moments when it breaks silently.
Keep it separate from your campaigns
Order confirmations have to arrive. Do not send them over the same route as a newsletter that is occasionally reported as spam. Give the shop its own SMTP login, and preferably its own subdomain, so a campaign that goes wrong cannot take your confirmations down with it. Why that distinction matters so much, and how to set it up, is explained under transactional email.
Keep an eye on it
The number of confirmations sent should match the number of orders. If it diverges, something is wrong before your customers report it. A sending platform shows you per message whether it was accepted, refused or bounced; that is the difference between knowing and guessing.
Frequently asked questions
My shop says "email sent", but the customer receives nothing. How is that possible?
"Sent" means the shop handed the message to the web server, not that the recipient accepted it. What happened next is only visible in the logs of a real sending server.
Can I use the outgoing server of my office mail?
For a handful of orders a day, often yes, but mailbox providers impose daily limits and are not built for automated mail. As the shop grows you hit those limits at the busiest moment.
Why does it suddenly stop arriving after a hosting migration?
Because the new IP address is not in your SPF record and the new server does not have the DKIM key. If you send through a sending server this does not affect you: the records point to the sending server, not to the hosting.