Nothing torpedoes trust faster than missing emails. Order confirmations, password resets, license keys, contact-form alerts—if they don’t arrive, support gets swamped and users bounce. The fastest path to reliable email is simple: get visibility, fix authentication, and standardize delivery. This guide shows how to diagnose issues inside WordPress, harden your sender reputation, and keep a provable audit trail with WP Email Log.
TL;DR (why this matters)
If you can’t see what WordPress tried to send—and how—every fix is guesswork. A lightweight log plus proper SMTP and domain auth (SPF/DKIM/DMARC) solves 90% of “I didn’t get it” tickets. The rest is housekeeping: consistent templates, clean From headers, and short retention that respects privacy.
What “deliverability” actually means
Deliverability is the chain from WordPress generating an email to it landing in the inbox (not just “accepted by a server”). Three layers can break:
-
Application layer (WordPress/plugins): the event never fired, wrong hook/template, or
wp_mail()
wasn’t called. -
Delivery layer (SMTP/ESP): poor sender reputation, throttling, bounces, or misconfigured SMTP.
-
Mailbox layer (recipient): spam filtering, authentication misalignment, or user-level rules.
Your job is to identify the broken layer in minutes—not hours.
Step 1: Add observability inside WordPress
Install a logger so you can prove generation and inspect headers. With WP Email Log, every outgoing message gets a timestamp, recipient, subject, status, and raw headers. If it’s in the log, WordPress generated it—move on to delivery/auth. If it’s not, you’ve got an application problem.
Prefer to test first? There’s a free build: WP Email Log.
Quick win checklist
-
Trigger a password reset and a contact-form submission.
-
Open the Email Log and confirm two fresh entries.
-
Click into one to inspect From, Reply-To, Message-ID, and Return-Path.
-
Note mismatches (e.g., From uses
gmail.com
while your domain sends via your own SMTP—this kills alignment).
Step 2: Stop using PHP mail—use real SMTP
The stock wp_mail()
+ PHP mail is not for production. Configure a reputable SMTP/ESP (Postmark, SendGrid, SES, Mailgun, etc.). This gives you:
-
Authenticated, rate-limited sending
-
Bounce/complaint handling
-
Better IP/domain reputation management
After switching, repeat the test emails and confirm they appear both in WP Email Log and your SMTP/ESP dashboard. Now you have end-to-end traceability.
Step 3: Align SPF, DKIM, and DMARC
Mailbox providers love alignment. Set these on your sending domain:
-
SPF: Authorizes your ESP to send on behalf of your domain. One SPF record per domain, combine mechanisms if needed.
-
DKIM: Cryptographically signs messages—must be enabled in your ESP and published as DNS records.
-
DMARC: Tells receivers what to do with messages that fail SPF/DKIM and gives you reports. Start with
p=none; rua=mailto:reports@yourdomain.com
to observe, then move towardsquarantine
orreject
as confidence grows.
Re-test and check Authentication-Results in a logged email’s headers to confirm spf=pass
and dkim=pass
. If either fails, fix DNS or sender settings before moving on.
Step 4: Standardize headers and templates
Inconsistent headers look spammy. Make these rules non-negotiable:
-
From uses a domain you control and authenticate (e.g.,
no-reply@yourdomain.com
). -
Reply-To points to a monitored inbox (support or info).
-
Subject lines are concise and descriptive (“Order #12345 confirmed”).
-
HTML templates are lightweight and consistent; avoid massive inline CSS or image-only emails.
-
List-Unsubscribe for marketing/newsletters (transactional often exempt, but clarity helps).
Use WP Email Log to confirm the exact headers your site generates after template changes.
Step 5: Fix the common failure scenarios
A) “Order email didn’t arrive”
-
Search the log by customer email.
-
If present with sane headers → check ESP logs, bounces, and spam.
-
If absent → verify WooCommerce email templates are enabled for the order status, and confirm no plugin disabled the email action.
B) “Password resets fail for CompanyMail but work for Gmail”
-
Filter the log by subject “Password Reset”; check failures by domain.
-
Ensure From domain alignment and DKIM keys are live.
-
Throttle sends if the corporate provider rate-limits; consider a dedicated subdomain (
mail.yourdomain.com
) with separate DMARC policy.
C) “Contact-form emails stopped after an update”
-
Submit a test; check the log.
-
If missing → the form plugin isn’t calling
wp_mail()
; fix routing/settings or add its SMTP integration. -
If present → headers changed; fix From/Reply-To and re-test via ESP.
D) “Scheduled reports ran but no one received them”
-
Check the log in the scheduled window.
-
No entries = cron/job issue; entries but no inbox = ESP/deliverability.
-
Add a temporary auto-forward rule (PRO add-on) during migrations to mirror messages to a team inbox.
Step 6: Respect privacy with sensible retention
Email logs can include PII. Keep them useful—don’t turn them into a second inbox.
-
Retention: 30–90 days usually hits the sweet spot.
-
Access: admins and trusted roles only.
-
Scope: headers + metadata often suffice; avoid long-term storage of full bodies unless required.
Set a monthly reminder to prune logs and rotate API keys/secrets where applicable.
Step 7: Proactive monitoring (so issues don’t surprise you)
-
Smoke tests after updates: send a reset + place a test order, then check the log.
-
Domain reputation: monitor your ESP’s health scores; warm new sending domains/IPs gradually.
-
Template diffing: when marketing edits templates, send one test to the log and verify headers didn’t regress.
-
Forwarding during risk windows: enable auto-forward (PRO add-on) during migrations or Black Friday to catch issues early.
Pros and cons of this stack
Pros
-
Immediate clarity: app vs delivery vs mailbox layer.
-
Faster ticket resolution with searchable evidence.
-
End-to-end visibility when paired with an ESP.
-
Lightweight tooling; minimal learning curve for support teams.
Cons
-
Doesn’t “fix” deliverability by itself—you still need proper SMTP and auth.
-
Requires basic DNS access/discipline.
-
Logging demands retention governance to avoid creep.
Who benefits most
-
WooCommerce stores: confirmations, shipping notices, refunds, and invoice flows.
-
Membership/LMS: onboarding, renewal reminders, course notifications.
-
Agencies: triaging many client sites with a consistent runbook.
-
Teams in regulated niches: headers + timestamps often satisfy audit trails.
Pricing snapshot and where to start
You can stabilize basics with WP Email Log, then move to WP Email Log for re-send, auto-forward, export, and priority support. For most sites, preventing a single week of silent failures covers the license many times over.
Practical SOP you can paste into your runbook
-
User reports missing email → search Email Log by recipient or subject.
-
If log absent → fix the application trigger/template/cron.
-
If log present → inspect headers; move to ESP dashboards.
-
Verify SPF/DKIM/DMARC alignment; correct any fails.
-
Re-test with a password reset and a test order; confirm new log entries and inbox delivery.
-
Document the root cause and the change you made (so it sticks).
Verdict
Reliable email isn’t magic—it’s process. Add visibility with WP Email Log, deliver through a proper SMTP/ESP, align your domain authentication, and keep templates predictable. Do that, and “I didn’t get the email” becomes a five-minute fix instead of an all-day mystery.