WordPress plugin · Email · Free

Demfilz SMTP Mailer

WordPress hands its email to the PHP mail function, which nothing vouches for. Order confirmations, password resets and contact form messages go missing or land in spam. This plugin routes every message your site sends through a mail service that authenticates it, then finds out what happened: bounces come back into the log, and dead addresses go on a suppression list so they are never emailed again. With Microsoft 365 and Outlook handled properly through modern authentication.

v1.1.0 · WordPress 5.8+ · PHP 7.4+ · free

Microsoft 365 with OAuth, not a password Bounce capture and a suppression list Credentials encrypted with your site salts

Microsoft mailboxes are first class here

Microsoft has switched basic authentication off across Exchange Online, so plugins that only offer a user name and password no longer work for most tenants. This one gives you three ways in: the Graph API with a signed in mailbox (register an application, press Connect, sign in once - it works even where SMTP AUTH is disabled), the Graph API with application permissions (no sign in at all, an administrator consents once and the site sends as the mailbox you nominate), and SMTP with modern authentication to smtp.office365.com if you would rather keep the SMTP path. Personal Outlook.com and Hotmail mailboxes work through the same Graph mailer.

The classic "the client does not have permission to send as this user" error is handled for you: when a provider only accepts its own mailbox as the sender, the from address is rewritten to it and the original is moved into reply to, so replies still reach the right inbox.

It finds out what happened after the send

Most mail plugins stop at "accepted by the server". This one closes the loop. For Microsoft and Google it reads the delivery reports that come back to the connected mailbox and parses the machine readable part, so a log entry flips from Delivered to Bounced with the real reason, such as 5.1.1 the address does not exist. For SendGrid, Mailgun, Brevo, Postmark and Resend it takes their delivery, bounce and complaint webhooks. Hard bounces and spam complaints go on a suppression list, and the plugin refuses to email those addresses again. Repeatedly sending to dead addresses is what gets a domain throttled and blocklisted; this is the part that protects your sending reputation.

Ten mailers, one plugin

Google Workspace and Gmail through the Gmail API with OAuth. Any other SMTP server with STARTTLS or SSL. SendGrid, Mailgun (United States or European region), Brevo, Postmark and Resend over HTTPS, which also gets you around a host that blocks port 587. And the plain PHP mail function, if all you want is the log and the alerts.

It tells you when something breaks

Every message is recorded with the mailer that carried it, the plugin or theme that asked for it, and the exact reason for any failure. Failures are queued and retried in the background with the wait doubling each time, a backup mailer can take the finished message the moment the first one fails, and you can be told by dashboard notice, email or webhook. The domain check reads your SPF, DKIM and DMARC records and names what is missing, because that is the usual reason a correctly configured mailer still lands in spam.

See it

Set it up, then watch it work

The four screens you will actually use.

Choosing a mailer, with the Microsoft 365 connection panel open
Pick a mailer; its connection panel opens underneath, with the redirect URI ready to copy.
The email log showing delivered, bounced, blocked and queued messages
The email log: delivered, confirmed, bounced, blocked and retrying, with the reason for each.
The suppression list, with a bounced address and the reason the provider gave
The suppression list: bounces and complaints land here and are never emailed again.
The domain records check for SPF, DKIM and DMARC
The domain check reads SPF, DKIM and DMARC and tells you what is missing.

Coding standards

Passes the WordPress Coding Standards with zero errors and zero warnings, clean against the official Plugin Check, and covered by more than three hundred automated assertions including every mailer driven through a mocked API.

Credentials sealed

Passwords, API keys and OAuth tokens are encrypted with a key derived from your wp-config salts, never printed back into the settings screen, and can live in wp-config.php instead of the database entirely.

Nothing in the middle

No account with us and no relay of ours. Your site talks straight to the mail provider you chose, with your own credentials, and the plugin sends your data nowhere else.

How it works

Sending properly in ten minutes

1

Set the from address

Use an address at your own domain under Mail, Settings. Free mailbox addresses are rejected or filed as spam by most inboxes.

2

Choose a mailer

