Skip to content
Select theme
Get Started

Email Delivery (SMTP)

Summarize with AI

Email Delivery is a free WP PowerSuite module that sends WordPress mail through a real mailbox or delivery service — so password resets, form notifications, WooCommerce receipts, and system emails land in the inbox instead of spam.

No extra single-purpose SMTP plugin. Enable it from the Modules hub, connect your provider, and leave it off when a site does not need custom delivery. Product overview: Email Delivery.

Default PHP mail() on shared hosting is unreliable. Messages bounce, land in spam, or never leave the server. Agencies and store owners need:

  • Provider-grade delivery (SMTP or API) without stacking another plugin
  • Multiple From identities for brands, stores, or transactional domains
  • A clear Primary connection plus an optional Fallback path
  • OAuth for Google and Microsoft without shipping credentials through a third-party proxy
  • Domain health hints (MX, SPF, DKIM, DMARC) next to the connection workflow
  • Failure alerts and delivery webhooks that work with Email Logs

All of that lives inside WP PowerSuite — one suite, enable only what you need.

Fix WordPress email delivery without another plugin

Email Delivery is free in WP PowerSuite. Pair it with Pro Email Logs and Email Reports when you need history and digests.

View pricing
  • Site owners tired of missing password resets and contact-form mail
  • WooCommerce stores that need transactional receipts to arrive consistently
  • Agencies standardizing SMTP/API delivery across client sites
  • Teams using Gmail, Microsoft 365, SendGrid, Amazon SES, Mailgun, Brevo, or similar
  • Developers who want site-owned OAuth redirects and encrypted credential storage

Open WP PowerSuite → Email Delivery (admin.php?page=powersuite-email-delivery).

  • Create multiple connections, each with a unique From email
  • Route by matching the message From address; otherwise use the Primary connection
  • Set a Fallback connection for retry-safe failures after the primary attempt
  • Per connection: connection name, From email / name, Force From email, Force From name, Set Return-Path
  • Test Connection and a dedicated Test Email tab (HTML or plain; uses the real wp_mail path)
  • Import mail settings from popular SMTP plugins when migrating
  • Domain health sidebar with MX, SPF, DKIM, and DMARC hints
ProviderTransport
Custom SMTPSMTP
SendGridAPI
Amazon SESAPI
MailgunAPI
BrevoAPI
Gmail / Google WorkspaceOAuth
Microsoft 365 / OutlookOAuth
PostmarkAPI
MailjetAPI
MailerSendAPI
SMTP2GOAPI
ResendAPI
MandrillAPI
SparkPostAPI
Elastic EmailAPI
SendLayerAPI
SMTP.comAPI
NetcoreAPI
TurboSMTPAPI
MailerooAPI
EmailitAPI
Mail.babyAPI
PHP MailPHP Mail

Named providers use their API (or OAuth). Use Custom SMTP for host/port TLS or SSL relay. Jump to a provider setup guide below.

  • Redirect URI is your site: /?wpps_mail_auth=google or /?wpps_mail_auth=microsoft
  • Requires an admin session; uses PKCE/state
  • Tokens are stored per connection; use Connect / Disconnect in the connection form
  • Extra attempts before the provider accepts the message (retry_max_attempts, 0–2)
  • Fallback connection after a retry-safe primary failure (designated Fallback only)
  • Auto-resend failed mail (hourly cron via Email Logs when body logging is on)
  • Failure alerts by email and optional HTTPS webhook (Slack/Discord-compatible), rate-limited
  • Delivery webhooks for supported providers to update Email Logs statuses (/?wpps_mail_webhook={provider})
  • Email Simulation — log the full send path without contacting the provider (staging / dry-runs). Simulated sends are labeled in Email Logs and do not count as real successes.
  • Secrets are encrypted before storage
  • Where supported, API keys and OAuth client values can come from wp-config.php or environment variables (for example WP_POWERSUITE_AWS_* for Amazon SES)
  • Conflict detection warns when another email delivery plugin is also active
  • Test emails and plugin email footers follow White Label plugin name when White Label is enabled

When White Label is active, Email Delivery test emails use your custom plugin name for the subject, body, sign-off, and “Sent via …” footer. Upload a White Label logo to replace the default header mark; without a custom logo the stock product logo is suppressed.

Why WP PowerSuite instead of a standalone SMTP plugin

Section titled “Why WP PowerSuite instead of a standalone SMTP plugin”

Many sites solve deliverability with yet another plugin — more updates, more overlap, more risk. With WP PowerSuite you get Email Delivery as a modular free capability alongside 150+ other tools: enable it for a client handoff, disable it when the host already handles mail correctly, and keep Logs and Reports under WP PowerSuite Pro when you need visibility.

