Description
WordPress sends email with PHP’s mail() function by default, which many hosts block or send to spam. Dualsend SMTP Failover routes your email through a mail server you choose, over SMTP or a provider API, and switches to a second server when the first one fails.
How delivery works
- The Primary SMTP Server (API first when set to API mode, then SMTP).
- The Fallback SMTP Server, while its switch is on, in the same way, with no waiting in the page.
- Background retries, when both servers fail: the email waits in a queue and is tried again every Retry Interval minutes, up to Maximum Retries times.
- WordPress itself, as a last resort after the last retry, or at once when Maximum Retries is 0.
Each server gets one attempt per pass and the next route is tried straight away, so a failing server never holds up a page.
Features
- Primary and fallback mail servers, each over SMTP or a provider API
- Automatic failover, with no waiting in the page
- Background retries with an adjustable interval and number of retries
- Connection and credential tests on the settings screen
- A test message that follows the same route as your real email
- Optional debug log, with passwords and API keys masked and no message bodies
- Works with Contact Form 7, WooCommerce and any plugin that sends through
wp_mail()
API providers: Brevo, Elastic Email, MailerSend, Mailgun, Mailjet, Mandrill, Postmark, Resend, SendGrid, SendLayer, SMTP.com, SMTP2GO, SparkPost. Any other provider, such as Amazon SES, Gmail, Microsoft 365 or Zoho Mail, works over SMTP.
External services
This plugin does not contact any service on its own. It has no telemetry, no license check and no connection to the plugin author. It connects only to the email provider you configure, when it sends your mail or when you press a test button. It sends that provider the message itself: recipients, subject, body and your sender address. With plain SMTP it connects only to the host you entered.
- Brevo: api.brevo.com. terms, privacy
- Elastic Email: api.elasticemail.com. terms, privacy
- MailerSend: api.mailersend.com. terms, privacy
- Mailgun: api.mailgun.net or api.eu.mailgun.net. terms, privacy
- Mailjet: api.mailjet.com. terms, privacy
- Mandrill: mandrillapp.com. terms, privacy
- Postmark: api.postmarkapp.com. terms, privacy
- Resend: api.resend.com. terms, privacy
- SendGrid: api.sendgrid.com. terms, privacy
- SendLayer: console.sendlayer.com. terms, privacy
- SMTP.com: api.smtp.com. terms, privacy
- SMTP2GO: api.smtp2go.com. terms, privacy
- SparkPost: api.sparkpost.com or api.eu.sparkpost.com. terms, privacy
Feedback tab. Nothing is sent until an administrator fills in the form, ticks the consent box and presses Send feedback. The message then goes through your own mail server to the Dualsend team at cshubham832@gmail.com and iamshubhamchaurasia@gmail.com. It contains the rating, the message, the optional name and email, your site address and the plugin version. At most 3 messages an hour can be sent.
Screenshots






Installation
- Install the plugin from the plugin directory, or upload it under Plugins > Add New > Upload Plugin, and activate it.
- Go to Settings > Dualsend SMTP Failover.
- Set the From address. It must be on a domain your provider is allowed to send for.
- Under Primary SMTP Server, enter your SMTP details, or choose API, pick your provider and paste its API key. Press Test Connection or Test API Connection.
- Optionally, set up the Fallback SMTP Server the same way.
- On the Test tab, send yourself a test message.
FAQ
-
How do background retries work?
-
When both servers fail, the email is queued and the page carries on at once. WP-Cron tries it again every Retry Interval minutes (1 to 60, default 5), primary then fallback, up to Maximum Retries times (0 to 10, default 3), then hands it to WordPress mail. At most 100 emails wait at once; when the queue is full, or attachments exceed 10 MB, the email goes to WordPress mail at once. If your site sets
DISABLE_WP_CRON, runwp-cron.phpfrom a real server cron job. -
What does the retry queue store, and for how long?
-
While an email waits, it is stored in your WordPress database, body included, which can hold private content such as a password reset link. Attachments are copied to a private uploads folder under random names, with an index.php and an Apache deny rule; on nginx you can add a deny rule for the
dualsend-smtp-failover-queuefolder. Everything is deleted once the email is delivered or handed to WordPress mail, and when the plugin is deleted. Nothing is ever sent to the plugin author. Set Maximum Retries to 0 to store nothing. -
My host blocks SMTP ports. What do I do?
-
Use a provider with an API and set the connection type to API. API delivery runs over HTTPS, which is not blocked.
-
Where are my passwords stored?
-
In the WordPress options table, readable only by users who can manage settings. They are never sent back to the browser and are masked in the debug log. Keep API keys scoped to sending only.
-
Why did my message land in spam?
-
Usually the From address does not match a domain your provider may send for. Set up SPF, DKIM and DMARC with your provider and use a From address on that domain.
-
Can I keep another SMTP plugin active?
-
Only one plugin sends your email. While Dualsend SMTP Failover has a delivery route, it handles
wp_mail()first, so the other plugin’s mail settings are not used. The settings page shows a notice you can dismiss while another SMTP plugin is active. -
Will it change the sender set by other plugins?
-
No. A plugin that sets its own From address keeps it, unless you switch on Override other plugins. Until a delivery route is set up, no sender is changed.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Dualsend SMTP Failover” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Dualsend SMTP Failover” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.1.1
- Changed: the admin stylesheet and script now live in the assets folder. No change to how the plugin looks or works.
1.1.0
- Changed: the primary server, the fallback server and the delivery options are now on one Settings tab, saved by one button. The fallback server has its own switch and keeps the settings saved by 1.0.0.
- New: immediate failover. Each server gets one attempt, then the next route is tried at once.
- Added background retries. They use Retry Interval and Maximum Retries. Values saved by 1.0.0 are kept. Privacy: a queued email, body included, is kept on your site only until it is delivered or given up.
- New: Test Connection logs in and checks the sender without sending a message, and shows the server’s real error.
- New: Cc, Bcc, Reply-To, attachments and plain-text parts are sent over every provider API.
- New: a Feedback tab, and a notice while another SMTP plugin is active.
- New for developers: the dualsend_smtp_failover_mail_queued action, the dualsend_smtp_failover_should_queue, dualsend_smtp_failover_servers and dualsend_smtp_failover_admin_tabs filters. dualsend_smtp_failover_mail_failed now fires after the last retry.
- Fixed: the debug log no longer records any part of a message body.
- Fixed: embedded images (WordPress 6.9 and later) are sent instead of dropped.
- Fixed: activating the plugin before a server is set up no longer changes the sender of WordPress mail.
- Changed: requires WordPress 6.0 or later.
1.0.0
- First release.