Title: WT SMTP
Author: Webmasters.Team
Published: <strong>September 25, 2026</strong>
Last modified: September 25, 2026

---

Search plugins

![](https://ps.w.org/wt-smtp/assets/banner-772x250.png?rev=3712544)

![](https://ps.w.org/wt-smtp/assets/icon-256x256.png?rev=3712544)

# WT SMTP

 By [Webmasters.Team](https://profiles.wordpress.org/webmastersteam/)

[Download](https://downloads.wordpress.org/plugin/wt-smtp.1.0.7.zip)

 * [Details](https://wordpress.org/plugins/wt-smtp/#description)
 * [Reviews](https://wordpress.org/plugins/wt-smtp/#reviews)
 *  [Installation](https://wordpress.org/plugins/wt-smtp/#installation)
 * [Development](https://wordpress.org/plugins/wt-smtp/#developers)

 [Support](https://wordpress.org/support/plugin/wt-smtp/)

## Description

**WT Waitlist** sends back-in-stock emails, **WT Hardening** logs security events,
and now **WT SMTP** makes sure those emails actually arrive — and tells you exactly
why they do not.

Built by the [webmasters.team](https://webmasters.team) team. Open-source, no external
dependencies, no Pro upsell.

#### Why another SMTP plugin?

Because most SMTP plugins tell you whether a send returned `true` or `false`. WT
SMTP tells you **why mail goes to spam before you even press Send**: the Settings
page runs a live SPF / DKIM / DMARC / MX check against your From domain and surfaces
missing records inline. No external tool, no copy-pasting domain names into third-
party validators.

#### Key features

 * **Drop-in SMTP** for any provider — generic host/port/encryption/auth, plus one-
   click presets for Gmail, Outlook / Microsoft365, SendGrid, Brevo, Mailgun, Amazon
   SES and MailHog (dev).
 * **AES-256 password encryption at rest** when you define `WTSMTP_KEY` in `wp-config.
   php` — falls back to plaintext storage with a visible warning if the key is missing.
 * **Mail log** in a dedicated table (`{prefix}_wtsmtp_log`) — metadata only, no
   bodies or attachments — with one-click resend for failed messages and configurable
   retention (default 30 days).
 * **Live DNS health check** for the From domain — MX, SPF, DMARC, plus DKIM probing
   for any selectors you configure (defaults: `default`, `google`, `selector1`).
   Cached for 1 hour to keep the Settings page snappy.
 * **Test email** with full PHPMailer `ErrorInfo` surfaced on failure — the actual
   reason `wp_mail()` returned `false`.
 * **Conflict detection** — warns when another SMTP plugin (WP Mail SMTP, FluentSMTP,
   Post SMTP, Easy WP SMTP…) is also active and would fight over `phpmailer_init`.
 * **Copy diagnostic info** — paste-ready text block with environment, config, log
   counts, DNS results and conflict notes for support tickets.
 * **GDPR-friendly recipient anonymization** in the log (e.g. `j***@example.com`)—
   opt-in.
 * **Zero external dependencies** — no Composer, no JS framework, no call-home.

### External services

WT SMTP sends your site’s outgoing email through an SMTP server, and it can look
up your domain’s email DNS records for the built-in deliverability diagnostic. Both
are described below.

#### Your SMTP server / provider

When WordPress sends an email (`wp_mail()`), WT SMTP hands the message to the SMTP
server you configure under Settings -> WT SMTP. The email (its headers, subject,
recipients and body) and the SMTP username and password you entered are transmitted
to that server whenever WordPress sends a message.

The SMTP server can be your own mail server or a third-party provider. For convenience
the plugin ships connection presets for the providers below; choosing a preset only
fills in the host and port. You still enter your own credentials, and nothing is
sent anywhere until WordPress actually sends an email:

 * Gmail / Google Workspace – terms: https://policies.google.com/terms – privacy:
   https://policies.google.com/privacy
 * Microsoft 365 / Outlook – terms: https://www.microsoft.com/servicesagreement –
   privacy: https://privacy.microsoft.com/privacystatement
 * SendGrid (Twilio) – terms: https://www.twilio.com/legal/tos – privacy: https://
   www.twilio.com/legal/privacy
 * Brevo (Sendinblue) – terms: https://www.brevo.com/legal/termsofuse/ – privacy:
   https://www.brevo.com/legal/privacypolicy/
 * Mailgun – terms: https://www.mailgun.com/legal/terms/ – privacy: https://www.
   mailgun.com/legal/privacy-policy/
 * Amazon SES – terms: https://aws.amazon.com/service-terms/ – privacy: https://
   aws.amazon.com/privacy/

If you use a different SMTP server, its own terms and privacy policy apply. WT SMTP
does not send your data to webmasters.team or any of its own servers.

#### Domain DNS lookup (deliverability diagnostic)

The optional “DNS health check” on the settings screen performs standard public 
DNS lookups (MX, SPF, DMARC and DKIM records) for your site’s own email domain, 
using PHP’s `dns_get_record()`. It is a normal DNS query and the result is cached
for one hour. No personal data is sent, and the lookup only runs when you open the
diagnostic.

## Installation

 1. Install and activate **WT SMTP**.
 2. Open **WT SMTP  Settings** in the admin.
 3. (Recommended) Add `define('WTSMTP_KEY', 'a long random string');` to `wp-config.
    php` to enable AES-256 password encryption.
 4. Pick a provider preset (or enter your own host), add credentials, set the From 
    email, save.
 5. Click **Send test email to admin** to verify the pipeline.

## FAQ

### Where do I get SMTP credentials?

From your mail provider. Most providers (Gmail, Outlook, Brevo, SendGrid, Mailgun,
Amazon SES) require an **app password** or **API-key-as-password**, not your regular
account password.

### Why is the password stored in plaintext?

It is not — if you defined `WTSMTP_KEY` in `wp-config.php`. Without it, the plugin
falls back to plaintext and shows a visible warning in the Settings panel. Defining
the key takes 30 seconds and is strongly recommended.

### The DNS health check shows “DNS lookups blocked by host”. What now?

Some low-cost shared hosts disable `dns_get_record()`. Use an external DNS lookup
tool ([mxtoolbox.com](https://mxtoolbox.com/)) for your From domain, or move to 
a host that allows DNS queries. The rest of the plugin still works.

### I see “WP Mail SMTP is also active” in the System status.

Two SMTP plugins on one site will fight over the `phpmailer_init` hook — only one
wins, and you cannot predict which. Disable one.

### Will this slow down my site?

No. SMTP wire-up only happens when `wp_mail()` is actually called. The DNS health
check is cached for 1 hour. Logging is a single INSERT per send.

### Can I forward the log to my own monitoring?

Yes. Hook the `wtsmtp/after_send` action (fires after each log INSERT) and pipe 
the row anywhere you like.

### Will old log entries clog the database?

No. The plugin schedules a daily purge of entries older than the configured retention(
default 30 days).

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“WT SMTP” is open source software. The following people have contributed to this
plugin.

Contributors

 *   [ Webmasters.Team ](https://profiles.wordpress.org/webmastersteam/)

[Translate “WT SMTP” into your language.](https://translate.wordpress.org/projects/wp-plugins/wt-smtp)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/wt-smtp/), check out
the [SVN repository](https://plugins.svn.wordpress.org/wt-smtp/), or subscribe to
the [development log](https://plugins.trac.wordpress.org/log/wt-smtp/) by [RSS](https://plugins.trac.wordpress.org/log/wt-smtp/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.7

 * Fix: raised the minimum PHP version to 8.1 to match the code (the plugin uses
   readonly properties, introduced in PHP 8.1); this prevents a parse error when
   activated on PHP 8.0.

#### 1.0.6

 * Housekeeping: renamed internal code identifiers (defines, options, hooks, transients,
   admin-page slugs) to the unique `wtsmtp` prefix to avoid conflicts. The public
   action hook is now `wtsmtp/after_send`; the encryption constant is now `WTSMTP_KEY`.

#### 1.0.5

 * Docs: documented the external services the plugin uses (the configured SMTP server/
   provider and the domain DNS deliverability lookup).
 * New: the documented `wtsmtp/after_send` action now fires after each mail-log 
   entry is written.
 * Housekeeping: moved “Tested up to” out of the main plugin file (readme is the
   single source), removed the plugin header URI.

#### 1.0.4

 * Compatibility: tested up to WordPress 7.1.

#### 1.0.3

 * Raised the minimum required WordPress version to 6.7 and use `wp_get_wp_version()`(
   the recommended replacement for the global `$wp_version`) for the WordPress version
   shown in the System Status diagnostics. No user-facing change.

#### 1.0.2

 * Compatibility: use `wp_get_wp_version()` (WordPress 6.7+) instead of reading 
   the global `$wp_version` in the System Status diagnostics, with a fallback for
   older cores. No user-facing behaviour change.

#### 1.0.1

 * Pre-approval hardening: addressed Plugin Check findings on the initial submission.
   No user-facing behaviour change.
    - Explicit `wp_unslash()` + `absint()` on all `$_GET` reads in the Mail Log 
      list table.
    - Documented `phpcs:ignore` annotations on nonce checks that happen later in
      the same flow (Mail Log resend, list-table filters).
    - Class-level `phpcs:disable` with rationale on the mail-log repository — every
      query targets the plugin’s own `{prefix}_wtsmtp_log` table built from `$wpdb-
      >prefix`, no user-controlled identifiers anywhere.
    - Same annotation on the `uninstall.php` DROP TABLE.

#### 1.0.0

First public release.

 * SMTP configuration with one-click provider presets (Gmail, Outlook / Microsoft365,
   SendGrid, Brevo, Mailgun, Amazon SES, MailHog).
 * AES-256 password encryption at rest using `WTSMTP_KEY` (fallback to `AUTH_KEY`
   or plaintext with a warning).
 * Custom mail-log table (`{prefix}_wtsmtp_log`) — metadata only, no bodies or attachments.
 * Mail log admin screen with filtering, search, bulk delete and one-click resend.
 * Test email AJAX with PHPMailer `ErrorInfo` surfaced on failure.
 * Live DNS health check (MX / SPF / DMARC / DKIM with configurable selectors).
 * Conflict detection for other SMTP plugins (WP Mail SMTP, FluentSMTP, Post SMTP,
   Easy WP SMTP, WP SMTP, WP Mail Bank).
 * Copy-to-clipboard support diagnostic snippet.
 * Opt-in GDPR recipient anonymization in the log.
 * Daily purge cron with configurable retention (default 30 days).

## Meta

 *  Version **1.0.7**
 *  Last updated **11 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.7 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 8.1 or higher **
 * Tags
 * [debug](https://wordpress.org/plugins/tags/debug/)[deliverability](https://wordpress.org/plugins/tags/deliverability/)
   [email](https://wordpress.org/plugins/tags/email/)[mail log](https://wordpress.org/plugins/tags/mail-log/)
   [smtp](https://wordpress.org/plugins/tags/smtp/)
 *  [Advanced View](https://wordpress.org/plugins/wt-smtp/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/wt-smtp/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/wt-smtp/reviews/)

## Contributors

 *   [ Webmasters.Team ](https://profiles.wordpress.org/webmastersteam/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/wt-smtp/)

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://webmasters.team/)