Title: MailKite SMTP – Multi-Provider SMTP with Failover, Email Logs &amp; Inbound Email
Author: mailkite
Published: <strong>September 3, 2026</strong>
Last modified: September 3, 2026

---

Search plugins

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

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

# MailKite SMTP – Multi-Provider SMTP with Failover, Email Logs & Inbound Email

 By [mailkite](https://profiles.wordpress.org/mailkite/)

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

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

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

## Description

WordPress sends email through PHP `mail()` by default — unauthenticated, often blocked,
and invisible when it fails. MailKite SMTP replaces it with reliable delivery, a
free email log, automatic failover, and inbound email.

**Free forever. No Pro tier. No locked features. Open source.**

#### Send through any provider

 * **MailKite** (recommended): free tier, ~2-minute setup, open/click tracking, 
   and **inbound email**. Sign up at [mailkite.dev](https://mailkite.dev).
 * **SendGrid, Brevo, Mailgun** — bring your own API key.
 * **Any SMTP server** — host, port, TLS/SSL, credentials.
 * **Routing rules**: send WooCommerce receipts via one provider and newsletters
   via another, by subject or recipient.

#### Never lose an email

 * **Automatic failover** — if the API provider fails, the email retries through
   your SMTP server or PHP mail, free.
 * **Instant failure alerts** — email, Slack, Discord, or any webhook, the moment
   a send fails (rate-limited, no alert storms).
 * **Email log with resend and CSV export**, configurable retention, and one-click
   resend of failures.
 * **Weekly summary** — sent/failed counts, top errors, and DNS status in your inbox.

#### Private by design

 * **Auth-email redaction (on by default)**: bodies of password-reset and verification
   emails are never stored, so a leaked database or log page can never leak reset
   links.
 * Stored credentials are **encrypted at rest** (AES-256-GCM keyed from your wp-
   config salts).
 * No telemetry. No external calls until you connect a provider.

#### Receive email in WordPress

Send email and receive it too. Turn inbound on (one click — the webhook and its 
signature verification are installed on your MailKite domain automatically) and 
you get three things:

 1. **Turn an email into a WordPress action.** Every message fires `do_action( 'mailkite_smtp_inbound',
    $message, $payload )`, so your plugins and theme can act on it: open a support 
    ticket, attach a customer’s reply to their WooCommerce order, post to a forum, 
    hand it to an AI agent.
 2. **Nothing vanishes.** Your site sends from a no-reply address and people reply 
    anyway; bounces and out-of-office notices come back too. Without inbound those 
    are lost silently — with it they land in the Email Log next to the message they
    answer, and you can **reply from WordPress**, in-thread, as your own domain.
 3. **Or just forward it.** No code: send a copy of everything to an address you already
    read.

#### For professionals

 * **One-click migration** from WP Mail SMTP, Easy WP SMTP, FluentSMTP, and Post
   SMTP.
 * **WP-CLI**: `wp mailkite status|test|log|purge`.
 * **Site Health** integration and a **Domain Health** tab (SPF/DMARC checks with
   weekly drift alerts).
 * Settings export/import (secrets excluded) and `wp-config.php` constants (`MAILKITE_API_KEY`,`
   MAILKITE_DEFAULT_MAILER`) for automated provisioning.
 * Works with WooCommerce, Contact Form 7, WPForms, and anything using `wp_mail()`.

#### External services

This plugin does not contact any external service until you choose a mailer and 
enter its credentials. Out of the box, with the built-in PHP mailer or your own 
SMTP server, no data leaves your site to any third party.

When you select an API-based mailer, the email you send — sender, recipients, subject,
body, and any attachments — is transmitted to that provider at the moment the email
is sent, because that provider is what delivers it. Each service, the host it contacts,
and what is sent:

 * **MailKite** — host `api.mailkite.dev` (configurable; the plugin contacts whatever
   host is set as the API base). Used to deliver outbound email through your MailKite
   account, to report delivery events back into the Email Log, and — if you turn
   inbound on — to register a webhook so MailKite can deliver received email to 
   your site. Sent when you send mail: the message and its attachments. Sent when
   you connect your account: your email address (to create an account) or an OAuth
   authorization, and the domain id you pick for inbound. Received from MailKite:
   inbound email addressed to your domain. [Terms of service](https://mailkite.dev/terms)·
   [Privacy policy](https://mailkite.dev/privacy)
 * **SendGrid** — host `api.sendgrid.com`. Used to deliver outbound email with your
   SendGrid API key. Sent when you send mail: the message and its attachments. [Terms of service](https://www.twilio.com/legal/tos)·
   [Privacy policy](https://www.twilio.com/legal/privacy)
 * **Brevo** — host `api.brevo.com`. Used to deliver outbound email with your Brevo
   API key. Sent when you send mail: the message and its attachments. [Terms of use](https://www.brevo.com/legal/termsofuse/)·
   [Privacy policy](https://www.brevo.com/legal/privacypolicy/)
 * **Mailgun** — host `api.mailgun.net`, or `api.eu.mailgun.net` when you select
   the EU region. Used to deliver outbound email with your Mailgun API key. Sent
   when you send mail: the message and its attachments. [Terms of service](https://www.mailgun.com/legal/terms/)·
   [Privacy policy](https://www.mailgun.com/legal/privacy-policy/)
 * **Your own SMTP server** — the host, port, and credentials you configure. Used
   to deliver outbound email. Sent when you send mail: the message and its attachments.
   This is your own or your host’s server; no third-party terms apply.

#### Failure alerts (optional, off unless you configure them)

If you enter an alert webhook URL, the plugin sends a notification to that URL, 
and only when an email fails to send. What is sent: your site’s hostname, the failed
message’s subject line, and the error text reported by the mailer. The message body
is never included, and recipients are not sent as a field — though a provider’s 
error text can itself quote an address it rejected. The URL is yours to choose, 
so the receiving service is whichever one you point it at — commonly:

 * **Slack** — host `hooks.slack.com`, when you paste a Slack incoming-webhook URL.
   [Terms of service](https://slack.com/terms-of-service) · [Privacy policy](https://slack.com/trust/privacy/privacy-policy)
 * **Discord** — host `discord.com`, when you paste a Discord webhook URL. [Terms of service](https://discord.com/terms)·
   [Privacy policy](https://discord.com/privacy)
 * **Any other endpoint** you supply, including one on your own infrastructure, 
   which receives the same JSON payload.

Leaving the alert webhook field empty means no request is ever made.

## FAQ

### Is this plugin really free?

Yes. Every feature is free and always will be — including logs, failover, and alerts.
MailKite (the email service) has free and paid plans, but the plugin works fully
with your own SMTP server or SendGrid/Brevo/Mailgun keys and never requires a MailKite
account.

### Why are some log entries missing a body?

Password-reset, login, and verification emails are stored without their body by 
default, so a compromised database can never leak reset links. Disable in Settings
if you accept the risk.

### Does it work with WooCommerce / Contact Form 7 / WPForms?

Yes — the plugin intercepts `wp_mail()`, which they all use.

### How do I receive email into WordPress?

Open the Inbound tab, pick your domain, and press “Turn on inbound” — the plugin
installs the webhook and its signature verification on your MailKite account for
you. Nothing to copy, paste, or configure by hand. Then read arriving mail in the
Email Log, handle `mailkite_smtp_inbound` in your code, or set a forwarding address.

### Can I reply to email from WordPress?

Yes. Received messages get a Reply action in the Email Log. The reply goes out as
the address the message was delivered to — your own verified domain, never a spoofed
sender — and it threads correctly, so the conversation stays together in the recipient’s
mail client. Both halves show under Conversation on the message.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“MailKite SMTP – Multi-Provider SMTP with Failover, Email Logs & Inbound Email” 
is open source software. The following people have contributed to this plugin.

Contributors

 *   [ mailkite ](https://profiles.wordpress.org/mailkite/)
 *   [ bucabay ](https://profiles.wordpress.org/bucabay/)

[Translate “MailKite SMTP – Multi-Provider SMTP with Failover, Email Logs & Inbound Email” into your language.](https://translate.wordpress.org/projects/wp-plugins/mailkite-smtp)

### Interested in development?

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

## Changelog

#### 0.4.2

 * The REST email-log endpoint returns site mail only. It previously selected the
   log table directly and so could return metadata — recipient, sender, subject —
   for mail owned by a user’s personal mailbox, which the admin screen and the CSV
   export already excluded.
 * The same site-mail restriction now applies to the WP-CLI log listing, the Site
   Health failure count and the weekly summary digest.
 * Every read of the log tables goes through the log store, where ownership is part
   of the query, so no caller can drift from the restriction again.

#### 0.4.1

 * The inbound webhook route now authenticates in its `permission_callback` rather
   than inside the handler, so an unauthenticated request is rejected before any
   handler code runs.
 * Settings input is sanitized field by field as it arrives, with the function appropriate
   to each field’s type, in addition to the existing validation before storage.
 * Imported settings JSON is sanitized after decoding — `json_decode()` parses but
   does not clean.
 * The OAuth connect callback carries a WordPress nonce through the `state` round-
   trip and verifies it, alongside the existing single-use, user-bound state transient.
 * Every REST route states its capability check inline.
 * Readme documents each external service’s host, what is sent and when, and its
   terms and privacy links — including the optional failure-alert webhooks.

#### 0.4.0

 * Received mail is now stored in WordPress, so it stays readable after MailKite’s
   retention window ends.
 * One inbound webhook serves this plugin and MailKite Mailboxes, writing to one
   set of tables instead of two.
 * Mail belonging to a user’s personal mailbox no longer appears in the site-wide
   Email Log — ownership is enforced in the query, not in the template.
 * Retention purges site mail only; personal mailbox mail is never deleted by it.
 * A send that falls back to another mailer is labelled as such in the log, instead
   of reporting plain success.
 * Inbound webhooks are registered on the connected MailKite account automatically—
   no copying URLs by hand.

#### 0.3.0

 * Inbound: reply to received mail from the Email Log, threaded (From is forced 
   to the address it was delivered to).
 * Log stores the real sender, conversation id and message id; conversation view
   groups both sides of an exchange.
 * Inbound tab explains what inbound is for, with the developer hook, log link and
   forwarding in one place.
 * User mailboxes moved to their own plugin, **MailKite Mailboxes** — real addresses
   for WordPress users, an Inbox screen and `[mailkite_inbox]`.

#### 0.2.0

 * SendGrid, Brevo, and Mailgun mailers (bring your own key).
 * Automatic failover to SMTP/PHP mail when an API send fails.
 * Instant failure alerts: email + Slack/Discord/webhook.
 * Routing rules by subject/recipient.
 * Inbound email webhook + `mailkite_smtp_inbound` hook + forwarding.
 * Domain Health (SPF/DMARC) with weekly drift alerts; weekly summary email.
 * Site Health tests, WP-CLI commands, settings export/import.
 * Open/click tracking toggles for MailKite sends; large attachments upload by URL.

#### 0.1.0

 * Initial release: MailKite API mailer, generic SMTP mailer, email log with redaction
   and resend, test emails, force-from, REST API.

## Meta

 *  Version **0.4.2**
 *  Last updated **17 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.2 or higher **
 *  Tested up to **7.1**
 *  PHP version ** 8.1 or higher **
 * Tags
 * [deliverability](https://wordpress.org/plugins/tags/deliverability/)[email](https://wordpress.org/plugins/tags/email/)
   [email log](https://wordpress.org/plugins/tags/email-log/)[smtp](https://wordpress.org/plugins/tags/smtp/)
   [wp-mail](https://wordpress.org/plugins/tags/wp-mail/)
 *  [Advanced View](https://wordpress.org/plugins/mailkite-smtp/advanced/)

## Ratings

No reviews have been submitted yet.

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

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

## Contributors

 *   [ mailkite ](https://profiles.wordpress.org/mailkite/)
 *   [ bucabay ](https://profiles.wordpress.org/bucabay/)

## Support

Got something to say? Need help?

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