Skip to content

Copy production to staging. Nobody gets an email.

Restore a live database onto a test site and WordPress starts mailing real customers — password resets, order confirmations, renewals. Email Holinator holds every message wp_mail() sends, and keeps a readable copy of each one.

The Email Holinator mail log, listing held messages with their recipients, subjects and the time each was caught.
  • Works with WordPress’s own mailer
  • Works with WP Mail SMTP, Easy WP SMTP and FluentSMTP
  • Catches mail however your SMTP plugin takes over
  • Never contacts anyone but your own site

Nothing gets out.

One switch holds every message the site tries to send. Turn it on before you import the database, not after.

You can still read what it tried to send.

Every held message is kept whole — recipients, subject, the rendered body, and the name of anything attached — so you can see exactly what would have gone out, and send it on if you decide it should.

It can’t be left off by accident.

Two constants in wp-config.php force the switch on and take it out of every administrator’s reach, including yours. While it is running, nothing inside WordPress can lift the hold — not the toolbar, not an administrator, not the REST API.

One switch, and the site goes quiet

The switch lives in the toolbar, on every admin page, so it is one click from wherever you already are. It catches what WordPress sends through wp_mail() — core’s own mailer and the SMTP plugins that hook it, not just the default one.

The Email Holinator toolbar panel open, showing the hold and log switches.

Read exactly what it would have sent

Every message is kept whole and opened in place: recipients, subject, the body itself, and the names of anything attached. Search by recipient or subject, export the list, or send a stored message on once you have decided it should go.

The Email Holinator log with a stored message open over it, showing its recipients, subject and rendered body.

Make it impossible to forget

The switch a person can turn off is the switch someone turns off. Two constants in wp-config.php force it on and lock it out of the admin screen entirely — the toolbar control renders disabled and nothing sent through the settings route can move it. Put them in the staging site’s config once and stop thinking about it.

// wp-config.php on the staging site.
// Hold everything WordPress sends, and log it.
define( 'AIEH_PERMAHOLE', true );
define( 'AIEH_PERMALOG', true );
PRO

Let yourself through, hold everyone else

PRO adds exceptions to the switch. Name the accounts and roles that should still receive their mail — you, and whoever else is testing — and everything else stays held. Rules are built by searching WordPress users and roles, so a rule naming the Administrator role keeps working when the team changes.

The Advanced routing card expanded in allow list mode, with a user and a role selected.
PRO

Or send it somewhere you can read it

Instead of holding what matches, redirect it to a single address. The log records the address the message actually went to rather than the one it was addressed to, so the trail matches what happened.

The Advanced routing card in forward mode, with a destination address filled in.

What you get

Free

The whole holding-and-logging product. Not a trial, and nothing expires.

  • Hold every message WordPress sends through wp_mail()
  • Log each one whole — recipients, subject, the body itself, and the name of anything attached
  • Read a stored message in place, and resend it if you decide it should go
  • Search by recipient or subject
  • Export the log to CSV
  • Send a test message and watch what happens to it, step by step
  • Force either switch on from wp-config.php, out of an administrator’s reach
  • Both switches from the toolbar, on every admin page

PRO

Everything in Free, plus:

  • Let named accounts and roles through while everything else stays held
  • Or hold only the people you name, and let the rest go out
  • Or forward what matches to one address you can read
  • Rules follow WordPress roles, so they keep working when the team changes
Get PRO

Adds to your free install

Questions

Does it catch every email my site sends?

Everything that goes out through WordPress’s own wp_mail() — the function core itself uses for password resets and new-user notices. That covers the SMTP plugins that replace it too, not just the default mailer. What it cannot see is a plugin that calls PHP’s mail() directly or opens its own connection to a mail service, because that message never passes through WordPress at all. Bypassing wp_mail() costs a plugin compatibility with every SMTP plugin its users install — but the gap is real, and worth knowing about rather than discovering.

Do I need this on my live site?

No, and mostly you should not want it there. It is built for the copies — staging, a local checkout, the clone you made to test an upgrade. Those are the sites that hold a real customer list and no reason to email it.

Is the free plugin required?

Yes. PRO adds to it rather than replacing it, and will not activate on its own. It adds no admin screen either — everything it brings appears inside the free plugin’s own Tools tab.

How many sites does one licence cover?

Every site you run. One licence, no per-site pricing.

What happens if my licence lapses?

The site gets quieter, never louder. The allow and forward rules stop overriding and the site falls back to holding everything, exactly as the free plugin does. A block list keeps holding. A billing problem can never make a site send something you had stopped.

Will it slow my site down?

Nothing ever leaves your site. No third party, no phone-home, no update check, no telemetry — the free plugin reads the mail WordPress was already sending and writes it to one table.

Import the database. Nobody finds out.

Get PRO
  • WordPress 6.3+
  • PHP 7.4+
  • Plugins nothing — it only reads the mail WordPress already sends
  • Uninstall removes the log table and the one option