{"id":349487,"date":"2026-08-11T13:31:48","date_gmt":"2026-08-11T13:31:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/dadsfam-smtp\/"},"modified":"2026-10-24T21:19:21","modified_gmt":"2026-10-24T21:19:21","slug":"dadsfam-email-smtp","status":"publish","type":"plugin","link":"https:\/\/fr.wordpress.org\/plugins\/dadsfam-email-smtp\/","author":23486748,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.3.1","stable_tag":"2.3.1","tested":"7.1.3","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"DadsFam SMTP","header_author":"DadsFam","header_description":"Reliable WordPress email delivery over SMTP. 13+ pre-configured providers, encrypted credentials, full email logging with resend, live SMTP diagnostics, SPF\/DKIM\/DMARC deliverability checks and WooCommerce email routing.","assets_banners_color":"bbcbde","last_updated":"2026-10-24 21:19:21","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/plugins.dadsfam.co.za\/","header_author_uri":"https:\/\/www.dadsfam.co.za","rating":0,"author_block_rating":0,"active_installs":20,"downloads":818,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.10":{"tag":"2.0.10","author":"dadsfam","date":"2026-08-15 08:28:29","revision":3648307},"2.0.6":{"tag":"2.0.6","author":"dadsfam","date":"2026-08-11 13:31:28","revision":3642053},"2.0.7":{"tag":"2.0.7","author":"dadsfam","date":"2026-08-12 04:18:58","revision":3642806},"2.0.9":{"tag":"2.0.9","author":"dadsfam","date":"2026-08-15 08:12:29","revision":3648294},"2.1.0":{"tag":"2.1.0","author":"dadsfam","date":"2026-09-04 11:22:24","revision":3681109},"2.1.1":{"tag":"2.1.1","author":"dadsfam","date":"2026-09-04 12:00:24","revision":3681171},"2.1.2":{"tag":"2.1.2","author":"dadsfam","date":"2026-09-10 11:12:45","revision":3689797},"2.1.4":{"tag":"2.1.4","author":"dadsfam","date":"2026-09-20 09:03:39","revision":3704050},"2.1.5":{"tag":"2.1.5","author":"dadsfam","date":"2026-09-26 14:51:21","revision":3714354},"2.1.6":{"tag":"2.1.6","author":"dadsfam","date":"2026-10-07 18:01:32","revision":3733154},"2.1.7":{"tag":"2.1.7","author":"dadsfam","date":"2026-10-15 17:25:39","revision":3749022},"2.2.0":{"tag":"2.2.0","author":"dadsfam","date":"2026-10-15 18:47:55","revision":3749149},"2.3.0":{"tag":"2.3.0","author":"dadsfam","date":"2026-10-16 04:06:48","revision":3749636},"2.3.1":{"tag":"2.3.1","author":"dadsfam","date":"2026-10-24 21:19:21","revision":3763739}},"upgrade_notice":{"2.3.1":"<p>The Test connection buttons now check the mail server&#039;s certificate and never send your password over a connection that should be encrypted and is not. Adds SMTP Senpai to the provider list. Recommended for every site.<\/p>","2.3.0":"<p>DadsFam AI now names your older emails, remembers what fixed each failure, offers the emails that failed once email works again and, when you switch them on, holds floods and reads bounces. Anything new that sends, holds or reads your mailbox is off until you switch it on.<\/p>","2.2.0":"<p>Adds DadsFam AI: every failure explained in plain English, daily checks of your mail server and DNS, safe fixes with Undo, and answers about your email from your own log. Runs on your own server; nothing is sent anywhere.<\/p>","2.1.7":"<p>Replies to contact forms no longer copy in the site owner, an email no longer fails because the one before it failed, and PRO no longer retries emails held back on purpose. Recommended for every site.<\/p>","2.1.6":"<p>Fixes the email log sometimes showing an empty white box instead of the email, and stops a look at a logged email counting as an open. Recommended.<\/p>","2.1.5":"<p>Stops one failed email turning into a stream of retries and failure alerts. Recommended, especially if you use PRO&#039;s automatic retry.<\/p>","2.1.4":"<p>Includes the important 2.1.3 fix (emails another plugin has stopped are no longer sent anyway), plus WordPress.org housekeeping. Recommended for every site.<\/p>","2.1.3":"<p>Important fix: emails that another plugin has stopped are no longer sent anyway. Recommended for every site.<\/p>","2.1.1":"<p>Plugin page screenshots only. Nothing in the plugin changed, so there is no hurry to update.<\/p>","2.1.0":"<p>Adds five more AI abilities covering the things you need when mail fails: reading a single log entry, seeing what is waiting to be retried, exporting and applying a configuration across sites, and a one-call support report. Nothing changes about how mail is sent or logged.<\/p>","2.0.10":"<p>Packaging only \u2014 trims the tag list to the five WordPress.org allows. No change to how the plugin works.<\/p>","2.0.9":"<p>Adds AI assistant support via the WordPress Abilities API (WP 6.9+): connect Claude or ChatGPT through an MCP plugin like WPVibe and let it read stats, check deliverability, send tests and manage settings. Admin-only; your SMTP password is never exposed. Email delivery is unchanged.<\/p>","2.0.7":"<p>Readme only \u2014 adds an honest note about what&#039;s free and what the optional PRO add-on does. Nothing changes in how the plugin works.<\/p>","2.0.6":"<p>Housekeeping only. Uninstall now removes just this plugin&#039;s own data by exact name and runs across every site on multisite. Email delivery and your settings are unaffected.<\/p>","2.0.4":"<p>Strengthens how SMTP passwords are stored and removes a fallback that could save a password unprotected. Existing passwords keep working; no reconfiguration needed.<\/p>","2.0.3":"<p>Corrects email-log labelling. Non-WooCommerce emails are no longer misreported as WooCommerce order emails. Log accuracy only, delivery is unaffected.<\/p>","2.0.2":"<p>Version alignment only. Nothing changes in the free plugin.<\/p>","2.0.1":"<p>Removes two PHP 8.4 deprecation notices and corrects CSV export escaping. Recommended for sites on PHP 8.4.<\/p>","2.0.0":"<p>Important reliability fixes, including one where a failed send could loop indefinitely. Logging is now unlimited for everyone. Settings and logs are preserved on upgrade.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3681171,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3681171,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3714354,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3714354,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.10","2.0.6","2.0.7","2.0.9","2.1.0","2.1.1","2.1.2","2.1.4","2.1.5","2.1.6","2.1.7","2.2.0","2.3.0","2.3.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3763739,"resolution":"1","location":"assets","locale":"","width":1280,"height":1280},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3763739,"resolution":"10","location":"assets","locale":"","width":1280,"height":1280},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3763739,"resolution":"11","location":"assets","locale":"","width":1280,"height":1280},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3763739,"resolution":"2","location":"assets","locale":"","width":1280,"height":1280},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3763739,"resolution":"3","location":"assets","locale":"","width":1280,"height":1280},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3763739,"resolution":"4","location":"assets","locale":"","width":1280,"height":1280},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3763739,"resolution":"5","location":"assets","locale":"","width":1280,"height":1280},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3763739,"resolution":"6","location":"assets","locale":"","width":1280,"height":1280},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3763739,"resolution":"7","location":"assets","locale":"","width":1280,"height":1280},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3763739,"resolution":"8","location":"assets","locale":"","width":1280,"height":1280},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3763739,"resolution":"9","location":"assets","locale":"","width":1280,"height":1280}},"screenshots":{"1":"DadsFam AI answers \"is my email working?\" first, with your email health score, what went out and what failed, and how much it may do by itself.","2":"New in 2.3: when email breaks, it knows what to do. Emails that failed while the mail server refused them are offered again once it works, a flood from a hijacked form is held instead of sent, and bounces read from your own mailbox are explained.","3":"Ask anything about your email. Answered from your own log, with what the mail server said, what to do next and the button to do it.","4":"The Doctor checks everything every day, a real sign-in to your mail server included, and every finding comes with its fix.","5":"What your site sends, learned from your own log (older emails included), and the diary: every change DadsFam AI makes, with an Undo.","6":"The dashboard widget: your email health at a glance, and answers without leaving the dashboard.","7":"Pick your provider and the host, port and encryption fill themselves in. Your password is encrypted before it is stored.","8":"An email health score out of 100, with SPF, DKIM and DMARC checked against live DNS and each item scored separately so you know what to fix.","9":"Every email logged, searchable by recipient or subject, with the reason in plain words when something failed.","10":"Totals, a seven-day trend and a breakdown by connection, so a drop in delivery shows up as a shape on a chart.","11":"Everything in the free plugin is genuinely free. Nothing is blurred, disabled or time-limited. Pro is a separate, optional add-on."}},"plugin_section":[262246],"plugin_tags":[267,26736,9965,6696,286],"plugin_category":[41,45],"plugin_contributors":[274194],"plugin_business_model":[],"class_list":["post-349487","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-email","plugin_tags-email-log","plugin_tags-mailer","plugin_tags-smtp","plugin_tags-woocommerce","plugin_category-communication","plugin_category-ecommerce","plugin_contributors-dadsfam","plugin_committers-dadsfam"],"banners":{"banner":"https:\/\/ps.w.org\/dadsfam-email-smtp\/assets\/banner-772x250.png?rev=3714354","banner_2x":"https:\/\/ps.w.org\/dadsfam-email-smtp\/assets\/banner-1544x500.png?rev=3714354","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/dadsfam-email-smtp\/assets\/icon-128x128.png?rev=3681171","icon_2x":"https:\/\/ps.w.org\/dadsfam-email-smtp\/assets\/icon-256x256.png?rev=3681171","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/dadsfam-email-smtp\/assets\/screenshot-1.png?rev=3763739","caption":"DadsFam AI answers \"is my email working?\" first, with your email health score, what went out and what failed, and how much it may do by itself."},{"src":"https:\/\/ps.w.org\/dadsfam-email-smtp\/assets\/screenshot-2.png?rev=3763739","caption":"New in 2.3: when email breaks, it knows what to do. Emails that failed while the mail server refused them are offered again once it works, a flood from a hijacked form is held instead of sent, and bounces read from your own mailbox are explained."},{"src":"https:\/\/ps.w.org\/dadsfam-email-smtp\/assets\/screenshot-3.png?rev=3763739","caption":"Ask anything about your email. Answered from your own log, with what the mail server said, what to do next and the button to do it."},{"src":"https:\/\/ps.w.org\/dadsfam-email-smtp\/assets\/screenshot-4.png?rev=3763739","caption":"The Doctor checks everything every day, a real sign-in to your mail server included, and every finding comes with its fix."},{"src":"https:\/\/ps.w.org\/dadsfam-email-smtp\/assets\/screenshot-5.png?rev=3763739","caption":"What your site sends, learned from your own log (older emails included), and the diary: every change DadsFam AI makes, with an Undo."},{"src":"https:\/\/ps.w.org\/dadsfam-email-smtp\/assets\/screenshot-6.png?rev=3763739","caption":"The dashboard widget: your email health at a glance, and answers without leaving the dashboard."},{"src":"https:\/\/ps.w.org\/dadsfam-email-smtp\/assets\/screenshot-7.png?rev=3763739","caption":"Pick your provider and the host, port and encryption fill themselves in. Your password is encrypted before it is stored."},{"src":"https:\/\/ps.w.org\/dadsfam-email-smtp\/assets\/screenshot-8.png?rev=3763739","caption":"An email health score out of 100, with SPF, DKIM and DMARC checked against live DNS and each item scored separately so you know what to fix."},{"src":"https:\/\/ps.w.org\/dadsfam-email-smtp\/assets\/screenshot-9.png?rev=3763739","caption":"Every email logged, searchable by recipient or subject, with the reason in plain words when something failed."},{"src":"https:\/\/ps.w.org\/dadsfam-email-smtp\/assets\/screenshot-10.png?rev=3763739","caption":"Totals, a seven-day trend and a breakdown by connection, so a drop in delivery shows up as a shape on a chart."},{"src":"https:\/\/ps.w.org\/dadsfam-email-smtp\/assets\/screenshot-11.png?rev=3763739","caption":"Everything in the free plugin is genuinely free. Nothing is blurred, disabled or time-limited. Pro is a separate, optional add-on."}],"raw_content":"<!--section=description-->\n<p>WordPress sends email with PHP's <code>mail()<\/code> function, which most hosts either block or deliver straight to spam. <strong>DadsFam SMTP<\/strong> replaces it with a real authenticated SMTP connection, so your password resets, contact forms and WooCommerce order emails actually arrive.<\/p>\n\n<p>Everything described below works on every site. Nothing is disabled, blurred out, time-limited or reduced.<\/p>\n\n<h4>DadsFam AI: your email, watched and fixed<\/h4>\n\n<p>New in 2.2. Open <strong>DadsFam SMTP \u2192 DadsFam AI<\/strong> and the first thing you see is the answer to the only question that matters: is my email working? If it is not, it says why, in plain words, and what to do about it.<\/p>\n\n<ul>\n<li><strong>Every failure explained.<\/strong> It reads what your mail server actually said and tells you what it means: the password was turned down, Gmail wants an app password, Microsoft 365 has SMTP sign-in switched off, the address does not exist, your server's IP is on a blocklist. With the steps to fix it, and whether sending again can work (later, after a fix, or never).<\/li>\n<li><strong>It checks everything, every day.<\/strong> A real sign-in to your mail server (nothing is sent), its certificate, whether another plugin has taken over WordPress's email, whether staging mode was left on, your SPF, DKIM and DMARC records, the log table and the scheduled tasks.<\/li>\n<li><strong>It learns your site.<\/strong> What your site sends (order receipts, password resets, each contact form), how often and when. It warns you when a kind of email goes quiet for longer than your site's own rhythm allows, when a form starts sending floods of spam, or when more email fails than is normal for you.<\/li>\n<li><strong>It fixes what is safe, and proves it first.<\/strong> It only switches to a connection that has just signed in with your own password, uses the DKIM selector your domain really publishes and sends from the address your mail server accepts. In \"Ask me first\" mode you tap Apply; on Autopilot it does this by itself, keeps watching, and puts a change back if it makes things worse. Every change goes in a diary with an Undo.<\/li>\n<li><strong>Ask it anything.<\/strong> \"Did sarah@example.com get her receipt?\", \"Did order 1234 go out?\", \"Why did emails fail this week?\", \"What does 535 mean?\", \"Stop emailing bob@example.com\". Answered from your own email log, with the buttons to act on it. A question never changes anything by itself, and it learns your way of asking from the suggestions you pick.<\/li>\n<li><strong>It keeps you posted without nagging.<\/strong> A dashboard widget, an optional weekly letter on Monday mornings, and one notice on the Dashboard and Plugins screens only when your email is actually failing.<\/li>\n<\/ul>\n\n<h4>New in 2.3: it learns, remembers and looks after itself<\/h4>\n\n<ul>\n<li><strong>A first look the moment you open it.<\/strong> The full check runs straight away, so the health score you see is measured, not assumed.<\/li>\n<li><strong>It knows what your older emails were.<\/strong> Emails logged before 2.2 did not record who sent them. It works them out from WordPress's and WooCommerce's own wording, from the emails your site sends now, and from the words in your installed plugins' own code, so \"Other emails\" turns into password resets, order receipts and each plugin by name. Only what it is sure of, and all of it can be undone in one tap.<\/li>\n<li><strong>It remembers what happened.<\/strong> When email fails, it remembers for how long, what it cost and what made it work again. The next time, it tells you: \"this happened on 3 October; changing the password fixed it then\", or \"last time it cleared by itself in 40 minutes\".<\/li>\n<li><strong>The emails that failed can still go out.<\/strong> Once email works again, the ones that failed meanwhile are offered with one tap, once each. On Autopilot it can do this by itself when you switch it on. Never password resets, never to addresses that do not exist, never twice.<\/li>\n<li><strong>It holds a flood.<\/strong> When one form or plugin suddenly sends far more than your site ever has, it can hold just that kind of email, keep every one in the log, and let everything else through, so your provider does not suspend you. You look, then send them all or delete them. Order emails, password resets and emails with attachments are never held, and it ends by itself once that kind of email is back to its usual pace. Off until you switch it on.<\/li>\n<li><strong>Bounces after sending.<\/strong> Your mail server accepting an email is not always the end: the other side can send it back later. Switch this on and it reads the bounce messages in your mailbox (read-only), marks those emails Bounced, says why, and offers to stop emailing addresses that do not exist.<\/li>\n<li><strong>It watches your DNS.<\/strong> When your SPF, DKIM, DMARC or MX records change, the diary says what changed, and a check that starts failing tells you what the record used to be.<\/li>\n<li><strong>Better advice on DMARC.<\/strong> A policy of p=none only watches; it now says so, with the record to move to once SPF and DKIM both pass.<\/li>\n<\/ul>\n\n<p>DadsFam AI runs entirely inside your WordPress, on your own server. It does not use OpenAI, ChatGPT, Claude or any other outside service, there is no API key, and nothing about your email leaves your site. Switch it off completely with <code>define( 'DFSMTP_BRAIN_OFF', true );<\/code> in wp-config.php.<\/p>\n\n<h4>Set up in about two minutes<\/h4>\n\n<p>Pick your provider from the list and the host, port and encryption fill themselves in. Enter your username and password, save, then send a test email. The test shows you the full SMTP conversation, so if something is wrong you can see exactly which step failed.<\/p>\n\n<h4>Supported providers<\/h4>\n\n<p>Gmail, Outlook and Office 365, SendGrid, Mailgun, Amazon SES, Brevo, Postmark, SparkPost, SMTP Senpai, Zoho Mail, Yahoo Mail, Hostinger, cPanel, and any custom SMTP server.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>14 pre-configured providers<\/strong> with automatic host, port and encryption defaults<\/li>\n<li><strong>Per-provider setup notes<\/strong> built into the interface, including the common gotchas<\/li>\n<li><strong>AES-256-GCM encrypted credentials<\/strong> \u2014 passwords are never stored as plain text<\/li>\n<li><strong>Full sender control<\/strong> \u2014 From Name, From Email, Reply-To and Return-Path<\/li>\n<li><strong>Unlimited email logging<\/strong> with status, subject, recipient, connection and timestamp<\/li>\n<li><strong>Retention control<\/strong> \u2014 keep logs for as many days as you choose, or forever<\/li>\n<li><strong>One-click resend<\/strong> of any logged email<\/li>\n<li><strong>Full email body viewer<\/strong> in a sandboxed preview frame<\/li>\n<li><strong>CSV export<\/strong> of your entire delivery history<\/li>\n<li><strong>Send test email<\/strong> with live SMTP diagnostic output<\/li>\n<li><strong>Connection test<\/strong> that speaks SMTP to your server the way a real send does, checks its certificate, and sends nothing<\/li>\n<li><strong>Deliverability checker<\/strong> for SPF, DKIM, DMARC and MX records<\/li>\n<li><strong>Email health score<\/strong> combining DNS authentication, configuration and real send history<\/li>\n<li><strong>Delivery failure alerts<\/strong> by email<\/li>\n<li><strong>Blocking mode<\/strong> stops all outgoing mail on staging sites while still logging attempts<\/li>\n<li><strong>Suppression list<\/strong> for addresses and domains that must never be contacted<\/li>\n<li><strong>Analytics<\/strong> with a seven-day delivery chart and per-connection success rates<\/li>\n<li><strong>WooCommerce diagnostics<\/strong> \u2014 confirm store emails route correctly and test each type<\/li>\n<li><strong>DadsFam AI<\/strong> \u2014 plain-English failures, daily checks, safe self-fixes with Undo, and answers about your email (see above)<\/li>\n<li><strong>Flood guard<\/strong> \u2014 holds a sudden flood from one form or plugin while everything else keeps going (off until you switch it on)<\/li>\n<li><strong>Bounce reading<\/strong> \u2014 optional, read-only: marks emails the other side sent back, with the reason<\/li>\n<li><strong>Message-ID recorded<\/strong> for every email sent<\/li>\n<li><strong>Dashboard widget<\/strong> with the answer to \"is my email working?\", the numbers, and a question box<\/li>\n<li><strong>Backup and migrate<\/strong> your configuration as JSON<\/li>\n<li><strong>Documented hook API<\/strong> for developers<\/li>\n<\/ul>\n\n<h4>WooCommerce<\/h4>\n\n<p>DadsFam SMTP hooks in at a late priority, so it wins over WooCommerce's own From address settings and your store emails always send from the address you configured. The diagnostics screen flags any mismatch between the two and lets you test-send each WooCommerce email type.<\/p>\n\n<p>Declared compatible with High-Performance Order Storage and Cart &amp; Checkout Blocks.<\/p>\n\n<h4>Extending the plugin<\/h4>\n\n<p>The plugin exposes documented actions and filters \u2014 <code>dfsmtp_configure_mailer<\/code>, <code>dfsmtp_after_configure_mailer<\/code>, <code>dfsmtp_mail_failed<\/code>, <code>dfsmtp_mail_logged<\/code>, <code>dfsmtp_save_settings<\/code>, <code>dfsmtp_settings_page_end<\/code>, <code>dfsmtp_nav_pages<\/code> and others \u2014 so you can layer your own behaviour onto the send pipeline. The full list is documented in the header of <code>dadsfam-email-smtp.php<\/code>.<\/p>\n\n<p>An optional commercial add-on, DadsFam SMTP PRO, is built on this same hook API for stores and agencies sending at higher volume. It is a separate plugin and is not required \u2014 this plugin is complete on its own.<\/p>\n\n<h4>A word about PRO<\/h4>\n\n<p>Right, let me be straight with you, because I hate being sold to as much as you do.<\/p>\n\n<p>Everything above is free and it stays free. Sending your mail through a proper SMTP server is not a premium feature. Saving your provider details, encrypting your password, logging what went out and resending one that failed are not premium features. Those are things a plugin like this should just do, and if I put them behind a paywall I would be taking the mickey.<\/p>\n\n<p>There is a PRO add-on. It exists because I am a dad in Cape Town, and this is one of the things that puts food on the table at my house. That is the honest reason. Not \"unlock your potential\", not \"supercharge your workflow\". Just: if this plugin got your email sending again and you can spare it, PRO helps me keep building.<\/p>\n\n<p>There is one PRO version and one price: R500 once off, roughly $35, per plugin. It is not a subscription, there is no yearly renewal, and it does not expire. Pay once and it stays yours, updates included. If the free version does everything you need, use that and think nothing of it \u2014 it is not crippled to push you across, and it never will be.<\/p>\n\n<p>What PRO adds is the stuff you only want once you are sending real volume \u2014 sending from more than one mailbox and routing each message to the right one, failing over to a backup server when your main one has a bad day, retrying failed sends on their own, open and click tracking, failure alerts into Slack or Discord, and a weekly delivery digest. That is convenience and automation. It is not the plugin working properly, because the plugin already works properly.<\/p>\n\n<p>So if the free one does everything you need, brilliant. Genuinely. Use it, and I hope it saves you a frustrating afternoon chasing email that will not send. If you get to the point where the automation would save you real time, PRO is at plugins.dadsfam.co.za.<\/p>\n\n<p>Either way, thanks for using something I built. \u2014 Zak, DadsFam<\/p>\n\n<p>PRO adds:<\/p>\n\n<ul>\n<li>Multiple saved SMTP connections<\/li>\n<li>Smart routing by subject, sender or recipient domain<\/li>\n<li>Automatic failover to a backup server<\/li>\n<li>Auto-retry of failed emails<\/li>\n<li>Open and click tracking<\/li>\n<li>Slack, Discord and webhook failure alerts<\/li>\n<li>Weekly delivery digest and hourly send limits<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin does not connect to any service of its own. It has no home-phoning, no analytics and no licence checks.<\/p>\n\n<p>It does, however, exist to hand your website's email to an SMTP server that <strong>you<\/strong> choose and configure. That server is a third party service, and what it receives is entirely determined by your own settings.<\/p>\n\n<p><strong>What is sent:<\/strong> the emails your WordPress site produces \u2014 sender, recipients, subject, message body and any attachments \u2014 together with the username and password you entered, so the server will accept them.<\/p>\n\n<p><strong>When it is sent:<\/strong> only when WordPress sends an email, and only once you have entered SMTP details and saved them. With no details entered, the plugin sends nothing anywhere.<\/p>\n\n<p><strong>Where it is sent:<\/strong> to the host you type into the settings, and nowhere else.<\/p>\n\n<p><strong>DadsFam AI<\/strong> (2.2.0) adds no outside service. It checks the mail server you configured by connecting and signing in to it the way your site does, and stops before anything is sent. It reads your domain's public SPF, DKIM, DMARC and MX records through your server's own DNS resolver. Nothing about your email, your log or your questions is sent anywhere.<\/p>\n\n<p><strong>Bounces after sending<\/strong> (2.3.0, off unless you switch it on) connects to the mailbox server you enter, over IMAP, with the username and password you give it, once an hour. It opens the mailbox read-only and downloads only the messages that look like bounce reports, to read them on your server. Nothing is sent to that server except the sign-in and the read-only commands, and nothing else is contacted. That server is the one your email is already hosted on, so its own terms apply.<\/p>\n\n<p>The plugin includes ready-made host and port presets for a number of well-known providers purely so you do not have to look them up. A preset is only a shortcut for filling in the form; selecting one does not contact anybody, and no provider is contacted unless you have entered credentials for it and WordPress sends an email.<\/p>\n\n<p>Because you choose the provider, you are agreeing to that provider's terms. The presets included cover, among others:<\/p>\n\n<ul>\n<li>Google Gmail \/ Workspace \u2014 <a href=\"https:\/\/policies.google.com\/terms\">terms<\/a>, <a href=\"https:\/\/policies.google.com\/privacy\">privacy<\/a><\/li>\n<li>Microsoft Outlook \/ Microsoft 365 \u2014 <a href=\"https:\/\/www.microsoft.com\/en\/servicesagreement\/\">terms<\/a>, <a href=\"https:\/\/privacy.microsoft.com\/en-us\/privacystatement\">privacy<\/a><\/li>\n<li>Amazon SES \u2014 <a href=\"https:\/\/aws.amazon.com\/service-terms\/\">terms<\/a>, <a href=\"https:\/\/aws.amazon.com\/privacy\/\">privacy<\/a><\/li>\n<li>SendGrid (Twilio) \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>Mailgun \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>Postmark \u2014 <a href=\"https:\/\/postmarkapp.com\/terms-of-service\">terms<\/a>, <a href=\"https:\/\/postmarkapp.com\/privacy-policy\">privacy<\/a><\/li>\n<li>Brevo \u2014 <a href=\"https:\/\/www.brevo.com\/legal\/termsofuse\/\">terms<\/a>, <a href=\"https:\/\/www.brevo.com\/legal\/privacypolicy\/\">privacy<\/a><\/li>\n<li>SMTP Senpai (MailSenpai) \u2014 <a href=\"https:\/\/en.mailsenpai.com\/tc\/\">terms<\/a>, <a href=\"https:\/\/en.mailsenpai.com\/privacy-policy\/\">privacy<\/a><\/li>\n<li>Zoho Mail \u2014 <a href=\"https:\/\/www.zoho.com\/terms.html\">terms<\/a>, <a href=\"https:\/\/www.zoho.com\/privacy.html\">privacy<\/a><\/li>\n<\/ul>\n\n<p>If you use your own mail server, or a provider not listed above, then that server is the only third party involved and its own terms apply.<\/p>\n\n<h3>Support<\/h3>\n\n<p>Email: support@dadsfam.co.za\nWebsite: https:\/\/www.dadsfam.co.za<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>dadsfam-email-smtp<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install through <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to <strong>DadsFam SMTP \u2192 Settings<\/strong> and choose your provider.<\/li>\n<li>Enter your credentials and save.<\/li>\n<li>Go to <strong>DadsFam SMTP \u2192 Test &amp; Tools<\/strong> and send a test email.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"gmail%20keeps%20rejecting%20my%20password.\"><h3>Gmail keeps rejecting my password.<\/h3><\/dt>\n<dd><p>Gmail will not accept your normal account password over SMTP. Turn on 2-Step Verification, then generate an App Password under Google Account \u2192 Security \u2192 App passwords, and use that instead.<\/p><\/dd>\n<dt id=\"i%20use%20smtp%20senpai.%20what%20do%20i%20enter%3F\"><h3>I use SMTP Senpai. What do I enter?<\/h3><\/dt>\n<dd><p>Pick SMTP Senpai from the provider list and the host (relay.mailsenpai.com), port 587 and TLS fill themselves in. If your host blocks 587, use 2525, still with TLS. For the username and password, use the SMTP username and SMTP password from the SMTP Senpai page of your MailSenpai customer area, not the API key that starts with msp_. Send from an address on a domain you have verified with SMTP Senpai.<\/p>\n\n<p>\"Sent\" in the email log means SMTP Senpai accepted the email. An address on SMTP Senpai's own suppression list is accepted without being delivered, and SMTP Senpai's log shows it as dropped.<\/p><\/dd>\n<dt id=\"my%20host%20blocks%20port%2025.\"><h3>My host blocks port 25.<\/h3><\/dt>\n<dd><p>Almost all do. Use port 587 with TLS, or 465 with SSL. If neither connects, use the connection test to confirm whether the problem is the network or your credentials, then ask your host whether outbound SMTP is permitted.<\/p><\/dd>\n<dt id=\"are%20my%20smtp%20passwords%20safe%3F\"><h3>Are my SMTP passwords safe?<\/h3><\/dt>\n<dd><p>Passwords are encrypted with AES-256-GCM using a key derived from your site's own <code>AUTH_KEY<\/code>, so a stolen database dump does not expose them. They are also never included in a configuration export.<\/p><\/dd>\n<dt id=\"will%20this%20work%20with%20woocommerce%3F\"><h3>Will this work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. The plugin runs after WooCommerce and overrides its From address, so store emails send from your configured, authenticated address. There is a diagnostics screen for testing each WooCommerce email type.<\/p><\/dd>\n<dt id=\"does%20logging%20slow%20my%20site%20down%3F\"><h3>Does logging slow my site down?<\/h3><\/dt>\n<dd><p>No. Each send writes one indexed row, and the log list never loads message bodies. Old entries are purged automatically on a daily schedule according to your retention setting.<\/p><\/dd>\n<dt id=\"replies%20to%20my%20contact%20form%20go%20to%20me%20as%20well%20as%20the%20visitor.\"><h3>Replies to my contact form go to me as well as the visitor.<\/h3><\/dt>\n<dd><p>Update to 2.1.7 or later. The Default Reply-To setting is only used for emails that do not say who to reply to, so a contact form or enquiry form that sets the visitor as the Reply-To keeps it, and your reply goes to them alone.<\/p><\/dd>\n<dt id=\"does%20dadsfam%20ai%20send%20my%20emails%20or%20data%20to%20openai%2C%20chatgpt%20or%20anyone%20else%3F\"><h3>Does DadsFam AI send my emails or data to OpenAI, ChatGPT or anyone else?<\/h3><\/dt>\n<dd><p>No. DadsFam AI runs inside your own WordPress. It reads your own email log and settings, understands questions with a language engine built into the plugin, and does its sums on your own server. There is no outside AI service and no API key. The only connections it makes are to your own mail server (to test the sign-in, without sending anything) and to public DNS (to read your SPF, DKIM and DMARC records).<\/p><\/dd>\n<dt id=\"what%20does%20autopilot%20change%20by%20itself%3F\"><h3>What does Autopilot change by itself?<\/h3><\/dt>\n<dd><p>Only things it can prove: a mail server connection that has just signed in with your own username and password, the DKIM selector your domain actually publishes, the From address your mail server accepts, a rebuilt log table, and lost scheduled tasks. It never changes your password and never switches staging mode off. It keeps watching every change and puts it back if things get worse, and if you undo or turn down one kind of fix twice in a month, it goes back to asking you first. Everything is in the diary with an Undo.<\/p>\n\n<p>Two more things it does only after you switch them on under \"What you have taught me\": sending the emails that failed while email was broken, once each, after a fix has worked; and holding a flood of one kind of email. Both are off on every site until you choose otherwise.<\/p><\/dd>\n<dt id=\"does%20dadsfam%20ai%20read%20my%20mailbox%3F\"><h3>Does DadsFam AI read my mailbox?<\/h3><\/dt>\n<dd><p>Only if you switch on \"Bounces after sending\" and give it the mailbox's details. It then signs in over IMAP once an hour, opens the mailbox read-only, reads only the messages that look like bounces, and never marks, moves or deletes anything. The mailbox password is encrypted like your sending password, and you can use the same one. Microsoft 365 no longer allows password sign-in to IMAP for most mailboxes, so this does not work there.<\/p><\/dd>\n<dt id=\"how%20does%20it%20know%20what%20my%20older%20emails%20were%3F\"><h3>How does it know what my older emails were?<\/h3><\/dt>\n<dd><p>Three ways, most certain first: the wording WordPress and WooCommerce use for their own emails; the emails your site has sent since 2.2, which record who sent them, so an older email with the same kind of subject is the same kind of email; and, for what is left, the words of the subject in your installed plugins' and theme's own files. It only labels what it is sure of, never touches the emails themselves, and the diary has an Undo that puts every label back. It all happens on your server.<\/p><\/dd>\n<dt id=\"how%20do%20i%20switch%20dadsfam%20ai%20off%3F\"><h3>How do I switch DadsFam AI off?<\/h3><\/dt>\n<dd><p>Choose \"Paused\" on the DadsFam AI screen and it stops checking and changing anything. To remove it completely, add <code>define( 'DFSMTP_BRAIN_OFF', true );<\/code> to wp-config.php. Sending, logging and every other feature carry on exactly as before.<\/p><\/dd>\n<dt id=\"which%20languages%20does%20%22ask%22%20understand%3F\"><h3>Which languages does \"Ask\" understand?<\/h3><\/dt>\n<dd><p>English, typing mistakes and all. The rest of the plugin, DadsFam AI's answers included, can be translated.<\/p><\/dd>\n<dt id=\"how%20do%20i%20stop%20a%20staging%20site%20emailing%20real%20customers%3F\"><h3>How do I stop a staging site emailing real customers?<\/h3><\/dt>\n<dd><p>Turn on blocking mode under Settings \u2192 Delivery Controls. Nothing is delivered, but every attempt is still logged so you can confirm what the site would have sent.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.3.1<\/h4>\n\n<ul>\n<li><strong>Security: the Test connection buttons now check the mail server's certificate<\/strong>, the way a real send always has. Before, they skipped that check, and the one on the Settings screen sent your username and password even after the server had refused to switch to an encrypted connection. Now a test stops before signing in whenever the connection should be encrypted and is not, so your password is never sent unencrypted or to a server whose certificate cannot be trusted, and a test passes only when a real send would work. Sending email was never affected: it has always checked certificates. Thanks to MailSenpai for reporting it.<\/li>\n<li>New: SMTP Senpai is in the provider list. Pick it and relay.mailsenpai.com, port 587 and TLS fill themselves in, with a note on which login to use: the SMTP username and password from your customer area, not the API key.<\/li>\n<li>New: DadsFam AI knows SMTP Senpai. It explains a turned-down sign-in or From address in plain words, warns when the API key (msp_\u2026) has been typed where the SMTP login belongs, and warns when the SMTP Senpai plugin is active alongside this one. It does not guess an SPF record for SMTP Senpai: it points you to the one SMTP Senpai shows for your domain.<\/li>\n<li>Improved: the connection tests show the certificate the server presented (who it is for, who issued it and when it expires), and explain a failure in plain words. A certificate made out to another name is now recognised as that on PHP 8, in the tests and in the Doctor, instead of as a general encryption failure.<\/li>\n<li>Fixed: importing a configuration file left out the provider when it was Custom SMTP, cPanel or Hostinger, so the Settings screen showed the wrong one afterwards. Every provider in the list now comes across.<\/li>\n<li>Fixed: the provider list given to AI assistants (the list-providers ability) had no encryption for any provider. It now says TLS or SSL for each.<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li><strong>New: DadsFam AI takes its first full look the moment you open it.<\/strong> Before, the health score showed an assumed number until the first daily check had run; now the check runs straight away and the score is measured.<\/li>\n<li>New: it works out what the emails already in your log were. Emails logged before 2.2 did not record who sent them, so they all showed as \"Other emails\". It recognises WordPress's and WooCommerce's own emails by their wording, learns the rest from the emails your site sends now, and looks up what is left in the code of the plugins installed on your site (on your server; nothing is sent anywhere). It only labels the log: only what it is sure of, one Undo in the diary puts every label back, and \"Recognising older emails\" under What you have taught me switches it off.<\/li>\n<li>New: it remembers what went wrong and what fixed it. The next time the same failure happens, it says when it happened before and what made it work then (\"changing the password fixed it\", \"it cleared by itself after 40 minutes\"), on the warning and in Ask.<\/li>\n<li>New: once email works again, the emails that failed while it was broken are offered with one tap (\"3 emails failed earlier and were never sent\"), and go out once each. On Autopilot it can send them by itself if you switch \"Sending emails again once a fix has worked\" on (it is off). It never resends password resets, emails to addresses that do not exist, anything older than a day, or anything PRO's own retry is already handling.<\/li>\n<li>New: flood guard. When one form or plugin suddenly sends far more email than your site ever has (a contact form found by spammers, a plugin stuck in a loop), it can hold just that kind of email: each one kept in the log, not sent, while everything else goes out as normal. You get one email about it, then look at them and send them all or delete them; each keeps its own headers, so it goes exactly as it was meant. Order emails (anything from WooCommerce), password resets and emails with attachments are never held, nothing is held while the email log is off or DadsFam AI is paused, and a hold ends by itself once that kind of email is back to its usual pace. Held emails wait until you send or delete them: the log's clean-up and Clear all leave them alone. On Autopilot only, and only once you switch \"Holding a flood of emails\" on and DadsFam AI has learned your site's rhythm; in \"Ask me first\" the warning has a \"Hold these emails\" button.<\/li>\n<li>New: bounces after sending (optional, off until you switch it on). It reads the bounce messages in your mailbox over IMAP, read-only, marks the emails that came back as Bounced with the reason in plain words, and offers to stop emailing addresses that do not exist. It understands standard delivery reports (Gmail, Microsoft and most servers) and the plain-text ones cPanel's Exim and qmail send.<\/li>\n<li>New: it watches your DNS. When your SPF, DKIM, DMARC or MX records change, the diary says what changed, and a check that starts failing says what the record used to be. A record that seems to vanish once is checked again before it is believed, so a slow DNS answer is not reported as a deleted record.<\/li>\n<li>New: a DMARC policy of p=none is now shown as advice rather than a plain pass: it only watches, so anyone can still send as your domain. When SPF and DKIM both pass it gives the record to move to.<\/li>\n<li>New: every email sent records its Message-ID, which is how a bounce is matched to the email it is about.<\/li>\n<li>Improved: plugins and themes are named by their own name in DadsFam AI (\"DadsFam Login Security\"), and the weekly letter shows bounces and everything DadsFam AI did by itself.<\/li>\n<li>Improved: each problem is told once. A flood that is being held is not told again as a jump in all email, and the failures from a mail-server problem that is over are told as the emails to send again, not also as \"more failures than usual\". The answer at the top no longer repeats the first warning word for word: it says how many things need you, and they are just below.<\/li>\n<li>Improved: kinds of email read naturally in warnings (\"a flood of contact form emails (Contact Form 7)\", \"no emails from Wordfence for 5 hours\"), and plugin names keep their capital letters.<\/li>\n<li>Fixed: a big flood could hide itself. The hourly picture measured this hour against a rhythm that included this hour, so late in the hour a flood on a quiet site could look almost usual. It is now measured against the hours before it.<\/li>\n<li>Fixed: the email log showed the database's clock, often UTC, instead of your site's time. The log list and View now show your site's own time zone.<\/li>\n<li>Fixed: deactivating or deleting the plugin left its one-off checks in WordPress's list of scheduled tasks. They did nothing, but they are now removed too.<\/li>\n<li>Fixed: sending an email again (a failed one, or one held back) sent it as HTML without its Cc or Bcc. It now goes as it was meant, with its own headers, and plain text stays plain text. The result is written on that email's own log entry, so a send that fails again never leaves a second copy to go out later, and a held email that cannot go yet stays held, ready to send with the rest.<\/li>\n<li>Fixed: when a mail server refused one address on an email to several people, every address on it was treated as not existing. Only the address the server named is offered for \"Stop sending to them\" now, and a bounce for someone who was not a recipient (a Bcc copy, a forward) never marks the email or its recipient.<\/li>\n<li>Improved: WooCommerce's plain-text emails are recognised by kind (order receipts, new order alerts) like its HTML ones.<\/li>\n<li>Fixed: an email held back by staging mode and sent later (from the log, or by asking \"send the held emails\") went out with \"[BLOCKED]\" in front of its subject. It now goes out with its real subject, and its log entry says Released, so it is never offered again.<\/li>\n<li>Fixed: the reason an email was blocked or suppressed was stored where its Message-ID belongs, so the log did not show it. It shows now, and older entries are corrected once when you update.<\/li>\n<li>Fixed: the Doctor's \"emails failed this week\" check rounded the share that went out up, so 543 of 544 read as 100%. It reads 99.8% now, like every other rate.<\/li>\n<li>Fixed: emails sent by a must-use plugin showed as \"Other emails\".<\/li>\n<li>Fixed: the health score briefly counted up from a negative number as the page opened.<\/li>\n<li>Fixed: two Plugin Check reports: the direct-access guard now sits right under the plugin header, and table names are escaped in every query.<\/li>\n<li>Changed: a few messages still called DadsFam AI \"the Brain\"; they now use its name.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li><strong>New: DadsFam AI.<\/strong> A new first screen, DadsFam SMTP \u2192 DadsFam AI, answers \"is my email working?\" in one sentence, with a health score out of 100. When something is wrong it says what, why, and what to do.<\/li>\n<li>New: every failed email is read the way the mail server meant it, in plain English, with the steps to fix it and whether sending again can work. It knows how Gmail, Microsoft 365, SendGrid, Amazon SES, Mailgun, Brevo, Postmark, Zoho, Yahoo and cPanel hosting word their refusals.<\/li>\n<li>New: the Doctor checks everything every day, a real sign-in to your mail server (nothing is sent), its certificate, SPF evaluated against the way your site really sends, DKIM found by itself, DMARC, MX, staging mode, other mail plugins, scheduled tasks and the log table, and gives you the exact DNS record to add when one is missing.<\/li>\n<li>New: DadsFam AI learns what your site sends, how often and when, and warns you when a kind of email goes quiet for longer than usual, floods (a form being used for spam), fails more than is normal for your site, or your mail server slows down.<\/li>\n<li>New: fixes, proven before anything changes. \"Ask me first\" prepares them for you to apply; Autopilot applies the safe ones by itself, keeps watching, and puts a change back if it makes things worse. Every change is in the diary with an Undo, and it learns from what you undo or turn down.<\/li>\n<li>New: Ask. Type a question about your email the way you would ask a person (\"did sarah@example.com get her receipt?\", \"did order 1234 go out?\", \"why did emails fail this week?\", \"what does 535 mean?\", \"stop emailing bob@example.com\") and get the answer from your own log, with buttons to act on it. It forgives typing mistakes, remembers what you just asked about, and learns your way of asking.<\/li>\n<li>New: the dashboard widget answers \"is my email working?\" and takes questions. One notice appears on the Dashboard and Plugins screens, only while email is actually failing, and it can be hidden for a day.<\/li>\n<li>New: an optional weekly letter every Monday: what worked, what failed and why, what DadsFam AI fixed and what needs you.<\/li>\n<li>New: twelve more AI abilities (brain-status, ask, run-doctor, explain-error, list-fixes, apply-fix, undo-change, set-brain-mode, get-diary, get-streams, find-email, resend-email), so an assistant connected through an MCP plugin can find out why email is failing and fix it.<\/li>\n<li>New: each logged email records which plugin or part of WordPress sent it, what kind of email it is, how long the hand-over took and what went wrong in a word, so the log can be read by kind (order receipts, password resets, each contact form).<\/li>\n<li>Fixed: when a mail server turned the sign-in down, the log only said \"Could not authenticate.\" because the mail program dropped the server's own words. The log now keeps them (\"535 5.7.8 Username and Password not accepted\").<\/li>\n<li>Fixed: an AI assistant changing one setting through the update-settings or import-settings ability reset every PRO setting (retries, tracking, the backup server). Only what is asked for changes now.<\/li>\n<li>Fixed: a test email that failed said only \"Check your SMTP credentials.\" It now shows what the mail server said and what it means.<\/li>\n<li>Fixed: every DadsFam SMTP screen was 20 pixels wider than the window, so the page could scroll sideways.<\/li>\n<li>Fixed: success rates were rounded to whole numbers, so 543 of 544 delivered showed as 100%. They now read 99.8%, and never 100% while something failed (Analytics, the health score and the dashboard widget).<\/li>\n<li>Fixed: the Settings page said passwords are stored with AES-256-CBC. They have been stored with AES-256-GCM since 2.0.4; only the label was out of date.<\/li>\n<li>Changed: the email log says why a failed email failed in plain words (\"That email address does not exist\"); the mail server's own words are a hover away and under View. The Connection column shows the provider's name (\"cPanel\") instead of its internal key.<\/li>\n<li>Changed: the DadsFam SMTP menu opens on DadsFam AI. Settings, Logs and everything else are where they were. With DadsFam AI switched off, the menu opens on Settings as before.<\/li>\n<\/ul>\n\n<h4>2.1.7<\/h4>\n\n<ul>\n<li>Fixed: the Reply-To setting was added to every email, even one that already said who to reply to. Mail programs then replied to both addresses, so when someone answered a contact-form enquiry, the site owner was copied in on a private conversation. The setting is now a default: it is only used when an email has no Reply-To of its own. Contact forms, enquiry forms and WooCommerce emails keep theirs.<\/li>\n<li>Fixed: the email log showed the Reply-To setting rather than the Reply-To the email actually went out with. It now records the real one.<\/li>\n<li>Fixed: resending an email from the log, and PRO's automatic retry, keep the email's original Reply-To.<\/li>\n<li>Fixed: after one email failed, the next email sent at the same moment went out over the same broken connection and failed too. That included the \"delivery failure\" alert, PRO's backup server (the email went back to the main server instead) and every PRO retry after the first. Each email now starts a fresh connection after a failure.<\/li>\n<li>Fixed: emails held back on purpose (by staging mode, the suppression list or PRO's hourly limit) were logged as \"failed\", so PRO's automatic retry could send them anyway. An email held back on a staging site could go out once blocking was switched off, and a deferred email could go out twice. They now have their own status (Blocked, Suppressed or Deferred), are never retried and no longer count as failures. Existing log entries are corrected once when you update.<\/li>\n<li>Fixed: opening the Settings screen put the provider's default port and encryption into the form, so saving any other setting (the From name, say) could quietly change how the site connects to its mail server. The form now shows what is saved, and only fills in a provider's defaults when you choose a provider.<\/li>\n<li>Changed: the Reply-To field is now called \"Default Reply-To email\" and says it is only used when an email has none of its own.<\/li>\n<\/ul>\n\n<h4>2.1.6<\/h4>\n\n<ul>\n<li>Fixed: opening an email in the log could show an empty white box instead of the email, so you had to reload the page, sometimes many times, before it showed. The email is now drawn fresh each time you open one, and it shows every time.<\/li>\n<li>Fixed: the dark background behind an open email covered only part of the screen.<\/li>\n<li>Fixed: with PRO's open tracking on, looking at an email in the log counted as the person opening it, so every look pushed the open figures up. Looking no longer counts.<\/li>\n<li>Improved: the window opens the moment you click View and says it is loading. If the email cannot be loaded, because the page has been open too long, your login has timed out or the connection dropped, it says so in plain words with a button to try again or reload the page. Before, nothing happened at all.<\/li>\n<li>Improved: links in the email open in a new tab, plain-text emails keep their line breaks, and the Escape key closes the window.<\/li>\n<li>Improved: the What's New screen shows the newest release at the top, PRO releases included.<\/li>\n<\/ul>\n\n<h4>2.1.5<\/h4>\n\n<ul>\n<li>Fixed: with PRO's automatic retry switched on, one failed email could turn into dozens. Each retry was logged as a brand-new email, that copy failed too and was retried in its turn, and every failure sent you another \"delivery failure\" alert. A retry now updates the email's original log entry, so it is tried the number of times you set and then it stops.<\/li>\n<li>Fixed: an email with no recipient address, such as an invoice for an order with no email on it, was queued for retry even though no retry could ever deliver it. It is now logged once, you get one alert that says there was nobody to send it to, and it is never retried.<\/li>\n<li>Fixed: resending a failed email from the log now updates that entry, so an email you have already resent by hand can never be sent a second time by the retry job.<\/li>\n<li>Changed: the Retries column in the email log shows a dash for an email that will not be retried.<\/li>\n<\/ul>\n\n<h4>2.1.4<\/h4>\n\n<ul>\n<li>Tidied: numbers read from the settings forms and the log screen are now cleaned exactly the way WordPress.org asks. Nothing changes in how the plugin works.<\/li>\n<li>Added: a translation template (languages\/dadsfam-email-smtp.pot), so the plugin can be translated.<\/li>\n<\/ul>\n\n<h4>2.1.3<\/h4>\n\n<ul>\n<li>Fixed: emails another plugin has stopped now stay stopped. If another plugin had already blocked an email (for example a \"test mode\" switch on a site that is not live yet), DadsFam SMTP could still send it whenever its own blocking mode was off. It now always respects that decision. Nothing changes for normal sending.<\/li>\n<li>Tidied: removed an old translation-loading call. WordPress has loaded plugin translations by itself since version 4.6.<\/li>\n<\/ul>\n\n<h4>2.1.2<\/h4>\n\n<ul>\n<li>Changed: the PRO note in the description now states the actual arrangement. There are two versions and one price -- R500 once off, roughly $35, per plugin. No subscription, no yearly renewal, no expiry date. Nothing about the free plugin has changed; it was never crippled and still is not.<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>Added screenshots to the plugin page, so you can see the settings, the deliverability score, the email log and the rest before installing. No change to the plugin itself.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li><strong>More of the plugin can now be run by an AI assistant.<\/strong> Reading settings, stats and deliverability already worked. What was missing was everything you actually need when mail goes wrong, so this adds it.<\/li>\n<li>Added: open a single log entry in full \u2014 who it went to, which provider carried it, and the exact error the server gave back. The stored message body and raw headers are deliberately never returned; that is the content of somebody's email and it has no business in an assistant's transcript.<\/li>\n<li>Added: list the failed emails still waiting to be retried, with the error that stopped each one. Retrying itself is a Pro feature, but seeing what failed and why is free.<\/li>\n<li>Added: export the mail configuration from one site and apply it to another, which makes setting up a row of sites the same way a single step. No password is ever included, so nothing sensitive travels between sites \u2014 each one still needs its own credential set before it can send.<\/li>\n<li>Added: a single support report gathering versions, the current configuration, the SPF\/DKIM\/DMARC checks and recent sending statistics, so reporting a problem no longer means collecting four things by hand.<\/li>\n<li>Tested up to WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>2.0.10<\/h4>\n\n<ul>\n<li>Packaging: trimmed the plugin tags to the five WordPress.org allows. The extra \"ai\" and \"mcp\" tags were being ignored on import, so they have been removed. No functional change.<\/li>\n<\/ul>\n\n<h4>2.0.9<\/h4>\n\n<ul>\n<li>Added: AI assistant support. If you use an MCP plugin such as WPVibe to connect Claude, ChatGPT or another AI agent to your site, it can now read your SMTP stats, logs and settings, check deliverability (SPF\/DKIM\/DMARC), send a test email and change your configuration for you \u2014 all through the new WordPress Abilities API (WordPress 6.9+).<\/li>\n<li>Every AI action requires administrator access, and your SMTP password is never exposed to the assistant.<\/li>\n<li>On WordPress versions without the Abilities API, nothing changes \u2014 the plugin works exactly as before.<\/li>\n<li>No changes to how the plugin sends, logs or tests email.<\/li>\n<\/ul>\n\n<h4>2.0.7<\/h4>\n\n<ul>\n<li>Added: a plain-English \"A word about PRO\" note in the readme \u2014 what stays free, why the optional add-on exists, and what it does. No features were moved behind a paywall.<\/li>\n<li>No changes to how the plugin sends, logs or tests email.<\/li>\n<\/ul>\n\n<h4>2.0.6<\/h4>\n\n<ul>\n<li>Changed: uninstall now removes only this plugin's own data, addressed by exact name \u2014 its three options, its scheduled event and its log table \u2014 instead of sweeping the options table for anything sharing the \"dfsmtp_\" prefix. Data belonging to a separate add-on that happens to use the same prefix is no longer removed; each plugin cleans up only what it owns, and the optional PRO add-on removes its own data through its own uninstall routine.<\/li>\n<li>Changed: uninstall now runs its cleanup on every site of a multisite network rather than only the current one, so nothing is left behind on the other sites. The per-site \"keep data on uninstall\" preference is still honoured for each site.<\/li>\n<\/ul>\n\n<h4>2.0.5<\/h4>\n\n<ul>\n<li>Security: an imported configuration file is now cleaned key by key against a list of the settings this plugin actually owns, with each value checked for what that setting is allowed to contain. Decoding a file is not the same as trusting it, and an edited export can no longer introduce settings the plugin does not own.<\/li>\n<li>Added: an External services section to this readme, setting out exactly what is sent to your SMTP provider, when, and where \u2014 along with the terms and privacy policies of the providers there are presets for.<\/li>\n<li>Fixed: the plugin header pointed at a page that did not exist.<\/li>\n<li>Changed: the text domain now matches the plugin slug, so the community translation tools can pick the plugin up.<\/li>\n<\/ul>\n\n<h4>2.0.4<\/h4>\n\n<ul>\n<li>Security: stored SMTP passwords now use authenticated AES-256-GCM instead of AES-256-CBC, so a tampered value is detected rather than silently decrypted into something else. Passwords saved by earlier versions continue to work and are read transparently.<\/li>\n<li>Security: removed the fallback that stored a password as plain text or base64 if encryption failed. If a server genuinely cannot encrypt, the save is refused with a clear message instead of quietly saving an unprotected password.<\/li>\n<li>Changed: uninstall now removes everything under this plugin's own option, transient and scheduled-event prefix generically, rather than listing add-on option names.<\/li>\n<li>Changed: tightened the inline justifications on the direct database calls used during uninstall and on the raw socket used by the connection test.<\/li>\n<\/ul>\n\n<h4>2.0.3<\/h4>\n\n<ul>\n<li>Fixed: WooCommerce email types were identified by searching the subject line for keywords, so any email whose subject contained a word like \"Completed\" or \"Invoice\" was logged as a WooCommerce order email. The type now comes from WooCommerce's own email object and is only recorded when WooCommerce actually sent the email.<\/li>\n<li>Fixed: failed sends did not record the WooCommerce email type, so a failed order email could not be told apart from any other failure in the log.<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>Version number aligned with the separate PRO add-on. No functional change to this plugin.<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Fixed: the SMTP connection tester used an implicitly nullable parameter, which is deprecated in PHP 8.4 and produced a notice on newer hosts.<\/li>\n<li>Fixed: CSV export now passes the escape argument to fputcsv() explicitly. PHP 8.4 deprecates relying on the default, and the value used produces RFC 4180 output that spreadsheet software reads correctly.<\/li>\n<li>Verified compatible with PHP 8.0 through 8.4 and with WordPress 7.0.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Fixed: a failed delivery could trigger an unbounded chain of failure-alert emails, exhausting PHP memory and overloading the mail server. The alert path is now guarded against re-entry.<\/li>\n<li>Fixed: the SMTP connection test now terminates commands with CRLF as RFC 5321 requires, so strict servers such as Microsoft 365 no longer hang or reject the handshake.<\/li>\n<li>Fixed: the suppression list now matches whole addresses and domains rather than loose substrings, so a short entry can no longer block unrelated recipients.<\/li>\n<li>Fixed: uninstall now removes every option the plugin creates, including the log table version marker.<\/li>\n<li>Fixed: the log table is now created with all columns present rather than relying on a later migration step.<\/li>\n<li>Changed: email logging is unlimited on every site, with retention controlled by a \"keep logs for N days\" setting instead of a fixed entry cap.<\/li>\n<li>Changed: CSV export and the full email body viewer are available on every site.<\/li>\n<li>Changed: the plugin no longer overrides the WordPress core \"weekly\" cron schedule.<\/li>\n<li>Changed: admin styles are served from an enqueued stylesheet instead of an inline style block.<\/li>\n<li>New: documented hook API so add-ons can extend the send pipeline and admin screens.<\/li>\n<li>Upgrading from 1.6.x preserves all settings and log entries.<\/li>\n<\/ul>\n\n<h4>1.6.3<\/h4>\n\n<ul>\n<li>Routing rules with an empty match value are skipped instead of capturing every email.<\/li>\n<li>WooCommerce email detection moved to a hook-based flag consumed by a single outgoing email.<\/li>\n<li>The log list view no longer selects the body column, preventing memory exhaustion on large logs.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>New email health score combining DNS authentication, configuration and send history.<\/li>\n<li>New dashboard widget.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Configuration backup and migrate as JSON.<\/li>\n<li>Guided first-run setup.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Blocking mode for staging sites.<\/li>\n<li>Suppression list.<\/li>\n<li>SPF, DKIM, DMARC and MX deliverability checker.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Reliable WordPress email over SMTP, with DadsFam AI: every failure explained, daily checks, safe self-fixes and answers about your email.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/349487","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=349487"}],"author":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/dadsfam"}],"wp:attachment":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=349487"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=349487"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=349487"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=349487"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=349487"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=349487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}