Docs Product page Dashboard
Docs Admin SMTP

SMTP

v1.2.0

Send every WordPress email through a real SMTP server so it actually lands — and keep a full, searchable log of everything that goes out.

Included in every plan Updated July 2026

Overview

The SMTP module routes all WordPress email through the mail server you choose, then records each message in a built-in log.

By default WordPress hands email to the server’s built-in PHP mail() function, which most hosts either block or send straight to spam. This module points wp_mail() at a proper SMTP server — your Google Workspace, Microsoft 365, SendGrid, Mailgun, Amazon SES, Brevo or Postmark account — so password resets, order emails, form notifications and everything else are delivered reliably and authenticated from your own domain.

✓ SMTP is active — WordPress email is sent through smtp.gmail.com:465.
Mailer
Choose who delivers your email. Pick a provider to fill in its SMTP settings.
Default (none)
Google / Gmail
Microsoft 365
awsAmazon SES
SGSendGrid
@Mailgun
bBrevo
PPostmark
The Mailer picker — choose a provider and its SMTP host, port and encryption fill in automatically.
  • Route all WordPress email through any SMTP provider
  • Pick from 19 built-in mailers (Gmail, Microsoft 365, SendGrid, SES…) that fill in the settings for you
  • Set the From address and name once, and optionally force them everywhere
  • A full email log — status, transport, headers and a rendered preview
  • A Statistics tab with a per-day graph of what’s sent and what fails
  • A one-click test email that tells you exactly what went wrong
  • Keeps the password out of the database with a wp-config constant
Why deliverability mattersIf customers say “I never got the email”, it’s almost always because the site is using PHP mail(). Sending through authenticated SMTP is the single biggest fix for missing WordPress email.

Requirements & compatibility

It runs on any WordPress site — you only need an SMTP account to send through.

RequirementMinimumRecommended
WordPress6.06.5 or newer
PHP7.48.1 or newer
SMTP accountAny SMTP hostA dedicated sending service (SendGrid, SES, Mailgun…)
Outbound port587 or 465 openConfirm your host allows outbound SMTP
Works with every providerAnything that speaks SMTP works: Google Workspace, Microsoft 365 / Outlook, SendGrid, Mailgun, Amazon SES, Brevo, Postmark, Zoho, or your host’s own mail server.

Choose your mailer

Nineteen mailers are built in — pick one and its SMTP host, port and encryption are filled in for you; you only add the login.

Every mailer is an SMTP preset, so you keep one simple, reliable transport no matter who delivers your mail. Selecting a provider also shows the exact credential it expects — an app password, an API key or a token.

MailerWhat you’ll need
Google / GmailAn App Password (with 2-Step Verification on)
Microsoft 365 / OutlookA mailbox with SMTP AUTH, or an app password
Amazon SESSES SMTP credentials (set your region in the host)
SendGridUsername apikey and your API key
MailgunThe domain’s SMTP username and password
BrevoYour login plus an SMTP key
PostmarkA Server API token (used as both user and password)
Zoho · SMTP2GO · SparkPost · Mailjet · MailerSend · Resend · Elastic Email · SendLayer · SMTP.com · MandrillTheir SMTP username or API key
Other SMTPAny host, port, encryption and login you enter yourself
“Default (none)” means offThe first tile leaves WordPress on PHP mail(). Pick any real provider to switch SMTP on.

Installation & activation

SMTP ships inside WPStack — switch it on, pick your provider, and send a test.

1

Activate the module

In WPStack → Modules, flip SMTP on. An SMTP item appears in the WPStack menu.

2

Pick your provider

Go to WPStack → SMTP and choose your mailer — Gmail, Microsoft 365, SendGrid, Amazon SES and more. The host, port and encryption are filled in for you; just add your username and password.

3

Save & send a test

Click Save settings, then use Send a test email. A green banner confirms it went through SMTP.

Pick a mailer to switch SMTP onWhile Default (none) is selected, WordPress keeps using PHP mail() — messages may be logged as “sent” but never actually arrive. Choosing any provider turns SMTP on; the settings screen shows an amber banner while it’s inactive.

Connecting your SMTP server

Pick your provider from the mailer grid and its host, port and encryption are filled in automatically — you only add your login.

SettingTypeDefaultWhat it does
MailerpickerDefault (none)Choose a provider to auto-fill its SMTP host, port and encryption — or “Other SMTP” for a custom server.
SMTP hosttextYour provider’s server, e.g. smtp.gmail.com or smtp.sendgrid.net.
Portnumber587587 with TLS · 465 with SSL · 25 with no encryption.
EncryptionselectTLSNone, SSL or TLS — match it to the port your provider expects.
AuthenticationtoggleonLog in with a username & password (almost always required).
UsernametextUsually your full email address, or an API-key username like apikey.
PasswordpasswordApp password or API key. Stored in the database, or set via a wp-config constant.
From emailemailThe address every message is sent from — use one on your own domain.
From nametextThe sender name shown in the inbox, e.g. your site or business name.
Force FromtoggleonAlways apply the From above, overriding what other plugins set.
Port and encryption go togetherUse 587 + TLS for most providers, or 465 + SSL if TLS is refused. A timeout on send almost always means the port is blocked or the encryption doesn’t match.

