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.
Why teams choose it
Section titled “Why teams choose it”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 pricingWho it is for
Section titled “Who it is for”- 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
What you can do
Section titled “What you can do”Open WP PowerSuite → Email Delivery (admin.php?page=powersuite-email-delivery).
Connections and routing
Section titled “Connections and routing”- 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_mailpath) - Import mail settings from popular SMTP plugins when migrating
- Domain health sidebar with MX, SPF, DKIM, and DMARC hints
Supported providers
Section titled “Supported providers”| Provider | Transport |
|---|---|
| SMTP | |
| API | |
| API | |
| API | |
| API | |
| OAuth | |
| OAuth | |
| API | |
| API | |
| API | |
| API | |
| API | |
| API | |
| API | |
| API | |
| API | |
| API | |
| API | |
| API | |
| API | |
| API | |
| API | |
| PHP 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.
OAuth (Google and Microsoft)
Section titled “OAuth (Google and Microsoft)”- Redirect URI is your site:
/?wpps_mail_auth=googleor/?wpps_mail_auth=microsoft - Requires an admin session; uses PKCE/state
- Tokens are stored per connection; use Connect / Disconnect in the connection form
Reliability and alerts
Section titled “Reliability and alerts”- 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.
Credentials and security
Section titled “Credentials and security”- 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
White Label
Section titled “White Label”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.
When to enable it
Section titled “When to enable it”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
When to leave it off
Section titled “When to leave it off”How to get started
Section titled “How to get started”- Go to WP PowerSuite → Modules and enable Email Delivery (SMTP).
- Open WP PowerSuite → Email Delivery.
- Add a connection and choose your provider (Custom SMTP, API, or OAuth).
- Enter credentials (or Connect for Google / Microsoft). Follow the provider setup guide for your mailer.
- Set From email / name, Force From options, and Return-Path as needed.
- Save, run Test Connection, then send a Test Email.
- Optionally set Primary / Fallback, retries, failure alerts, and delivery webhooks on the Settings / Overview tabs.
- Align DNS (SPF, DKIM, DMARC) using the domain health hints.
Provider setup guides
Section titled “Provider setup guides”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.
Custom SMTP
Section titled “Custom SMTP”Use when you have classic SMTP host credentials (hosting mail, Google/Microsoft SMTP relay, or a provider’s SMTP endpoint).
- Choose Custom SMTP.
- Enter SMTP Host, Port (often
587for TLS or465for SSL), and Encryption. - Enable Use SMTP authentication when required; enter username and password.
- Set From email / name to match the mailbox or verified sender.
- Save → Test Connection → Test Email.
SendGrid
Section titled “SendGrid”- In SendGrid, go to Settings → API Keys and create a key with Mail Send permission.
- Verify your From address or domain under Settings → Sender Authentication.
- In Email Delivery, choose SendGrid, paste the API key, and set Region to Global or EU to match your account.
- Set WordPress From to a verified sender → Test Connection.
Dashboard: API Keys
Amazon SES
Section titled “Amazon SES”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.
- In AWS Console, open Amazon SES in your region and verify your From domain or email.
- Create an IAM user with permission to send through SES, then create an access key.
- In Email Delivery, choose Amazon SES.
- 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_IDandWP_POWERSUITE_AWS_SECRET_ACCESS_KEY(or host env varsAWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY).
- Select the AWS region where identities are verified.
- Optional: Configuration set if you use delivery webhooks under Reliability.
- Request production access in SES when ready to email any recipient.
Docs: Verify identities · Leave the sandbox
Mailgun
Section titled “Mailgun”- In Mailgun, create or open a sending domain and complete DNS verification.
- Copy a Private API key from API security settings.
- 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. - Set From to an address on that domain → test.
Dashboard: API security · Domains
- In Brevo, open SMTP & API → API Keys and create a v3 API key.
- Verify the sender domain / From address in Brevo.
- Paste the API key into the Brevo connection, set From, then test.
Dashboard: API Keys
Gmail / Google Workspace (OAuth)
Section titled “Gmail / Google Workspace (OAuth)”Sends via the Gmail API (not SMTP). No app password required.
- In Google Cloud Console, create or select a project and enable the Gmail API.
- Configure the OAuth consent screen. For personal Gmail, add yourself as a test user while the app is in Testing.
- Create OAuth client credentials of type Web application.
- Copy the Redirect URI shown in Email Delivery into Authorized redirect URIs (pattern:
https://yoursite.com/?wpps_mail_auth=google). - Paste Client ID and Client secret into the connection form and save.
- Click Connect Google and approve
gmail.send+ account email. - Set WordPress From to the connected Google account (or an allowed Workspace alias).
Guides: Gmail API sending · OAuth scopes
Microsoft 365 / Outlook (OAuth)
Section titled “Microsoft 365 / Outlook (OAuth)”Uses Microsoft Graph sendMail with delegated OAuth. Messages are sent as that mailbox and saved to Sent Items.
- In Microsoft Entra ID → App registrations, create a registration (or use an existing app).
- Add a Web platform redirect URI matching the value on the connection screen (
/?wpps_mail_auth=microsoft). - Under API permissions, add Microsoft Graph delegated:
Mail.Send,User.Read, andoffline_access. Grant admin consent if required. - Create a client secret, then paste Application (client) ID, secret, and Tenant (
commonor your directory tenant ID). - Save the connection, click Connect Microsoft, and sign in with the mailbox that should send WordPress email.
- Set From to that mailbox address (shared mailbox / send-as needs extra Graph rights and is not configured here).
Docs: Graph sendMail · Delegated auth
Postmark
Section titled “Postmark”- In Postmark, open your server and copy the Server API Token.
- Confirm your From domain / signature is verified.
- Paste the server token; leave Message stream as
outboundfor transactional mail (or your custom stream ID). - Set From and test.
Dashboard: API tokens
Mailjet
Section titled “Mailjet”- Open Mailjet API Key Management.
- Copy both the API key and Secret key.
- Paste both into the Mailjet connection, verify the sender, then test.
Dashboard: API keys
MailerSend
Section titled “MailerSend”- In MailerSend, create an API token with send permission.
- Verify the sending domain.
- Paste the API token, set From on that domain, then test.
Dashboard: API tokens
SMTP2GO
Section titled “SMTP2GO”- In SMTP2GO, create an API key under Sending → API Keys.
- Paste the key and select Region (Global, US, EU, or AU) to match your account.
- Verify the sender domain, set From, then test.
Dashboard: API keys
Resend
Section titled “Resend”- Create an API key in the Resend dashboard.
- Verify your domain.
- Paste the API key, set From on the verified domain, then test.
Dashboard: API keys
Mandrill (Mailchimp Transactional)
Section titled “Mandrill (Mailchimp Transactional)”- In Mandrill settings, create an API key.
- Use a Mailchimp Transactional key — not a Marketing API key.
- Paste the key, set a verified From, then test.
Dashboard: Mandrill settings
SparkPost
Section titled “SparkPost”- Create an API key with send rights in SparkPost.
- Paste the key and set Region (US or EU) when the key does not include a region.
- Verify the sending domain, set From, then test.
Dashboard: API keys
Elastic Email
Section titled “Elastic Email”- Create an API key under Elastic Email API settings.
- Verify the From domain / email.
- Paste the key into the Elastic Email connection and test.
Dashboard: Manage API
SendLayer
Section titled “SendLayer”- Open SendLayer Settings → API Keys and create a key.
- Verify your domain in SendLayer.
- Paste the API key, set From, then test.
Dashboard: SendLayer console
SMTP.com
Section titled “SMTP.com”- In your SMTP.com account, create or copy an API key.
- Enter the Channel name used for sending.
- Paste both into the SMTP.com connection, set From, then test.
Dashboard: my.smtp.com
Netcore (Pepipost)
Section titled “Netcore (Pepipost)”- Open Netcore / Pepipost integration settings and copy the API key.
- Set Region to Non-EU or EU to match your account.
- Verify the sender, set From, then test.
Dashboard: Integration
TurboSMTP
Section titled “TurboSMTP”- In the TurboSMTP dashboard, create API credentials.
- Copy the Consumer key and Consumer secret (the secret is shown only once).
- Select Region (Global or EU).
- Paste both values, set From, then test.
Dashboard: TurboSMTP
Maileroo
Section titled “Maileroo”- In Maileroo, open Domains and create a Sending Key.
- Complete domain DNS as required by Maileroo.
- Paste the sending key, set From on that domain, then test.
Dashboard: Domains
Emailit
Section titled “Emailit”- Open the Emailit dashboard and create an API key.
- Verify the sender domain.
- Paste the key, set From, then test.
Dashboard: Emailit
Mail.baby
Section titled “Mail.baby”- Create or copy an API key from my.interserver.net → Settings → API Access.
- Set From to an address on a domain you control.
- 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_mbin your DNS panel). - Set the value to your Mail.baby username (usually starts with
mb). - Ensure SPF includes
include:spf-c.mailbaby.net.
- Add a TXT record named
- 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
PHP Mail
Section titled “PHP Mail”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.
- Choose PHP Mail.
- Set From email / name.
- Save and send a test (check spam folders).
How to verify it works
Section titled “How to verify it works”- 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.
Recommended settings
Section titled “Recommended settings”- 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.
Troubleshooting
Section titled “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=googleormicrosoft, 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
_mbTXT record and SPF include before sending.
Manage with WP-CLI
Section titled “Manage with WP-CLI”Prefer the command line? You can turn this module on or off with WP-CLI instead of the dashboard:
# Turn the module onwp powersuite module enable email-smtp
# Turn the module offwp powersuite module disable email-smtp
# Check whether it is on, its category, and where its settings livewp powersuite module get email-smtpManaging 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}.
Related modules
Section titled “Related modules”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