Free WordPress email tools: SPF, DKIM, DMARC, and more.
The WordPress Email Authority
Direct answers to the WordPress email questions people actually type into search engines. Some are diagnostic (why a contact form reaches Office 365 but not Gmail, why password reset messages never land), some are decision-making (which SMTP plugin to pick, whether to move from free Gmail to Google Workspace, whether one setup can serve an agency’s client sites), and some are conceptual (what DKIM and SPF do inside WordPress, whether plugins can read the mail your site sends). One entry per question, grouped by the shape of the answer.
The WordPress email that fails most often is the password reset. If that is what brought you here, open Users not receiving password reset emails first: it walks through the four things that break it (missing SMTP, spam scoring, cache masking success, transient upstream failures) and points at the fix for each. The rest of this page groups the questions by what they are actually about.
WordPress password reset email fails for five distinct reasons. This diagnostic identifies which is causing the problem and gives the specific fix for each.
Yes, via three paths depending on which emails you want to change. WooCommerce order emails have a template override system in the theme. Core WordPress emails are filterable but not templated. Anything else takes an HTML-email plugin.
Yes, and for any WordPress site that needs to send reliable email, a third-party sending service is the standard setup. The provider gives you an authenticated outbound pipeline; a mailer plugin routes wp_mail() through it.
Yes, both personal Outlook.com and Microsoft 365 mailboxes work as WordPress SMTP relays, using different hosts and authentication. Microsoft 365 needs OAuth and hits daily send limits; personal Outlook.com is smaller and only for hobby sites.
Yes. Any active WordPress plugin can hook wp_mail and read the recipient, subject, body, headers, and attachments of every outbound message. The trust boundary sits at plugin install, not at send time.
The Settings → General confirmation flow needs a working old mailbox. Three bypasses (WP-CLI, direct DB, one-shot mu-plugin) update admin_email without it.
The “check your inbox” line doesn’t mean WordPress sent the recovery mode email. It sends one a day at most, through the mail setup that may have just broken.
Probably, if your host’s notice names files or databases, or is vague. Where each WordPress SMTP password, API key or OAuth token is kept decides which leaked.
Set the “From Email” override in your mailer plugin (WP Mail SMTP, FluentSMTP, or Post SMTP) and enable “Force From Email” so plugins can’t override it. That covers ninety-nine percent of sites. Filter or dedicated plugin covers the rest.
Install a contact form plugin, build a form in its editor, and drop the plugin’s block or shortcode onto the page where the form should appear. WordPress does not ship a contact form out of the box; a plugin is the standard route.
WordPress core sends notification emails by default for new users, password resets, comment approvals, and other events. If notifications are not arriving, the problem is almost always deliverability, not a WordPress setting.
WordPress core sends about twenty transactional emails. Three categories (safe, administrative, recovery) decide which to silence. Never drop password resets.
WordPress calls wp_mail(), which hands off to PHPMailer, which by default calls PHP’s mail() function on the local server. Most operators replace that path with authenticated SMTP via a plugin.
Yes. Brevo, Mailjet and Maileroo keep mail in the EU by default; Mailgun, SendGrid and others offer an EU region. What each covers, and the setting to match.
Yes. Code that ran inside WordPress could read every mail credential your SMTP plugin stores, encrypted or not. What to rotate, in what order, what to check.
A mailer plugin paired with a transactional email provider. The plugin replaces WordPress’s default sending path; the provider gives you an authenticated pipeline that lands mail in the inbox.
WordPress 7.2 adds a Secrets API for encrypted credentials. What the proposal defines, what it means for SMTP plugins, and what site owners need to do today.
Standardise SMTP across client sites by opening one transactional provider account per client, on the client’s domain, with credentials held by the agency.
Yes, and for any WordPress site that needs to send reliable email, a third-party sending service is the standard setup. The provider gives you an authenticated outbound pipeline; a mailer plugin routes wp_mail() through it.
A registrar suspension breaks WordPress email in stages: inbound bounces, outbound fails your domain’s DKIM and DMARC, resets go nowhere. What to fix, in order.
Yes. Three DNS records on your domain (SPF, DKIM, and optionally DMARC) let a WordPress site send authenticated mail from an address on your own domain, through whichever transactional provider you configure. The records are published at your DNS host, not inside WordPress.
WordPress calls wp_mail(), which hands off to PHPMailer, which by default calls PHP’s mail() function on the local server. Most operators replace that path with authenticated SMTP via a plugin.
Mandrill security is Mailchimp parent-account security. The Transactional dashboard shares the Mailchimp login, so what reaches one reaches the other. Here is the audit a WordPress site should actually run.
Yes. Brevo, Mailjet and Maileroo keep mail in the EU by default; Mailgun, SendGrid and others offer an EU region. What each covers, and the setting to match.
Cloudflare Email Routing forwards inbound but does not send. Three outbound paths for a static site: a mailbox host, a transactional relay behind a form endpoint, or a Worker that calls a sending API.
A subdomain gives WordPress newsletter mail its own DKIM reputation signal only when signed for the subdomain, and never fully cuts the tie to the main domain.
DKIM and SPF are DNS records that let mailbox providers verify a WordPress site’s outbound mail is authorised to send as your domain. Neither is WordPress-specific; both are essential to any site whose email is expected to reach the inbox.
A mailer plugin paired with a transactional email provider. The plugin replaces WordPress’s default sending path; the provider gives you an authenticated pipeline that lands mail in the inbox.
WordPress email fails for four distinct reasons. This diagnostic sorts between them and gives the fix for each, from the disabled mail() function on shared hosts through unauthenticated From addresses that Gmail treats as spam.
Spamhaus refuses lookups through Google, Cloudflare and many hosts, and checks often read the refusal as “not listed”. A test lookup shows if yours does.
Microsoft 365 Outlook can file mail it judges promotional in a Promotions folder, WordPress receipts included. What is known, and what a site can test.
Yes, both personal Outlook.com and Microsoft 365 mailboxes work as WordPress SMTP relays, using different hosts and authentication. Microsoft 365 needs OAuth and hits daily send limits; personal Outlook.com is smaller and only for hobby sites.
Yes. Any active WordPress plugin can hook wp_mail and read the recipient, subject, body, headers, and attachments of every outbound message. The trust boundary sits at plugin install, not at send time.
Yes, if the Microsoft 365 tenant has sending-from-aliases turned on and the alias is a proxy address on the sending mailbox. GA on October 7, 2026.
No. The three WordPress mailer plugins that connect to Microsoft 365 send through SMTP or Microsoft Graph. EWS retirement doesn’t touch mail submission.
Yes. Three DNS records on your domain (SPF, DKIM, and optionally DMARC) let a WordPress site send authenticated mail from an address on your own domain, through whichever transactional provider you configure. The records are published at your DNS host, not inside WordPress.
WordPress mailer plugins ask for delegated Mail.Send, which acts as one signed-in account, not the whole tenant. What to offer IT, and the exits if IT says no.
A subdomain gives WordPress newsletter mail its own DKIM reputation signal only when signed for the subdomain, and never fully cuts the tie to the main domain.
DKIM and SPF are DNS records that let mailbox providers verify a WordPress site’s outbound mail is authorised to send as your domain. Neither is WordPress-specific; both are essential to any site whose email is expected to reach the inbox.
In every hyphenated domain we checked, Microsoft 365’s DKIM CNAME dropped the hyphen and added a short suffix. It is not a copy error, so publish the values as given.
Standardise SMTP across client sites by opening one transactional provider account per client, on the client’s domain, with credentials held by the agency.
Gmail rejects unauthenticated mail; Microsoft 365 downgrades it to Junk. Here is why your form reaches Office 365 but not Gmail, and how to fix it.
Free Gmail at gmail.com is free. Google Workspace costs $7/user/month and adds custom-domain mail, higher SMTP limits, and admin controls. What changes for a WordPress site.
CF7 geo-blocking works via Cloudflare WAF, Wordfence Premium, or GeoIP plugins. For brand-confusion volume, a form-level filter usually works better.
Yes. Three routes exist. Your form plugin’s native CRM integration, the CRM vendor’s own WordPress plugin, or a general-purpose connector like Zapier or Make. Native integrations are the shortest path when the plugins line up.
The red Contact Form 7 error means the form’s email failed to send. Why the SMTP plugin’s test still passes, where the real error is logged, and what to change.
Contact Form 7 v6.2 raised its PHP floor to 8.3 and crashed older WordPress sites. Shell recovery, and how to pin one plugin without disabling the rest.
Install a contact form plugin, build a form in its editor, and drop the plugin’s block or shortcode onto the page where the form should appear. WordPress does not ship a contact form out of the box; a plugin is the standard route.
Use a contact form plugin that supports a second notification email, and set that second notification to send to the submitter with your acknowledgement copy. Every mainstream form plugin either includes autoresponders or has an add-on that does.
Combine a bot filter (honeypot or Cloudflare Turnstile) with content filtering (Akismet or Antispam Bee). Every serious form plugin ships with hooks for both; turn them on before the form goes live rather than after the spam starts.
Fluent Forms is the usual move off Contact Form 7. But every popular form plugin sends through wp_mail(), so swapping is a UX move, not a delivery fix.
The Settings → General confirmation flow needs a working old mailbox. Three bypasses (WP-CLI, direct DB, one-shot mu-plugin) update admin_email without it.
The red Contact Form 7 error means the form’s email failed to send. Why the SMTP plugin’s test still passes, where the real error is logged, and what to change.
The “check your inbox” line doesn’t mean WordPress sent the recovery mode email. It sends one a day at most, through the mail setup that may have just broken.
A registrar suspension breaks WordPress email in stages: inbound bounces, outbound fails your domain’s DKIM and DMARC, resets go nowhere. What to fix, in order.
Gmail rejects unauthenticated mail; Microsoft 365 downgrades it to Junk. Here is why your form reaches Office 365 but not Gmail, and how to fix it.
Probably, if your host’s notice names files or databases, or is vague. Where each WordPress SMTP password, API key or OAuth token is kept decides which leaked.
Mandrill security is Mailchimp parent-account security. The Transactional dashboard shares the Mailchimp login, so what reaches one reaches the other. Here is the audit a WordPress site should actually run.
Maybe, and your email log can’t rule it out: spam scripts calling PHP’s mail() skip WordPress. Your host’s mail logs show it; PHP’s mail log names the script.
Yes. Code that ran inside WordPress could read every mail credential your SMTP plugin stores, encrypted or not. What to rotate, in what order, what to check.
WordPress email fails for four distinct reasons. This diagnostic sorts between them and gives the fix for each, from the disabled mail() function on shared hosts through unauthenticated From addresses that Gmail treats as spam.
Spamhaus refuses lookups through Google, Cloudflare and many hosts, and checks often read the refusal as “not listed”. A test lookup shows if yours does.