Learn more on the module page, browse all modules, or compare plans and pricing.

Turn it on when you want to:

  • Stop relying on unreliable host PHP mail()
  • Align From domains with SPF / DKIM / DMARC for forms and store email
  • Use Gmail, Microsoft 365, or a transactional API without a separate plugin
  • Keep Primary + Fallback paths for higher delivery resilience
  • Import settings from an older SMTP plugin during migration
  1. Go to WP PowerSuite → Modules and enable Email Delivery (SMTP).
  2. Open WP PowerSuite → Email Delivery.
  3. Add a connection and choose your provider (Custom SMTP, API, or OAuth).
  4. Enter credentials (or Connect for Google / Microsoft). Follow the provider setup guide for your mailer.
  5. Set From email / name, Force From options, and Return-Path as needed.
  6. Save, run Test Connection, then send a Test Email.
  7. Optionally set Primary / Fallback, retries, failure alerts, and delivery webhooks on the Settings / Overview tabs.
  8. Align DNS (SPF, DKIM, DMARC) using the domain health hints.

Every connection also needs a From email (and usually a verified domain with the provider). After credentials are saved, use Test Connection, then Test Email.

Use when you have classic SMTP host credentials (hosting mail, Google/Microsoft SMTP relay, or a provider’s SMTP endpoint).

  1. Choose Custom SMTP.
  2. Enter SMTP Host, Port (often 587 for TLS or 465 for SSL), and Encryption.
  3. Enable Use SMTP authentication when required; enter username and password.
  4. Set From email / name to match the mailbox or verified sender.
  5. Save → Test ConnectionTest Email.
  1. In SendGrid, go to Settings → API Keys and create a key with Mail Send permission.
  2. Verify your From address or domain under Settings → Sender Authentication.
  3. In Email Delivery, choose SendGrid, paste the API key, and set Region to Global or EU to match your account.
  4. Set WordPress From to a verified sender → Test Connection.

Dashboard: API Keys

New SES accounts start in the sandbox and can only send to verified addresses until production access is approved. Use IAM access keys — not SES SMTP username/password.

  1. In AWS Console, open Amazon SES in your region and verify your From domain or email.
  2. Create an IAM user with permission to send through SES, then create an access key.
  3. In Email Delivery, choose Amazon SES.
  4. Authentication:
    • Enter access keys below — paste Access key ID and Secret access key, or
    • Use wp-config.php / environment variables — define WP_POWERSUITE_AWS_ACCESS_KEY_ID and WP_POWERSUITE_AWS_SECRET_ACCESS_KEY (or host env vars AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY).
  5. Select the AWS region where identities are verified.
  6. Optional: Configuration set if you use delivery webhooks under Reliability.
  7. Request production access in SES when ready to email any recipient.

Docs: Verify identities · Leave the sandbox

  1. In Mailgun, create or open a sending domain and complete DNS verification.
  2. Copy a Private API key from API security settings.
  3. In Email Delivery, paste the private API key, enter the Sending domain (for example mg.example.com), and set Region (US or EU) to match where the domain was created.
  4. Set From to an address on that domain → test.

Dashboard: API security · Domains

  1. In Brevo, open SMTP & API → API Keys and create a v3 API key.
  2. Verify the sender domain / From address in Brevo.
  3. Paste the API key into the Brevo connection, set From, then test.

Dashboard: API Keys

