
MailKite SMTP – Multi-Provider SMTP with Failover, Email Logs & Inbound Email
by mailkite
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.
- 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:
- 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. - 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.
- 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.phpconstants (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 · Privacy policy - 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 · Privacy policy - 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 · Privacy policy - Mailgun — host
api.mailgun.net, orapi.eu.mailgun.netwhen 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 · 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 · Privacy policy - Discord — host
discord.com, when you paste a Discord webhook URL. Terms of service · Privacy policy - 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.