{"id":357014,"date":"2026-09-21T09:25:17","date_gmt":"2026-09-21T09:25:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/smtp-failover\/"},"modified":"2026-09-21T09:24:42","modified_gmt":"2026-09-21T09:24:42","slug":"dualsend-smtp-failover","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/dualsend-smtp-failover\/","author":17654203,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Dualsend SMTP Failover","header_author":"Enfive Core IT Solutions","header_description":"Send WordPress email through an SMTP server or provider API, with an automatic fallback server that takes over when the primary one fails.","assets_banners_color":"","last_updated":"2026-09-21 09:24:42","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/enfivecoreitsolutions.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":53,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"cshubh832","date":"2026-09-21 09:24:42","revision":3705249}},"upgrade_notice":{"1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The General tab, where the sender identity and delivery behaviour are set.","2":"A server tab configured for SMTP, with the connection test.","3":"A server tab configured for provider API delivery.","4":"The Test tab, showing which routes are ready and sending a test message.","5":"The debug log."}},"plugin_section":[],"plugin_tags":[17561,267,450,6696,41812],"plugin_category":[41],"plugin_contributors":[281803],"plugin_business_model":[],"class_list":["post-357014","plugin","type-plugin","status-publish","hentry","plugin_tags-deliverability","plugin_tags-email","plugin_tags-mail","plugin_tags-smtp","plugin_tags-wp-mail","plugin_category-communication","plugin_contributors-cshubh832","plugin_committers-cshubh832"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/dualsend-smtp-failover.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>WordPress sends email with PHP's <code>mail()<\/code> function by default. Most hosts either block it or send it in a way that lands in spam, which is why contact form notifications, password resets and order confirmations go missing.<\/p>\n\n<p>Dualsend SMTP Failover routes your site's email through a mail server you control. What makes it different from other SMTP plugins is the second server: configure a fallback, and if the primary one is down, rate limited or refusing connections, the message is retried on the backup automatically. Nothing is lost while you work out what went wrong with the first one.<\/p>\n\n<h4>How delivery works<\/h4>\n\n<p>Each message is offered to the configured routes in order, and the first one that accepts it wins:<\/p>\n\n<ol>\n<li>Primary provider API, if the primary server is set to API mode<\/li>\n<li>Primary SMTP server<\/li>\n<li>Fallback provider API, if the fallback server is set to API mode<\/li>\n<li>Fallback SMTP server<\/li>\n<\/ol>\n\n<p>If every route fails, the message is handed back to WordPress so its own mail handling still gets a turn.<\/p>\n\n<h4>Sending over an API instead of SMTP<\/h4>\n\n<p>Many hosts close outgoing SMTP ports. Where a provider offers an HTTP API, you can use it instead of SMTP by pasting in an API key \u2014 no ports involved. These providers are supported:<\/p>\n\n<p>Brevo, Elastic Email, MailerSend, Mailgun, Mailjet, Mandrill, Postmark, Resend, SendGrid, SendLayer, SMTP.com, SMTP2GO, SparkPost.<\/p>\n\n<p>Any other provider, including Amazon SES, Gmail, Google Workspace, Microsoft 365, Outlook.com and Zoho Mail, works over standard SMTP.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Two independent servers, with automatic failover between them<\/li>\n<li>SMTP or provider API for each server, mixed freely<\/li>\n<li>Connection and credential tests built into the settings screen<\/li>\n<li>A test message that follows the same routes as your real email<\/li>\n<li>Optional debug log, with passwords and API keys masked before anything is written<\/li>\n<li>Short timeouts while a visitor is waiting on a form submission, so a slow mail server never holds up the page<\/li>\n<li>Works with Contact Form 7 and any other plugin that sends through <code>wp_mail()<\/code><\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin does not contact any service on its own. It has no telemetry, no licence check, and no connection to any service run by the plugin author.<\/p>\n\n<p>The only outgoing connections it makes are to the email provider <strong>you<\/strong> configure, and only when it is sending your mail or when you press one of the test buttons. Endpoints below are API hostnames, not web pages.<\/p>\n\n<ul>\n<li>Brevo \u2014 sends to api.brevo.com \u2014 <a href=\"https:\/\/www.brevo.com\/legal\/termsofuse\/\">terms<\/a>, <a href=\"https:\/\/www.brevo.com\/legal\/privacypolicy\/\">privacy<\/a><\/li>\n<li>Elastic Email \u2014 sends to api.elasticemail.com \u2014 <a href=\"https:\/\/elasticemail.com\/resources\/usage-policies\/terms-of-use\/\">terms<\/a>, <a href=\"https:\/\/elasticemail.com\/resources\/usage-policies\/privacy-policy\/\">privacy<\/a><\/li>\n<li>MailerSend \u2014 sends to api.mailersend.com \u2014 <a href=\"https:\/\/www.mailersend.com\/legal\/terms-of-use\">terms<\/a>, <a href=\"https:\/\/www.mailersend.com\/legal\/privacy-policy\">privacy<\/a><\/li>\n<li>Mailgun \u2014 sends to api.mailgun.net or api.eu.mailgun.net \u2014 <a href=\"https:\/\/www.mailgun.com\/legal\/terms\/\">terms<\/a>, <a href=\"https:\/\/www.mailgun.com\/legal\/privacy-policy\/\">privacy<\/a><\/li>\n<li>Mailjet \u2014 sends to api.mailjet.com \u2014 <a href=\"https:\/\/www.mailjet.com\/legal\/terms\/\">terms<\/a>, <a href=\"https:\/\/www.mailjet.com\/legal\/privacy-policy\/\">privacy<\/a><\/li>\n<li>Mandrill \u2014 sends to mandrillapp.com \u2014 <a href=\"https:\/\/mailchimp.com\/legal\/terms\/\">terms<\/a>, <a href=\"https:\/\/mailchimp.com\/legal\/privacy\/\">privacy<\/a><\/li>\n<li>Postmark \u2014 sends to api.postmarkapp.com \u2014 <a href=\"https:\/\/postmarkapp.com\/terms-of-service\">terms<\/a>, <a href=\"https:\/\/postmarkapp.com\/privacy-policy\">privacy<\/a><\/li>\n<li>Resend \u2014 sends to api.resend.com \u2014 <a href=\"https:\/\/resend.com\/legal\/terms-of-service\">terms<\/a>, <a href=\"https:\/\/resend.com\/legal\/privacy-policy\">privacy<\/a><\/li>\n<li>SendGrid \u2014 sends to api.sendgrid.com \u2014 <a href=\"https:\/\/www.twilio.com\/en-us\/legal\/tos\">terms<\/a>, <a href=\"https:\/\/www.twilio.com\/en-us\/legal\/privacy\">privacy<\/a><\/li>\n<li>SendLayer \u2014 sends to console.sendlayer.com \u2014 <a href=\"https:\/\/sendlayer.com\/terms-of-service\/\">terms<\/a>, <a href=\"https:\/\/sendlayer.com\/privacy-policy\/\">privacy<\/a><\/li>\n<li>SMTP.com \u2014 sends to api.smtp.com \u2014 <a href=\"https:\/\/www.smtp.com\/policies\/terms-and-conditions\/\">terms<\/a>, <a href=\"https:\/\/www.smtp.com\/policies\/privacy-policy\/\">privacy<\/a><\/li>\n<li>SMTP2GO \u2014 sends to api.smtp2go.com \u2014 <a href=\"https:\/\/www.smtp2go.com\/terms\/\">terms<\/a>, <a href=\"https:\/\/www.smtp2go.com\/privacy\/\">privacy<\/a><\/li>\n<li>SparkPost \u2014 sends to api.sparkpost.com or api.eu.sparkpost.com \u2014 <a href=\"https:\/\/www.sparkpost.com\/policies\/tou\/\">terms<\/a>, <a href=\"https:\/\/www.sparkpost.com\/policies\/privacy\/\">privacy<\/a><\/li>\n<\/ul>\n\n<p>When a message is sent, the data passed to your chosen provider is the message itself: recipients, subject, body, and the sender address you configured. That is the same data any mail server would receive. Nothing is sent anywhere else.<\/p>\n\n<p>If you configure a plain SMTP server instead of an API, the plugin connects only to the host you entered.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin through <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>, or install it from the plugin directory.<\/li>\n<li>Activate it.<\/li>\n<li>Go to <strong>Settings \u2192 Dualsend SMTP Failover<\/strong>.<\/li>\n<li>On the <strong>General<\/strong> tab, set the From address. It must be on a domain your provider is allowed to send for.<\/li>\n<li>On the <strong>Primary server<\/strong> tab, choose your provider and enter either the SMTP details or an API key. Use <strong>Test connection<\/strong> or <strong>Verify credentials<\/strong> to check it.<\/li>\n<li>Optionally do the same on the <strong>Fallback server<\/strong> tab, using a different provider so that both routes do not fail together.<\/li>\n<li>On the <strong>Test<\/strong> tab, send yourself a test message.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20fallback%20server%3F\"><h3>Do I need a fallback server?<\/h3><\/dt>\n<dd><p>No. The plugin works with just the primary server. The fallback is there for sites where a missed email costs something \u2014 a shop, a booking form, a support desk.<\/p><\/dd>\n<dt id=\"should%20the%20fallback%20use%20the%20same%20provider%20as%20the%20primary%3F\"><h3>Should the fallback use the same provider as the primary?<\/h3><\/dt>\n<dd><p>Ideally not. If both servers belong to the same provider, one outage takes out both. Pairing two different providers is what makes the failover worth having.<\/p><\/dd>\n<dt id=\"my%20host%20blocks%20smtp%20ports.%20what%20do%20i%20do%3F\"><h3>My host blocks SMTP ports. What do I do?<\/h3><\/dt>\n<dd><p>Choose a provider that offers an API \u2014 SendGrid, Brevo, Postmark, Mailgun and most others in the list above \u2014 and set the connection type to <strong>Provider API<\/strong>. API delivery runs over ordinary HTTPS, which is not blocked.<\/p><\/dd>\n<dt id=\"where%20are%20my%20passwords%20stored%3F\"><h3>Where are my passwords stored?<\/h3><\/dt>\n<dd><p>In the WordPress options table, in the same database as the rest of your site, and only readable by users who can already manage plugin settings. They are never sent back to the browser once saved, and they are masked before anything is written to the debug log.<\/p>\n\n<p>For extra safety on a shared host, keep your provider's API key scoped to sending only, rather than full account access.<\/p><\/dd>\n<dt id=\"why%20did%20my%20message%20send%20but%20land%20in%20spam%3F\"><h3>Why did my message send but land in spam?<\/h3><\/dt>\n<dd><p>Almost always because the From address does not match a domain your provider is authorised to send for. Set up SPF, DKIM and DMARC records with your provider, and use a From address on that domain.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20contact%20form%207%3F\"><h3>Does it work with Contact Form 7?<\/h3><\/dt>\n<dd><p>Yes, and it treats form submissions specially: while a visitor is waiting on a form, timeouts are shortened and the long retry pause is skipped, so a slow mail server never leaves the page hanging.<\/p>\n\n<p>Any plugin that sends through <code>wp_mail()<\/code> works, including WooCommerce, Gravity Forms, WPForms and the WordPress core notifications.<\/p><\/dd>\n<dt id=\"will%20it%20interfere%20with%20other%20plugins%20that%20set%20their%20own%20sender%20address%3F\"><h3>Will it interfere with other plugins that set their own sender address?<\/h3><\/dt>\n<dd><p>Not unless you ask it to. By default a plugin that sets its own From address keeps it. Switch on <strong>Override other plugins<\/strong> on the General tab if you want your configured address used everywhere.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20every%20route%20fails%3F\"><h3>What happens when every route fails?<\/h3><\/dt>\n<dd><p>The message is handed back to WordPress, which tries its own PHP mail handling. Switch on the debug log to see exactly which route failed and why.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Send WordPress email through an SMTP server or provider API, with a second server that takes over automatically when the first one fails.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/357014","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=357014"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/cshubh832"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=357014"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=357014"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=357014"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=357014"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=357014"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=357014"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}