Pick Microsoft 365, Google, an SMTP server or a sending service. The connection panel for that mailer opens underneath with the fields it needs.

3

Connect it

For Microsoft and Google, register an application, paste the id and secret, save and press Connect. For everything else, paste the credentials your provider gave you.

4

Test and check the domain

Send a test email from Mail, Tools. If it does not arrive, run the domain check and add whichever of SPF, DKIM and DMARC is missing. Then switch on delivery feedback so bounces come back into the log.

Read the full setup guide →
The email log

Why it matters. A shop that cannot send an order confirmation looks broken, and a customer who never gets a password reset simply leaves. Authenticated sending plus a log means you find out from your own dashboard, not from a complaint.

Download

Get Demfilz SMTP Mailer

Free, and ready to install today.

Demfilz SMTP Mailer v1.1.0

Free · WordPress 5.8+ · PHP 7.4+ · on the official WordPress.org plugin directory

Get it on WordPress.org

Direct download (.zip) →  ·  Setup guide →

Install it from your WordPress dashboard under Plugins → Add New by searching for "Demfilz SMTP Mailer", or upload the zip, activate, then open Mail → Settings.

FAQs

Common questions

Does it work with Microsoft 365 now that basic authentication is off?

Yes, that is the reason it exists. It signs in with OAuth and posts each message to the Microsoft Graph API, so it keeps working after basic authentication and SMTP AUTH are switched off. There is also an SMTP mailer that uses the same modern authentication if you would rather keep the SMTP path.

What is the difference between signing in and application permissions?

Signing in suits a single mailbox: register an application, press Connect, sign in once. Application permissions need an administrator to consent once, never expire until the client secret does, and can send from any mailbox in the tenant, so pair them with an application access policy that limits the site to the one mailbox you intend.

My host blocks SMTP ports. Will this help?

Yes. The Microsoft, Google, SendGrid, Mailgun, Brevo, Postmark and Resend mailers all send over HTTPS, so a blocked port 587 or 465 does not stop them.

Where are the credentials stored?

Encrypted in the database with a key derived from the salts in your wp-config.php file, so a stolen database dump alone does not hand them over. They are never printed back into the settings screen. You can also define any setting as a constant in wp-config.php, in which case nothing is stored in the database at all.

How does it know an email bounced?

Two ways. The sending services (SendGrid, Mailgun, Brevo, Postmark, Resend) post delivery events to a webhook address the plugin gives you, protected by a long secret. Microsoft and Google do not post events, so if you allow it the plugin reads the delivery reports that arrive in the connected mailbox every fifteen minutes and parses the standard delivery status part inside them. Either way the matching log entry is marked Bounced with the reason, and the address goes on the suppression list.

Does reading bounce reports mean the plugin can read all my mail?

The permission it asks for allows reading the mailbox, which is why it is off by default and a separate switch. The plugin only lists recent messages from postmaster or mailer-daemon addresses or with an Undeliverable style subject, fetches only those, and stores only the failed address and the reason. With Microsoft application permissions you can additionally scope the application to one mailbox with an application access policy.

What happens when a message fails?

It is written to the log with the exact reason, queued, and tried again in the background with the wait doubling each time. If you have set a backup mailer, the finished message is handed straight to it instead. A notice appears in the dashboard either way, and you can also have an email or a webhook alert.

Does the log keep the contents of every email?

Only if you ask it to. Message bodies are off by default, because password reset links and customer details would otherwise sit in your database. Entries older than the retention period, thirty days out of the box, are deleted automatically.

Will it clash with another SMTP plugin?

Only one plugin should own sending. This one steps aside if it sees that another mail plugin has already taken over the mailer object, and shows a warning so you know to deactivate one of them.

Is it on WordPress.org, and where do I get it?

Yes - it is published on the official WordPress.org plugin directory: install it from your WordPress dashboard under Plugins → Add New by searching for "Demfilz SMTP Mailer". A direct download is also available from this page.

Email is only part of it?

Transactional templates, delivery reporting, a mail queue that survives a busy sale - this is the kind of thing we build. Tell us what your site needs and we will come back with a plan and a fixed quote.