Skip to content
Email & Delivery Core

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 version0.2.20
WordPress requirement6.5+
WordPress tested up to7.1
PHP requirement8.1+
EditionCore
Multisite supportNot tested
Maintenance statusActive
External servicesOptional
TelemetryNone

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.

Changelog

Version 0.2.20

Current