The email log

Every message WordPress sends is recorded, so you can prove what went out and why anything failed.

Email log
15 logged emails.
Clear log
DateStatusViaToSubject
2026-07-24
18:08:55
sentSMTPowner@example.comNew Booking – Spa on 29/07/2026
2026-07-24
18:08:54
sentSMTPjane@example.comBooking Confirmed – Spa
2026-07-24
04:19:19
sentSMTPjane@example.comNew Booking – Spa on 29/07/2026
2026-07-24
04:08:18
sentSMTPadmin@example.comPassword reset request
2026-07-24
04:07:50
failedSMTPadmin@example.comPassword reset request
2026-07-24
04:01:23
sentSMTPadmin@example.comPassword reset request
The email log — every message with its status, transport (SMTP vs PHP mail) and subject.
  • One row per email with a sent or failed status and the exact error on failure.
  • A Via column shows the transport — SMTP (delivered) or PHP mail (built-in, usually not delivered).
  • Open any row for the full detail: from, to, cc/bcc, subject, headers and a rendered HTML preview.
  • Turn logging on or off, and set how many days to keep — old rows are pruned automatically each day.
  • Clear log empties it in one click.
Spot silent failures at a glanceIf the Via column says PHP mail instead of SMTP, WordPress bypassed your server — that’s your cue to check that a provider is selected (not “Default (none)”) and the host is set.

Email statistics

The Statistics tab turns your log into a per-day picture of what’s going out — and what’s failing.

All emails
15 total13 sent2 failed87% delivered
02468Jun 27Jun 30Jul 3Jul 6Jul 9Jul 12Jul 15Jul 18Jul 21Jul 24Jul 26
SubjectTotalSentFailed
Password reset request1192
Booking Confirmed – Spa220
New Booking – Spa on 29/07/2026220
The Statistics tab — emails per day, delivery rate and a top-subjects breakdown.
  • A line chart of emails per day — sent (green) against failed (red).
  • Headline totals: total, sent, failed and your delivery rate.
  • Switch the window between the last 7, 30 or 90 days.
  • A Top subjects table showing which emails send most — and which fail.
Built from your logThe graph is drawn from the email log, so keep logging on to watch it fill in.

Keeping the password safe

For extra safety you can keep the SMTP password out of the database entirely.

Define WPSTACK_SMTP_PASS in wp-config.php. When present it takes precedence over the stored value, the password field is hidden in the admin, and the secret never lives in the database or a backup.

phpwp-config.php
// Keep the SMTP password out of the database
define( 'WPSTACK_SMTP_PASS', 'your-app-password-or-api-key' );
Use app passwords, not your loginFor Gmail and Microsoft 365, create a dedicated app password (or API key) rather than your account password — it’s scoped to mail and easy to revoke.

Frequently asked questions

Yes — this module sends through a mail server, so you need SMTP credentials from a provider (your email host, Google, Microsoft, SendGrid, SES, Mailgun and so on). It doesn’t send mail on its own.

Check the email log’s Via column. If it says “PHP mail”, SMTP isn’t active — enable it and set a host. If it says “failed”, the row shows the exact error, usually a wrong port, encryption or password.

It configures the standard wp_mail() pipeline, so any plugin that sends through WordPress is routed automatically. Run only one SMTP plugin at a time to avoid conflicting From settings.

Yes — subject, headers and the message body (capped so large emails can’t bloat the table), with an HTML preview in the detail view. Set a retention window to auto-delete old rows.

You can store it in the database, or define WPSTACK_SMTP_PASS in wp-config.php so it never touches the database. Use a provider app password or API key rather than your main login.

Use 587 with TLS for most providers, or 465 with SSL if needed. Port 25 (no encryption) is widely blocked and best avoided.

Changelog

1.2.0
July 2026
newStatistics tab — a per-day line chart of sent vs failed, delivery-rate totals, a 7/30/90-day range and a top-subjects breakdown.
1.1.0
July 2026
newProvider picker — choose Gmail, Microsoft 365, SendGrid, Amazon SES, Mailgun, Brevo, Postmark and more, and the SMTP host/port/encryption are filled in for you.
1.0.6
July 2026
impEmail log detail view with rendered HTML preview and a clear SMTP / PHP-mail transport column.
impFast-fail connection timeout so a bad host can’t hang the whole request.
1.0.0
Jun 2026
newRoute all WordPress email through SMTP, with sender overrides, a test email and an email log.
Was this page helpful?