SDS SMTP
Security-first WordPress email delivery through authenticated SMTP or Microsoft Graph, with safe fallback routing, encrypted credentials, email logging, diagnostics, and optional failure alerts.
- Version
- 0.2.20
- Updated
- WordPress
- Requires 6.5+
- Tested up to 7.1
- PHP
- Requires 8.1+
- Edition
- Core
- Maintenance
- Active
Overview
SDS SMTP gives WordPress administrators a controlled alternative to relying on the web server’s default mail configuration. It can deliver mail through either an authenticated Primary SMTP connection or Microsoft Graph using delegated OAuth. Only one Primary transport is active at a time, and switching transports retains the inactive configuration for later use.
An optional independent Fallback SMTP connection can protect delivery when the Primary transport fails before confirmed message acceptance. SDS SMTP deliberately refuses to fail over after an uncertain outcome that could otherwise produce a duplicate email.
Built-in logging, failure and recovery monitoring, SMTP connectivity tests, DNS authentication diagnostics, and optional out-of-band alerts provide operational visibility without requiring a separate provider SDK or remote management service.
Features
Primary SMTP delivery
Route WordPress mail through a custom authenticated SMTP server using STARTTLS or SMTPS.
Microsoft Graph OAuth
Use Microsoft Graph v1.0 with delegated Mail.Send authorization instead of Microsoft Basic SMTP authentication
SMTP provider presets
Quickly fill recommended connection settings for Purelymail, Brevo, SendGrid, Mailgun US and EU, Postmark Transactional, and regional Amazon SES endpoints.
Independent Fallback SMTP
Protect either Primary SMTP or Microsoft Graph with a separately configured fallback server.
Duplicate-aware failover
Fallback is attempted only after a definite safe-to-retry Primary failure. Uncertain submission outcomes are never replayed automatically.
Shared sender identity
Apply a consistent From address and From name across Primary SMTP, Microsoft Graph, and Fallback SMTP.
Email logging
Record delivery status, transport, recipients, subject, timing, attachment count, and bounded diagnostic information.
Optional encrypted content logging
Administrators may enable encrypted storage of message bodies, headers, and attachment names when detailed troubleshooting is required.
Failure and recovery monitoring
Aggregate related failures into incidents, detect later recovery, and prevent repetitive recovery notices.
Notification Channels
Optional alerts through Pushover, ntfy, Telegram, Discord, and Slack.
Testing and diagnostics
Direct Primary, Fallback, Graph, and Notification Channel tests plus SMTP connectivity and SPF, DKIM, and DMARC diagnostics.
Accessible administration
Full-width responsive SDS interface, keyboard-operable disclosure cards, clear status indicators, and unsaved-change protection.
Translation ready
Uses native WordPress internationalization with a packaged translation template and no runtime translation service.
Verified uninstall cleanup
Supports complete removal of plugin-owned settings, logs, credentials, scheduled events, capabilities, and managed encryption keys.
Why SDS
Conservative delivery decisions
SDS SMTP prioritizes avoiding duplicate messages. Fallback is used only when the Primary transport has definitely failed before acceptance. A timeout, lost connection, Microsoft Graph server error, or other uncertain post-submission result is not automatically replayed.
Credentials treated as secrets
Stored passwords, webhook credentials, Microsoft client secrets, and OAuth tokens are authenticated-encrypted. Stored secret values are never rendered back into the WordPress administration interface.
Provider-neutral architecture
SDS SMTP uses WordPress’s bundled PHPMailer and standard SMTP or Microsoft Graph interfaces. It does not ship duplicate mail libraries, provider SDKs, affiliate routing, hidden remote configuration, or a proprietary OAuth relay.
Operational evidence without unnecessary exposure
Email logs, Status checks, connectivity tests, DNS diagnostics, and failure incidents provide actionable information while keeping raw authentication exchanges and SMTP transcripts out of the log.
Features remain administrator controlled
Fallback delivery, full-content logging, diagnostic tools, Microsoft Graph, and every external Notification Channel are deliberately configured by the administrator. Notification Channels and Microsoft Graph are Off by default on a fresh installation.
Security & Privacy
SDS SMTP handles email content, recipient information, authentication credentials, and external service connections. Its security model emphasizes authenticated encryption, least-privilege authorization, verified transport security, privacy-conscious logging, and conservative failover behavior.
Authenticated credential encryption
SMTP passwords, Microsoft client secrets and OAuth tokens, and Notification Channel credentials are protected with XChaCha20-Poly1305 authenticated encryption through PHP Sodium. SDS SMTP does not provide a plaintext or Base64-only storage fallback.
Encryption keys outside the database
On supported hosting configurations, SDS SMTP creates its SMTP master key outside both the WordPress directory and public web root. The master key is not stored in the WordPress database. Advanced installations may supply an externally managed key through documented configuration constants.
Separate Notification Channel encryption
Pushover, ntfy, Telegram, Discord, and Slack credentials use a separate 256-bit master key from SMTP and Microsoft Graph credentials. The Notification Channels key is created only when the first channel secret is saved.
Stored secrets are never displayed
Saved SMTP passwords, Microsoft client secrets, OAuth tokens, notification credentials, and webhook tokens are never rendered back into the WordPress administration interface. Administrators deliberately replace or remove a stored secret without revealing its existing value.
Verified transport security
Remote SMTP requires STARTTLS or SMTPS with peer and hostname certificate verification. Supported HTTP integrations use HTTPS, certificate verification, disabled redirects, bounded responses, and short timeouts.
Least-privilege Microsoft authorization
Microsoft Graph uses the OAuth authorization-code flow with PKCE, a one-time expiring state value, user binding, and exact redirect, application, and tenant binding. SDS SMTP requests only delegated Mail.Send and offline_access; it does not request User.Read or application-wide mailbox access.
Conservative duplicate prevention
Fallback SMTP is attempted only after a definite Primary failure that occurred before confirmed message acceptance. Timeouts, connection loss, Microsoft Graph server errors, and other uncertain submission outcomes are not replayed automatically because the original provider may already have accepted the message.
Privacy-conscious email logging
Logging defaults to metadata only. Stored metadata includes recipient addresses, subject, transport, delivery status, timing, and bounded diagnostic fields. Message bodies, headers, and attachment names are stored only when an administrator enables Full logging, and that optional content is authenticated-encrypted at rest.
Bounded retention and cleanup
Email logs default to 30-day retention and a maximum of 10,000 entries. Administrators can adjust the limits, delete individual entries, or disable logging. Scheduled cleanup removes records exceeding the configured age or entry limit using bounded database work.
Minimal notification payloads
Failure and recovery notifications contain only bounded operational information such as the website hostname, incident category, duration, and recovery state. They exclude email recipients, subjects, message bodies, SMTP responses, credentials, and WordPress administration URLs.
Protected administrative actions
SDS SMTP uses a dedicated WordPress management capability. State-changing administration requests require both authorization and a WordPress nonce. The external Microsoft OAuth callback requires the same capability plus verified one-time state and PKCE values.
Fail-closed configuration handling
Malformed credentials, settings, encryption state, or overlapping Primary transports are not silently repaired or used. SDS SMTP disables the affected operation and reports the problem rather than guessing at a configuration that could expose credentials or misroute email.
No telemetry
SDS SMTP does not send analytics, usage statistics, activation reports, diagnostic reports, email metadata, credentials, or site activity to SDS International. Communications with configured mail providers and enabled Notification Channels are functional service requests, not telemetry.
Verified data removal
Deactivation does not delete persistent data. When complete deletion is enabled, uninstall removes and verifies plugin-owned settings, logs, encrypted credentials, notification state, scheduled events, capabilities, and SDS-managed encryption keys. Administrator-managed external key files are never deleted.
Technical Details
| Current version | 0.2.20 |
|---|---|
| WordPress requirement | 6.5+ |
| WordPress tested up to | 7.1 |
| PHP requirement | 8.1+ |
| Edition | Core |
| Multisite support | Not tested |
| Maintenance status | Active |
| External services | Optional |
| Telemetry | None |
External service details
Administrator-selected SMTP provider
Optional integration- Purpose
- Sends WordPress email through the Primary SMTP or optional Fallback SMTP connection selected and configured by the administrator.
- Setup requirements
- The administrator must provide a compatible SMTP host, port, encryption mode and, when required, authentication credentials. Provider presets only prefill recommended connection settings; selecting a preset does not contact that provider or create an account.
- Data exchanged
- SMTP authentication credentials when authentication is enabled; sender and recipient addresses; SMTP envelope information; email headers, subject, body, inline content and attachments; and connection metadata required by the selected provider.
Microsoft identity platform and Microsoft Graph
Optional integration- Purpose
- Authorizes a Microsoft 365 mailbox through delegated OAuth and sends WordPress email through Microsoft Graph as an alternative Primary transport.
- Setup requirements
- Requires a compatible Microsoft 365 mailbox, a Microsoft Entra application registration, tenant and application IDs, a client secret, the exact SDS SMTP redirect URI, and successful mailbox authorization. SDS SMTP requests delegated Mail.Send and offline_access.
- Data exchanged
- Tenant and application identifiers; client secret; OAuth authorization code and PKCE data; access and refresh tokens; sender identity; and the complete RFC 5322/MIME email, including recipients, headers, subject, body, inline content and attachments.
Pushover
Optional integration- Purpose
- Sends administrator-enabled test, email-delivery failure and recovery notifications through Pushover.
- Setup requirements
- Requires a Pushover account, an application API token and a user or group key. The Pushover Notification Channel remains disabled until configured and enabled by an administrator.
- Data exchanged
- Pushover application token and user/group key; site hostname; notification title and text; incident category, failure count, recovery status and event timestamp. Email recipients, email subject and body, attachments, SMTP responses, SMTP credentials and WordPress administration URLs are excluded.
ntfy.sh
Optional integration- Purpose
- Publishes administrator-enabled test, email-delivery failure and recovery notifications to a configured topic on the hosted ntfy.sh service.
- Setup requirements
- Requires an ntfy client subscribed to the same topic configured in SDS SMTP. A long, random topic should be used because SDS SMTP does not control the topic’s access permissions.
- Data exchanged
- The configured topic; site hostname; notification title and text; notification tags; incident category, failure count and recovery status. Email recipients, email subject and body, attachments, SMTP responses, credentials and WordPress administration URLs are excluded.
Telegram Bot API
Optional integration- Purpose
- Sends administrator-enabled test, email-delivery failure and recovery notifications to a configured Telegram chat.
- Setup requirements
- Requires a Telegram bot controlled by the administrator, its Bot Token and the numeric Chat ID of the intended destination.
- Data exchanged
- The Bot Token, numeric Chat ID, site hostname and plain-text notification containing test, failure or recovery status, incident category and failure count. Email recipients, email subject and body, attachments, SMTP responses, SMTP credentials and WordPress administration URLs are excluded.
Discord Webhooks
Optional integration- Purpose
- Sends administrator-enabled test, email-delivery failure and recovery notifications to a configured Discord channel through an Incoming Webhook.
- Setup requirements
- Requires a Discord Incoming Webhook created for an ordinary webhook-capable text channel and its complete Webhook URL.
- Data exchanged
- Discord webhook ID and token; site hostname; plain-text notification content; incident category, failure count and recovery status; and an identifying SDS SMTP user agent. Email recipients, email subject and body, attachments, SMTP responses, SMTP credentials and WordPress administration URLs are excluded.
Slack Incoming Webhooks
Optional integration- Purpose
- Sends administrator-enabled test, email-delivery failure and recovery notifications to a configured Slack channel through an Incoming Webhook.
- Setup requirements
- Requires a Slack app with Incoming Webhooks enabled and a webhook authorized for the intended Slack channel.
- Data exchanged
- The secret Slack webhook path credential; site hostname; plain-text notification content; incident category, failure count and recovery status. Email recipients, email subject and body, attachments, SMTP responses, SMTP credentials and WordPress administration URLs are excluded.