{"id":115045,"date":"2019-12-26T22:41:07","date_gmt":"2019-12-26T22:41:07","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/custom-recovery-mode-email\/"},"modified":"2026-08-12T16:14:38","modified_gmt":"2026-08-12T16:14:38","slug":"custom-recovery-mode-email","status":"publish","type":"plugin","link":"https:\/\/fon.wordpress.org\/plugins\/custom-recovery-mode-email\/","author":6208082,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.0","stable_tag":"2.0.0","tested":"7.0.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Custom Recovery Mode Email","header_author":"jairoochoa","header_description":"Change the recipient address when WordPress sends an email if a Fatal Error occurs.","assets_banners_color":"808685","last_updated":"2026-08-12 16:14:38","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.dixitalmedia.com\/#que-hacemos","header_author_uri":"https:\/\/dixitalmedia.com","rating":5,"author_block_rating":0,"active_installs":60,"downloads":3244,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.6":{"tag":"1.0.6","author":"jairo.ochoa","date":"2026-08-12 15:15:53"},"2.0.0":{"tag":"2.0.0","author":"jairo.ochoa","date":"2026-08-12 16:14:20"}},"upgrade_notice":{"2.0.0":"<p>Major release: full visual redesign of the admin page and complete internal rewrite. Existing settings are preserved.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":"1"},"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":2218389,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":2967978,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":2967978,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.6","2.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3643734,"resolution":"1","location":"assets","locale":"","width":776,"height":1374},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3643738,"resolution":"2","location":"assets","locale":"","width":691,"height":594},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3643739,"resolution":"3","location":"assets","locale":"","width":677,"height":905},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3643744,"resolution":"4","location":"assets","locale":"","width":722,"height":842}},"screenshots":{"1":"Custom Recovery Mode Email Settings  \/assets\/screenshot-1.png","2":"Custom Recovery Mode Email (Network Settings) - part 1   \/assets\/screenshot-2.png","3":"Custom Recovery Mode Email (Network Settings) - part 2   \/assets\/screenshot-3.png","4":"Custom Recovery Mode Email Settings - subsite    \/assets\/screenshot-4.png"}},"plugin_section":[],"plugin_tags":[57148,22682,441,4906,173591],"plugin_category":[51],"plugin_contributors":[180343,163908],"plugin_business_model":[],"class_list":["post-115045","plugin","type-plugin","status-publish","hentry","plugin_tags-autoupdate","plugin_tags-fatal-error","plugin_tags-multisite","plugin_tags-notifications","plugin_tags-recovery-mode","plugin_category-multisite","plugin_contributors-dixitalmedia","plugin_contributors-jairoochoa","plugin_committers-jairoochoa"],"banners":{"banner":"https:\/\/ps.w.org\/custom-recovery-mode-email\/assets\/banner-772x250.jpg?rev=2967978","banner_2x":"https:\/\/ps.w.org\/custom-recovery-mode-email\/assets\/banner-1544x500.jpg?rev=2967978","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/custom-recovery-mode-email\/assets\/icon-256x256.png?rev=2218389","icon_2x":"https:\/\/ps.w.org\/custom-recovery-mode-email\/assets\/icon-256x256.png?rev=2218389","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/custom-recovery-mode-email\/assets\/screenshot-1.png?rev=3643734","caption":"Custom Recovery Mode Email Settings  \/assets\/screenshot-1.png"},{"src":"https:\/\/ps.w.org\/custom-recovery-mode-email\/assets\/screenshot-2.png?rev=3643738","caption":"Custom Recovery Mode Email (Network Settings) - part 1   \/assets\/screenshot-2.png"},{"src":"https:\/\/ps.w.org\/custom-recovery-mode-email\/assets\/screenshot-3.png?rev=3643739","caption":"Custom Recovery Mode Email (Network Settings) - part 2   \/assets\/screenshot-3.png"},{"src":"https:\/\/ps.w.org\/custom-recovery-mode-email\/assets\/screenshot-4.png?rev=3643744","caption":"Custom Recovery Mode Email Settings - subsite    \/assets\/screenshot-4.png"}],"raw_content":"<!--section=description-->\n<p>Since WordPress 5.2 there is a built-in feature that detects when a plugin or theme causes a fatal error on your site, and notifies you with an automated email. Sometimes the message lands in the wrong inbox, or with a sender name that does not match your brand.<\/p>\n\n<p>With <em>Custom Recovery Mode Email<\/em> you can:<\/p>\n\n<ul>\n<li>Set the recipient address for the Recovery Mode email when a Fatal Error occurs.<\/li>\n<li>Customize the From name and email address used by WordPress system emails.<\/li>\n<li>Adjust the rate limit between Recovery Mode emails (in days, hours or minutes).<\/li>\n<li>Toggle individual administrative notifications: password changes, new user registrations, and plugin\/theme auto-update results (success and failure separately).<\/li>\n<li>Configure everything network-wide on Multisite, with optional per-site overrides for the recipient and the sender.<\/li>\n<\/ul>\n\n<p>The plugin ships with a redesigned settings page that organises every option into clear, focused cards, making it easy to find what you need at a glance.<\/p>\n\n<h3>Translations<\/h3>\n\n<ul>\n<li>English<\/li>\n<li>Espa\u00f1ol (Espa\u00f1a)<\/li>\n<li>Euskara (thanks to @garridinsi)<\/li>\n<li>Galego<\/li>\n<li>Svenska (thanks to @tobifjellner)<\/li>\n<\/ul>\n\n<p><em>Note:<\/em> Please contact us if you would like to help translating the plugin into your language.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the entire plugin folder to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the \"Plugins\" menu in WordPress (or \"Network Activate\" in Multisite).<\/li>\n<li>Go to <strong>Settings \u2192 Recovery Mode Email<\/strong> to access the settings page (or <strong>Network Admin \u2192 Settings \u2192 Recovery Mode Email<\/strong> in Multisite).<\/li>\n<\/ol>\n\n<h4>Minimum Requirements<\/h4>\n\n<ul>\n<li>PHP 7.4 or greater. Tested with PHP 8.2.<\/li>\n<li>WordPress 5.2 or greater.<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20with%20wordpress%20multisite%3F\"><h3>Does it work with WordPress Multisite?<\/h3><\/dt>\n<dd><p>Yes. Network-wide defaults are configured from <strong>Network Admin \u2192 Settings \u2192 Recovery Mode Email<\/strong>. Each individual site can override only the Recovery recipient and the mail sender from its own Settings page.<\/p><\/dd>\n<dt id=\"where%20do%20i%20configure%20the%20rate%20limit%20and%20notification%20toggles%20in%20multisite%3F\"><h3>Where do I configure the rate limit and notification toggles in Multisite?<\/h3><\/dt>\n<dd><p>In Multisite, the rate limit and the notification toggles (password change, auto-updates, new users) are network-wide and live in the Network Admin page only. Individual sites cannot override these.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20leave%20a%20field%20empty%3F\"><h3>What happens if I leave a field empty?<\/h3><\/dt>\n<dd><p>Empty fields fall back to sensible defaults: the site administration email for the recipient, the WordPress default sender for the From address, and the network-level value when overriding from a single site in Multisite.<\/p><\/dd>\n<dt id=\"will%20my%20existing%20settings%20be%20preserved%20when%20upgrading%20from%201.x%3F\"><h3>Will my existing settings be preserved when upgrading from 1.x?<\/h3><\/dt>\n<dd><p>Yes. The 2.0.0 release is a visual and internal overhaul, but the data schema and option names are unchanged. Your saved configuration carries over automatically.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Feature: new \"WPVulnerability Email\" field below the Mail Sender Email, shown only when the WPVulnerability plugin is active. The plugin defines the WPVULNERABILITY_MAIL constant (only if not already defined elsewhere) using the configured value, or a fallback of wpvulnerability@ if the field is empty.<\/li>\n<li>Feature: new sidebar banner promoting the Dixitalmedia plugins on WordPress.org, dismissible independently from the FactuPress banner.<\/li>\n<li>Multisite: the new WPVulnerability email can be set network-wide and overridden per site, following the same pattern as the recovery email and the sender override.<\/li>\n<li>Major: full visual redesign of the admin settings page. Each section is now grouped into a card with its own icon, title and description, replacing the previous flat layout.<\/li>\n<li>Major: complete internal rewrite. The plugin now follows an OOP architecture with namespaces, autoloading via Composer, a service container, and dedicated classes for hooks, services, settings and lifecycle. The public behavior is unchanged; existing settings are preserved.<\/li>\n<li>New: hero header on top of the settings page summarising the plugin scope at a glance.<\/li>\n<li>New: dedicated card for the Notifications section, with refined toggle switches.<\/li>\n<li>New: callout component for Multisite-context notices (replaces the previous generic admin notice on per-site pages).<\/li>\n<li>New: action bar at the bottom of the form with a loading state and spinner when saving, plus <code>aria-busy<\/code> for assistive technologies.<\/li>\n<li>Improvement: admin assets reorganised into <code>assets\/css\/<\/code> and <code>assets\/js\/<\/code> for clarity. Inline <code>&lt;h2&gt;<\/code> styles removed and replaced with proper CSS classes.<\/li>\n<li>Improvement: focus states on inputs and switches now use <code>:focus-visible<\/code> to avoid showing outlines on mouse clicks.<\/li>\n<li>Improvement: <code>prefers-reduced-motion<\/code> is honoured for the save spinner animation.<\/li>\n<li>Compatibility: tested up to WordPress 6.9.4.<\/li>\n<\/ul>\n\n<h4>1.5.5<\/h4>\n\n<ul>\n<li>Hardening: added direct file access protection (ABSPATH guard) to all PHP source files.<\/li>\n<li>Hardening: form action URL is now explicitly escaped on output in the Network Settings page.<\/li>\n<li>Hardening: $_SERVER['REQUEST_METHOD'] is now properly unslashed and sanitized before use.<\/li>\n<li>Hardening: exception messages in the service container are escaped before being passed to the runtime.<\/li>\n<li>Cleanup: removed legacy load_plugin_textdomain() call (WordPress loads translations automatically since 4.6).<\/li>\n<li>Cleanup: removed leftover error_log() debug call from the service container.<\/li>\n<li>Compatibility: tested up to WordPress 6.9.<\/li>\n<\/ul>\n\n<h4>1.5.3<\/h4>\n\n<ul>\n<li>Fix: fatal error on boot caused by argument count mismatch in UserNotificationsHooks.<\/li>\n<li>Fix: cancelling auto-update emails no longer disables password change notifications as a side effect.<\/li>\n<li>Fix: WPVulnerability sender override is now scoped to emails actually sent by that plugin (no longer reformats every email site-wide).<\/li>\n<li>Fix: notification toggles are now evaluated at runtime instead of at plugin boot, which broke decisions in Multisite when the active site changed.<\/li>\n<li>Fix: From name was missing on overridden emails because the From filter reset the override flag before the From-name filter ran.<\/li>\n<li>Fix: Network Admin form now submits via admin-post.php (canonical pattern) and shows the success notice via redirect.<\/li>\n<li>Fix: settings page no longer bypasses the repository to read the network option directly.<\/li>\n<li>Fix: rate limit is clamped to a minimum of 60 seconds to prevent accidental disabling.<\/li>\n<li>Fix: ServiceContainer no longer calls a non-existent write_log() function.<\/li>\n<li>Cleanup: removed dead code (unused Notices class, unused repository implementations, no-op TextDomainLoader).<\/li>\n<li>Improvement: admin CSS moved to assets\/admin.css and properly enqueued.<\/li>\n<li>Improvement: TextDomainLoader actually loads the textdomain on init for self-hosted installs.<\/li>\n<\/ul>\n\n<h4>1.5.2<\/h4>\n\n<ul>\n<li>Refactor to OOP with vendor and autoload.<\/li>\n<li>Added compatibility with WordPress Multisite.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Minor fixes.<\/li>\n<\/ul>\n\n<h4>1.5<\/h4>\n\n<ul>\n<li>Security updates.<\/li>\n<li>Now the plugin also changes the recipient for password change and plugins and themes autoupdates emails.<\/li>\n<li>Updated last WordPress version tested.<\/li>\n<li>Added update email settings.<\/li>\n<li>Added password change email setting.<\/li>\n<li>Change sender for WPVulnerability plugin.<\/li>\n<\/ul>\n\n<h4>1.1<\/h4>\n\n<ul>\n<li>Security updates.<\/li>\n<li>Now the plugin also changes the recipient for password change and plugins and themes autoupdates emails.<\/li>\n<li>Updated last WordPress version tested.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Updated last WordPress version tested.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Updated last WordPress version tested.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Added class \"regular-text\" to input fields.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fix to prevent activation in WordPress Multisite to avoid site to crash.<\/li>\n<li>Fix wrong text domain.<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial Release.<\/li>\n<\/ul>","raw_excerpt":"Customize the recipient, sender and behavior of WordPress recovery, autoupdate and administrative emails. Multisite-aware.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/115045","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=115045"}],"author":[{"embeddable":true,"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jairoochoa"}],"wp:attachment":[{"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=115045"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=115045"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=115045"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=115045"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=115045"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fon.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=115045"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}