Sends via the Gmail API (not SMTP). No app password required.

  1. In Google Cloud Console, create or select a project and enable the Gmail API.
  2. Configure the OAuth consent screen. For personal Gmail, add yourself as a test user while the app is in Testing.
  3. Create OAuth client credentials of type Web application.
  4. Copy the Redirect URI shown in Email Delivery into Authorized redirect URIs (pattern: https://yoursite.com/?wpps_mail_auth=google).
  5. Paste Client ID and Client secret into the connection form and save.
  6. Click Connect Google and approve gmail.send + account email.
  7. Set WordPress From to the connected Google account (or an allowed Workspace alias).

Guides: Gmail API sending · OAuth scopes

Uses Microsoft Graph sendMail with delegated OAuth. Messages are sent as that mailbox and saved to Sent Items.

  1. In Microsoft Entra ID → App registrations, create a registration (or use an existing app).
  2. Add a Web platform redirect URI matching the value on the connection screen (/?wpps_mail_auth=microsoft).
  3. Under API permissions, add Microsoft Graph delegated: Mail.Send, User.Read, and offline_access. Grant admin consent if required.
  4. Create a client secret, then paste Application (client) ID, secret, and Tenant (common or your directory tenant ID).
  5. Save the connection, click Connect Microsoft, and sign in with the mailbox that should send WordPress email.
  6. Set From to that mailbox address (shared mailbox / send-as needs extra Graph rights and is not configured here).

Docs: Graph sendMail · Delegated auth

  1. In Postmark, open your server and copy the Server API Token.
  2. Confirm your From domain / signature is verified.
  3. Paste the server token; leave Message stream as outbound for transactional mail (or your custom stream ID).
  4. Set From and test.

Dashboard: API tokens

  1. Open Mailjet API Key Management.
  2. Copy both the API key and Secret key.
  3. Paste both into the Mailjet connection, verify the sender, then test.

Dashboard: API keys

  1. In MailerSend, create an API token with send permission.
  2. Verify the sending domain.
  3. Paste the API token, set From on that domain, then test.

Dashboard: API tokens

  1. In SMTP2GO, create an API key under Sending → API Keys.
  2. Paste the key and select Region (Global, US, EU, or AU) to match your account.
  3. Verify the sender domain, set From, then test.

Dashboard: API keys

  1. Create an API key in the Resend dashboard.
  2. Verify your domain.
  3. Paste the API key, set From on the verified domain, then test.

Dashboard: API keys

  1. In Mandrill settings, create an API key.
  2. Use a Mailchimp Transactional key — not a Marketing API key.
  3. Paste the key, set a verified From, then test.

Dashboard: Mandrill settings

  1. Create an API key with send rights in SparkPost.
  2. Paste the key and set Region (US or EU) when the key does not include a region.
  3. Verify the sending domain, set From, then test.

Dashboard: API keys

  1. Create an API key under Elastic Email API settings.
  2. Verify the From domain / email.
  3. Paste the key into the Elastic Email connection and test.

Dashboard: Manage API

  1. Open SendLayer Settings → API Keys and create a key.
  2. Verify your domain in SendLayer.
  3. Paste the API key, set From, then test.

Dashboard: SendLayer console

  1. In your SMTP.com account, create or copy an API key.
  2. Enter the Channel name used for sending.
  3. Paste both into the SMTP.com connection, set From, then test.

Dashboard: my.smtp.com

  1. Open Netcore / Pepipost integration settings and copy the API key.
  2. Set Region to Non-EU or EU to match your account.
  3. Verify the sender, set From, then test.

Dashboard: Integration

  1. In the TurboSMTP dashboard, create API credentials.
  2. Copy the Consumer key and Consumer secret (the secret is shown only once).
  3. Select Region (Global or EU).
  4. Paste both values, set From, then test.

Dashboard: TurboSMTP

  1. In Maileroo, open Domains and create a Sending Key.
  2. Complete domain DNS as required by Maileroo.
  3. Paste the sending key, set From on that domain, then test.

Dashboard: Domains

  1. Open the Emailit dashboard and create an API key.
  2. Verify the sender domain.
  3. Paste the key, set From, then test.

Dashboard: Emailit

  1. Create or copy an API key from my.interserver.net → Settings → API Access.
  2. Set From to an address on a domain you control.
  3. Authorize the domain for API (required — without this, sends fail with “domain is not configured for API”):
    • Add a TXT record named _mb.yourdomain.com (or _mb in your DNS panel).
    • Set the value to your Mail.baby username (usually starts with mb).
    • Ensure SPF includes include:spf-c.mailbaby.net.
  4. Wait for DNS to propagate, then send a test email. Test Connection only checks the key; real sends need DNS.

Guide: mail.baby/apiauth · API docs

Uses the server’s PHP mail() function with no external credentials. Useful only as a last resort or for local testing — deliverability is usually weaker than SMTP/API providers.

  1. Choose PHP Mail.
  2. Set From email / name.
  3. Save and send a test (check spam folders).
  • Save a connection, click Test Connection.
    ✅ Success message from the provider or SMTP handshake.
  • Send a Test Email to your inbox.
    ✅ Message arrives (check spam) with the expected From address when Force From is on.
  • Trigger a password reset or form notification.
    ✅ Real site mail uses the routed connection.
  • Fail the primary path (invalid key) with Fallback enabled.
    ✅ Fallback connection is used for retry-safe failures.
  • Enable Email Logs and confirm a Sent row after a successful send.
    ✅ Log appears with provider metadata.

If something fails, confirm no second delivery plugin is fighting for PHPMailer, then re-check host/port/encryption or API credentials.

  • Prefer API or OAuth providers for transactional volume; use Custom SMTP when your host or mailbox requires relay.
  • Keep Force From email on when the provider requires a verified sender.
  • Leave Set Return-Path on unless your provider documents a different bounce address.
  • Start with 1 extra attempt and a Fallback connection for production stores.
  • Turn on Email Logs (Pro) before enabling auto-resend of failed mail.
  • Use failure alert webhooks for ops channels; keep SMTP/API debug off after troubleshooting.
  • Access denied during a Temporary Login. Expected - vendor sessions cannot change how mail is sent. Ask the site owner to edit Email Delivery with a normal administrator account.
  • Another email delivery plugin is active. Disable the other plugin or Email Delivery so only one owns transport.
  • Test Connection fails. Recheck credentials, region (Amazon SES), encryption/port for Custom SMTP, and that the From domain is verified with the provider.
  • OAuth Connect fails. Confirm the redirect URI matches your site home URL with ?wpps_mail_auth=google or microsoft, and that you are logged in as an admin.
  • Mail still fails after 48 hours. Use the admin failure notice links to open settings or failed logs; enable Email Logs for detail.
  • Domain mismatch warning. Align From domain with the authenticated account and verify SPF / DKIM / DMARC.
  • Auto-resend does nothing. Enable Email Logs with body logging; auto-resend depends on stored content.
  • Webhook statuses not updating. Confirm /?wpps_mail_webhook={provider} is reachable and the webhook secret matches.
  • Mail.baby “domain is not configured for API”. Add the _mb TXT record and SPF include before sending.

Prefer the command line? You can turn this module on or off with WP-CLI instead of the dashboard:

Terminal window
# Turn the module on
wp powersuite module enable email-smtp
# Turn the module off
wp powersuite module disable email-smtp
# Check whether it is on, its category, and where its settings live
wp powersuite module get email-smtp

Managing more than one site? Add --url=https://example.com to point a command at one site. If this is a Pro module, install WP PowerSuite Pro and activate your license first. New to WP-CLI? See the full command guide.

What does Email Delivery do?

It routes WordPress mail through Custom SMTP or major API/OAuth providers, with multiple connections, Primary and Fallback routing, retries, webhooks, failure alerts, and test tools — inside WP PowerSuite.

Is Email Delivery free?

Yes. It is a free Site Tools module. Email Logs and Email Reports are Pro modules that pair with it.

Which providers are supported?

Custom SMTP, SendGrid, Amazon SES, Mailgun, Brevo, Gmail / Google Workspace, Microsoft 365 / Outlook, Postmark, Mailjet, MailerSend, SMTP2GO, Resend, Mandrill, SparkPost, Elastic Email, SendLayer, SMTP.com, Netcore, TurboSMTP, Maileroo, Emailit, Mail.baby, and PHP Mail.

Can I use more than one connection?

Yes. Each connection needs a unique From email. Routing matches the message From, then falls back to the Primary connection. You can also designate a Fallback connection.

How does Google or Microsoft OAuth work?

Connect uses a site-owned redirect on your home URL with ?wpps_mail_auth=google or microsoft. Tokens are stored per connection after an admin completes the flow.

Are API keys and passwords stored in plain text?

No. Credentials are encrypted before storage. Supported secrets can also be loaded from wp-config.php or environment variables.

Can I import settings from another SMTP plugin?

Yes. Email Delivery can import mail settings from several popular SMTP plugins so you can migrate without retyping everything.

Do I need Email Logs for webhooks?

Delivery webhooks update statuses in Email Logs. Enable the Email Logs Pro module to inspect Accepted, Delivered, Bounced, and related events.

How do I turn Email Delivery off?

Go to WP PowerSuite → Modules, find Email Delivery (SMTP), and toggle it off. Disabled modules do not load at runtime.

Developer notes (hooks & filters)

Source: modules/email-smtp/module.php, provider registry, connection store, OAuth helpers. Boot: critical · context: admin, frontend, ajax, cron.

Notable filters/actions: wp_powersuite_email_delivery_provider_registry, wp_powersuite_email_delivery_message, wp_powersuite_email_delivery_before_send, wp_powersuite_email_delivery_after_send, wp_powersuite_email_delivery_failed, wp_powersuite_email_delivery_log_data, wp_powersuite_email_delivery_log_enrich, wp_powersuite_skip_smtp_mail_args. Admin AJAX includes test connection/email, connection save/delete/roles, domain health, import, and OAuth connect/disconnect. Webhook endpoint: /?wpps_mail_webhook={provider}. OAuth query: /?wpps_mail_auth={google|microsoft}.

Ready for reliable WordPress email?

Get WP PowerSuite, enable free Email Delivery, and add Pro Logs and Reports when you need full visibility.

Get WP PowerSuite