{"id":293353,"date":"2026-04-06T03:33:29","date_gmt":"2026-04-06T03:33:29","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/tempmails\/"},"modified":"2026-04-06T03:31:18","modified_gmt":"2026-04-06T03:31:18","slug":"tempmails","status":"publish","type":"plugin","link":"https:\/\/ur.wordpress.org\/plugins\/tempmails\/","author":23464790,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.7","stable_tag":"1.0.7","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Tempmails","header_author":"neosmartapps","header_description":"Free open source temporary email platform with IMAP support.","assets_banners_color":"1c244b","last_updated":"2026-04-06 03:31:18","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/paypal.me\/growmify","header_plugin_uri":"https:\/\/tempmails.cv","header_author_uri":"https:\/\/neosmartapps.cv","rating":5,"author_block_rating":0,"active_installs":10,"downloads":48,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.7":{"tag":"1.0.7","author":"neosmartapps","date":"2026-04-06 03:31:18"}},"upgrade_notice":{"1.0.7":"<p>Security release. Fixes input sanitization in ajax_delete_message() and\najax_mark_seen(). Resolves an infinite IMAP re-fetch loop. All addon\nhooks retain identical signatures \u2014 no breaking changes. Update immediately.<\/p>\n\n<hr \/>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3499429,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3499429,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500-rtl.png":{"filename":"banner-1544x500-rtl.png","revision":3499429,"resolution":"1544x500","location":"assets","locale":""},"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3499429,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250-rtl.png":{"filename":"banner-772x250-rtl.png","revision":3499433,"resolution":"772x250","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3499429,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.7"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3499429,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3499429,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3499429,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3499429,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3499429,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3499429,"resolution":"6","location":"assets","locale":""},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3499429,"resolution":"7","location":"assets","locale":""}},"screenshots":{"1":"Frontend inbox \u2014 email generation, copy button, and real-time message\nlist","2":"Message modal \u2014 full email content with attachment download support","3":"Admin dashboard \u2014 statistics cards, IMAP status, and quick action\nbuttons","4":"Settings \u2014 General tab with fetch interval and retention controls","5":"Settings \u2014 IMAP tab with connection credentials and live test button","6":"Design panel \u2014 live preview with color pickers and label customization","7":"Addon Health page \u2014 per-addon error log and hook status"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[12886,259485,36366,259486,12887],"plugin_category":[],"plugin_contributors":[259488,259487],"plugin_business_model":[],"class_list":["post-293353","plugin","type-plugin","status-publish","hentry","plugin_tags-disposable-email","plugin_tags-email-privacy","plugin_tags-imap","plugin_tags-temp-mails","plugin_tags-temporary-email","plugin_contributors-neoparker007","plugin_contributors-neosmartapps","plugin_committers-neosmartapps"],"banners":{"banner":"https:\/\/ps.w.org\/tempmails\/assets\/banner-772x250-rtl.png?rev=3499433","banner_2x":"https:\/\/ps.w.org\/tempmails\/assets\/banner-1544x500-rtl.png?rev=3499429","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/tempmails\/assets\/icon-128x128.png?rev=3499429","icon_2x":"https:\/\/ps.w.org\/tempmails\/assets\/icon-256x256.png?rev=3499429","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/tempmails\/assets\/screenshot-1.png?rev=3499429","caption":"Frontend inbox \u2014 email generation, copy button, and real-time message\nlist"},{"src":"https:\/\/ps.w.org\/tempmails\/assets\/screenshot-2.png?rev=3499429","caption":"Message modal \u2014 full email content with attachment download support"},{"src":"https:\/\/ps.w.org\/tempmails\/assets\/screenshot-3.png?rev=3499429","caption":"Admin dashboard \u2014 statistics cards, IMAP status, and quick action\nbuttons"},{"src":"https:\/\/ps.w.org\/tempmails\/assets\/screenshot-4.png?rev=3499429","caption":"Settings \u2014 General tab with fetch interval and retention controls"},{"src":"https:\/\/ps.w.org\/tempmails\/assets\/screenshot-5.png?rev=3499429","caption":"Settings \u2014 IMAP tab with connection credentials and live test button"},{"src":"https:\/\/ps.w.org\/tempmails\/assets\/screenshot-6.png?rev=3499429","caption":"Design panel \u2014 live preview with color pickers and label customization"},{"src":"https:\/\/ps.w.org\/tempmails\/assets\/screenshot-7.png?rev=3499429","caption":"Addon Health page \u2014 per-addon error log and hook status"}],"raw_content":"<!--section=description-->\n<blockquote>\n  <p><strong>Self-hosted. Privacy-first. Fully yours.<\/strong><\/p>\n<\/blockquote>\n\n<p>Tempmails turns your WordPress site into a <strong>self-hosted temporary email\nservice<\/strong>. Visitors generate a random disposable email address, receive\nmessages in a real-time inbox, and discard them when done \u2014 all without\nleaving your site.<\/p>\n\n<p>Unlike third-party services, Tempmails runs entirely on <strong>your own server\nand IMAP mailbox<\/strong>. You own the data, the domain, and the brand.<\/p>\n\n\n\n<p>\ud83d\udd12 <strong>No third-party email APIs<\/strong>\n\ud83d\udcec <strong>Real IMAP inbox \u2014 not a simulation<\/strong>\n\ud83c\udfa8 <strong>Material Design 3 UI \u2014 beautiful out of the box<\/strong>\n\u26a1 <strong>AJAX-powered \u2014 no page reloads<\/strong><\/p>\n\n\n\n<h4>\ud83d\ude80 Quick Links<\/h4>\n\n<p>Everything you need to get started, get help, and stay connected:<\/p>\n\n<ul>\n<li>\ud83c\udf10 <strong>Official Website<\/strong> \u2014 <a href=\"https:\/\/tempmails.cv\/\">tempmails.cv<\/a> \u2014 docs,\nroadmap, and addon announcements<\/li>\n<li>\ud83c\udfac <strong>Installation Tutorial<\/strong> \u2014 Watch the step-by-step video guide below<\/li>\n<li>\ud83d\udcfa <strong>YouTube Channel<\/strong> \u2014 <a href=\"https:\/\/www.youtube.com\/@NeoSmartApps101\">NeoSmartApps on YouTube<\/a>\n\u2014 tutorials, walkthroughs, and new release demos<\/li>\n<li>\u2615 <strong>Support the Project<\/strong> \u2014 <a href=\"https:\/\/paypal.me\/growmify\">Buy us a coffee via PayPal<\/a>\n\u2014 Tempmails is free forever; your support keeps development alive<\/li>\n<li>\ud83d\udda5\ufe0f <strong>Need Hosting?<\/strong> \u2014 Tempmails works best on a VPS or shared host with\ncatch-all IMAP support. We recommend <a href=\"https:\/\/www.hostinger.com\/in?REFERRALCODE=neoparker\">Hostinger<\/a>\n<em>(affiliate link \u2014 we earn a small commission at no extra cost to you)<\/em><\/li>\n<\/ul>\n\n<h4>\ud83c\udfac Watch: Full Installation Tutorial<\/h4>\n\n<p>https:\/\/youtu.be\/8SKRdyEUrog?si=KHfUT0KicbYphO1M<\/p>\n\n\n\n<h4>Core Features<\/h4>\n\n<p><strong>\ud83d\udce8 Email Engine<\/strong><\/p>\n\n<ul>\n<li>IMAP Email Fetching \u2014 connects to any catch-all IMAP mailbox<\/li>\n<li>Auto Email Generation \u2014 random disposable addresses on your own domains<\/li>\n<li>Real-time Inbox \u2014 AJAX-powered message viewer with configurable\nauto-refresh<\/li>\n<li>Attachment Support \u2014 download files with 40+ allowed extensions<\/li>\n<\/ul>\n\n<p><strong>\ud83c\udfa8 Design &amp; UI<\/strong><\/p>\n\n<ul>\n<li>Material Design 3 UI \u2014 modern, responsive inbox with Inter &amp; Poppins fonts<\/li>\n<li>White-labeled \u2014 fully rebrandable, no third-party branding in the UI<\/li>\n<li>Design Panel \u2014 live color picker and label customization in admin<\/li>\n<\/ul>\n\n<p><strong>\ud83d\udee1\ufe0f Privacy &amp; Data<\/strong><\/p>\n\n<ul>\n<li>Soft Delete \u2014 messages are never hard-deleted; safe for compliance<\/li>\n<li>Cookie-based sessions \u2014 no user accounts or registration required<\/li>\n<li>Zero external data transmission \u2014 all data stays on your server<\/li>\n<\/ul>\n\n<p><strong>\u2699\ufe0f WordPress Native<\/strong><\/p>\n\n<ul>\n<li>Uses WP database, cron, options, nonces, and security APIs throughout<\/li>\n<li>Settings API compliant admin panel<\/li>\n<li>Full i18n\/l10n support with <code>.pot<\/code> file included<\/li>\n<\/ul>\n\n<h4>Shortcode<\/h4>\n\n<p>Place the inbox anywhere on your site with one shortcode:<\/p>\n\n<pre><code>[tempmails_inbox]\n<\/code><\/pre>\n\n<p>This renders the full inbox UI \u2014 email generation, copy button,\nauto-refresh, message list, and message viewer modal.<\/p>\n\n<h4>Addon Ecosystem<\/h4>\n\n<p>Tempmails Core is <strong>frozen infrastructure<\/strong>. All new functionality is\ndelivered via addons using a documented, stable hook system \u2014 your site\nnever breaks on Core updates.<\/p>\n\n<p>Available addon hooks cover: email generation, message routing, inbox\naccess control, multi-domain support, billing integration, and more.\nSee the <strong>Hooks<\/strong> section below for the full reference.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>Tempmails stores temporary email addresses in <strong>browser cookies<\/strong> to\nmaintain inbox sessions between page loads. No personal data is collected,\nstored against user accounts, or transmitted to any external service.\nSee <strong>External Services<\/strong> below for details on the optional GitHub\necosystem feed.<\/p>\n\n\n\n<h3>Hooks<\/h3>\n\n<p>Tempmails exposes a complete hook system for addon developers. All hooks\nbelow are <strong>stable and frozen<\/strong> \u2014 they will not be renamed, removed, or\nhave their signatures changed in any minor version.<\/p>\n\n<h4>Action Hooks<\/h4>\n\n<ul>\n<li><code>tempmails_loaded<\/code> \u2014 Core fully initialized; safe for addon bootstrap<\/li>\n<li><code>tempmails_core_ready<\/code> \u2014 fires after DB integrity check; passes Core\nversion string<\/li>\n<li><code>tempmails_activated<\/code> \u2014 fires on plugin activation; safe for addon setup<\/li>\n<li><code>tempmails_deactivated<\/code> \u2014 fires on plugin deactivation<\/li>\n<li><code>tempmails_email_generated<\/code> \u2014 new address generated; params: <code>$email<\/code>,\n  $ip<\/li>\n<li><code>tempmails_inbox_accessed<\/code> \u2014 user opened inbox; params: <code>$email<\/code>, <code>$ip<\/code><\/li>\n<li><code>tempmails_message_received<\/code> \u2014 new message stored; params: <code>$message_id<\/code>,\n  $to_address<\/li>\n<li><code>tempmails_message_marked_seen<\/code> \u2014 message read; params: <code>$message_id<\/code><\/li>\n<li><code>tempmails_message_deleted<\/code> \u2014 soft delete triggered; params: <code>$message_id<\/code>,\n  $email<\/li>\n<li><code>tempmails_cleanup_completed<\/code> \u2014 cron cleanup finished; params:\n  $deleted_count<\/li>\n<li><code>tempmails_fetch_completed<\/code> \u2014 fetch cycle finished; params: <code>$results<\/code>\narray<\/li>\n<\/ul>\n\n<h4>Filter Hooks<\/h4>\n\n<ul>\n<li><code>tempmails_registered_addons<\/code> \u2014 register your addon for the Addons admin\npage<\/li>\n<li><code>tempmails_generated_email<\/code> \u2014 modify a generated address before returning\nit<\/li>\n<li><code>tempmails_available_domains<\/code> \u2014 modify the domain list available for\ngeneration<\/li>\n<li><code>tempmails_can_fetch_messages<\/code> \u2014 allow\/block a fetch cycle; params:\n  $bool, <code>$engine<\/code><\/li>\n<li><code>tempmails_can_process_message<\/code> \u2014 allow\/block a single message; params:\n  $bool, <code>$message<\/code><\/li>\n<li><code>tempmails_can_store_message<\/code> \u2014 allow\/block DB insert; params: <code>$bool<\/code>,\n  $data<\/li>\n<li><code>tempmails_can_read_inbox<\/code> \u2014 allow\/block inbox access; params: <code>$bool<\/code>,\n  $email<\/li>\n<li><code>tempmails_message_content<\/code> \u2014 filter body before display; params:\n  $content, <code>$message_id<\/code><\/li>\n<li><code>tempmails_default_settings<\/code> \u2014 modify default option values on activation<\/li>\n<li><code>tempmails_inbox_attributes<\/code> \u2014 modify shortcode default attributes<\/li>\n<li><code>tempmails_admin_dashboard_stats<\/code> \u2014 extend dashboard stat cards<\/li>\n<li><code>tempmails_settings_tabs<\/code> \u2014 add custom tabs to the Settings page<\/li>\n<\/ul>\n\n\n\n<h3>External Services<\/h3>\n\n<h4>Ecosystem Feed (Optional \u2014 Default On)<\/h4>\n\n<p>Tempmails fetches a public JSON file from GitHub to display addon and\necosystem information inside the WordPress admin panel.<\/p>\n\n<p><strong>What this connection does:<\/strong><\/p>\n\n<ul>\n<li>Fires only when viewing Tempmails admin pages<\/li>\n<li>Retrieves only public, non-personal JSON content<\/li>\n<li>Transmits no user data, site URL, or any identifiable information<\/li>\n<li>Results are cached locally for 1 hour to minimize requests<\/li>\n<\/ul>\n\n<p>Remote endpoint:\nhttps:\/\/raw.githubusercontent.com\/ubermensch-site\/tempmails-ecosystem\/main\/ecosystem.json<\/p>\n\n<p>Service provider: GitHub\nPrivacy policy: https:\/\/docs.github.com\/en\/site-policy\/privacy-policies\/github-general-privacy-statement<\/p>\n\n<p>To <strong>disable this connection entirely<\/strong>, uncheck <strong>Ecosystem Feed<\/strong> under\n<strong>Tempmails \u2192 Settings \u2192 General<\/strong>. Hardcoded fallback content is shown\ninstead \u2014 no requests are made.<\/p>\n\n<h4>Google Fonts<\/h4>\n\n<p>The frontend inbox loads the <strong>Inter<\/strong> and <strong>Poppins<\/strong> typefaces and the\n<strong>Material Symbols<\/strong> icon font from Google Fonts CDN.<\/p>\n\n<p><strong>What this connection does:<\/strong><\/p>\n\n<ul>\n<li>Fires only on pages where <code>[tempmails_inbox]<\/code> is rendered<\/li>\n<li>Transmits the visitor's IP address to Google as part of a standard font\nrequest<\/li>\n<\/ul>\n\n<p>Service provider: Google Fonts\nPrivacy policy: https:\/\/developers.google.com\/fonts\/faq\/privacy<\/p>\n\n<p>To avoid this (e.g. for GDPR compliance), dequeue <code>tempmails-google-fonts<\/code>\nand load self-hosted font copies instead.<\/p>\n\n\n\n<h3>Developers<\/h3>\n\n<p>This section documents internal implementation details, security practices,\nand notes for addon developers.<\/p>\n\n<h4>Security Hardening Log<\/h4>\n\n<p>All security changes are tracked here for auditing purposes.<\/p>\n\n<p><strong>2026-04-04 \u2014 Security Review Pass (v1.0.7 patch)<\/strong><\/p>\n\n<ol>\n<li><strong>class-core.php<\/strong> \u2014 <code>ajax_delete_message()<\/code>: <code>$_POST['message_id']<\/code>\nwas <code>wp_unslash()<\/code>-ed but not sanitized, with a <code>phpcs:ignore<\/code>\nsuppression comment masking the warning. Now wrapped with\n    sanitize_text_field( wp_unslash( ... ) ). Suppression comment removed.<\/li>\n<\/ol>\n\n<p><strong>2026-04-02 \u2014 Security Review Pass (v1.0.7 patch)<\/strong><\/p>\n\n<ol>\n<li><strong>class-design.php<\/strong> \u2014 Removed raw <code>&lt;style&gt;<\/code> echo from <code>render_page()<\/code>.\nStatic CSS moved to <code>assets\/css\/admin.css<\/code>.<\/li>\n<li><strong>class-design.php<\/strong> \u2014 <code>inject_css_variables()<\/code> refactored: replaced\n   echo \"...\" with <code>wp_add_inline_style('tempmails-admin', ...)<\/code>.\nAll <code>$v()<\/code> return values now pass through <code>esc_attr()<\/code>.<\/li>\n<li><strong>class-design.php<\/strong> \u2014 <code>inject_frontend_css_variables()<\/code> refactored:\nall CSS values escaped with <code>esc_attr()<\/code>, <code>wp_strip_all_tags()<\/code> applied.<\/li>\n<li><strong>class-design.php<\/strong> \u2014 <code>wp_footer<\/code> fallback replaced raw <code>echo '&lt;style&gt;'<\/code>\nwith a dummy registered style handle.<\/li>\n<li><strong>class-tempmails-shortcodes.php<\/strong> \u2014 Inline <code>&lt;script&gt;<\/code> replaced with\n   wp_add_inline_script('tempmails-frontend', ...).<\/li>\n<li><strong>class-ecosystem.php<\/strong> \u2014 Inline <code>&lt;script&gt;<\/code> replaced with\n   wp_add_inline_script('tempmails-admin', ...).<\/li>\n<li><strong>class-core.php<\/strong> \u2014 <code>ajax_mark_seen()<\/code>: sanitized with\n   sanitize_text_field( wp_unslash( ... ) ).<\/li>\n<li><strong>class-admin.php<\/strong> \u2014 <code>save_settings()<\/code>: Raw <code>$_POST<\/code> replaced with\n   $clean_post = array_map('sanitize_text_field', wp_unslash($_POST)).<\/li>\n<li><strong>class-email-generator.php<\/strong> \u2014 <code>get_emails()<\/code>: Cookie data sanitized\nwith <code>array_values(array_filter(array_map('sanitize_email', $raw)))<\/code>.<\/li>\n<\/ol>\n\n<h4>Addon Development Notes<\/h4>\n\n<p><strong>Hook Stability Guarantee<\/strong><\/p>\n\n<p>All hooks listed in the <code>== Hooks ==<\/code> section are frozen. Signatures will\nnot change in any 1.x release. Breaking changes will only occur in a major\nversion bump with a migration guide.<\/p>\n\n<p><strong>$clean_post in save_settings hooks<\/strong><\/p>\n\n<p>As of the 2026-04-02 security patch, both <code>tempmails_before_save_settings<\/code>\nand <code>tempmails_before_save_imap_settings<\/code> receive a sanitized copy of\n    $_POST. If your addon previously relied on raw values via these hooks,\nretrieve those fields directly from <code>$_POST<\/code> with appropriate sanitization.<\/p>\n\n<p><strong>CSS Variable Injection<\/strong><\/p>\n\n<pre><code>inject_css_variables() now attaches inline CSS to the `tempmails-admin`\n<\/code><\/pre>\n\n<p>style handle. If your addon dequeues <code>tempmails-admin<\/code>, Design color\nvariables will not be applied on admin pages.<\/p>\n\n<pre><code>inject_frontend_css_variables() uses a priority waterfall:\n<\/code><\/pre>\n\n<p>1. Attaches to <code>tempmails-frontend<\/code> if registered\/enqueued\n2. Falls back to <code>tempmails-frontend-css<\/code>\n3. Registers a dummy handle <code>tempmails-design-vars<\/code> in <code>wp_footer<\/code> at\n   priority 1<\/p>\n\n<h4>File Structure<\/h4>\n\n<p>tempmails\/\n\u251c\u2500\u2500 assets\/\n\u2502   \u251c\u2500\u2500 css\/\n\u2502   \u2502   \u251c\u2500\u2500 admin.css\n\u2502   \u2502   \u251c\u2500\u2500 frontend.css\n\u2502   \u2502   \u2514\u2500\u2500 ecosystem.css\n\u2502   \u2514\u2500\u2500 js\/\n\u2502       \u251c\u2500\u2500 admin.js\n\u2502       \u251c\u2500\u2500 admin-design.js\n\u2502       \u2514\u2500\u2500 frontend.js\n\u251c\u2500\u2500 core\/\n\u2502   \u251c\u2500\u2500 class-core.php\n\u2502   \u251c\u2500\u2500 class-admin.php\n\u2502   \u251c\u2500\u2500 class-design.php\n\u2502   \u251c\u2500\u2500 class-ecosystem.php\n\u2502   \u251c\u2500\u2500 class-email-generator.php\n\u2502   \u2514\u2500\u2500 class-addon-handler.php\n\u251c\u2500\u2500 includes\/\n\u2502   \u251c\u2500\u2500 class-tempmails-shortcodes.php\n\u2502   \u251c\u2500\u2500 class-tempmails-database.php\n\u2502   \u251c\u2500\u2500 class-tempmails-settings.php\n\u2502   \u251c\u2500\u2500 class-tempmails-imap.php\n\u2502   \u2514\u2500\u2500 class-tempmails-fetcher.php\n\u2514\u2500\u2500 tempmails.php<\/p>\n\n<!--section=installation-->\n<h4>Minimum Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.8 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<li>PHP extensions: <code>imap<\/code>, <code>mbstring<\/code>, <code>json<\/code><\/li>\n<li>A mail server with catch-all forwarding configured on your domain<\/li>\n<\/ul>\n\n<h4>Step-by-Step Installation<\/h4>\n\n<ol>\n<li>Upload the <code>tempmails<\/code> folder to <code>\/wp-content\/plugins\/<\/code> or install via\n<strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong><\/li>\n<li>Activate the plugin through <strong>Plugins \u2192 Installed Plugins<\/strong><\/li>\n<li>Go to <strong>Tempmails \u2192 Settings \u2192 IMAP<\/strong> and enter your mail server\ncredentials:\n\n<ul>\n<li><strong>Host:<\/strong> <code>mail.yourdomain.com<\/code><\/li>\n<li><strong>Port:<\/strong> <code>993<\/code> (SSL) or <code>143<\/code> (TLS)<\/li>\n<li><strong>Encryption:<\/strong> SSL or TLS<\/li>\n<li><strong>Username:<\/strong> <code>catch-all@yourdomain.com<\/code><\/li>\n<li><strong>Password:<\/strong> your IMAP mailbox password<\/li>\n<\/ul><\/li>\n<li>Click <strong>Test Connection<\/strong> to verify the credentials<\/li>\n<li>Click <strong>Save Settings<\/strong><\/li>\n<li>Create a new WordPress page and add <code>[tempmails_inbox]<\/code><\/li>\n<li>Publish \u2014 visitors can now generate and use temporary email addresses\ninstantly<\/li>\n<\/ol>\n\n<h4>IMAP Catch-All Setup<\/h4>\n\n<p>Your mail server must have <strong>catch-all email enabled<\/strong> so that messages\nsent to any address <code>@yourdomain.com<\/code> land in the single mailbox\nTempmails reads from.<\/p>\n\n<p>In cPanel, set the Default Address for your domain to deliver to your\ncatch-all inbox:<\/p>\n\n<pre><code>*@yourdomain.com \u2192 catch-all@yourdomain.com\n<\/code><\/pre>\n\n<p>Hostinger users: enable catch-all under <strong>hPanel \u2192 Email \u2192 Default\nAddress<\/strong>. New to Hostinger? <a href=\"https:\/\/www.hostinger.com\/in?REFERRALCODE=neoparker\">Get started here<\/a>\n<em>(affiliate link)<\/em> \u2014 their hPanel makes IMAP catch-all setup\nstraightforward even for beginners.<\/p>\n\n<h4>Server Cron (Recommended for Reliable Fetching)<\/h4>\n\n<p>WordPress cron only fires when your site receives traffic. For consistent\nemail delivery, add a real server cron job in cPanel \u2192 Cron Jobs:<\/p>\n\n<pre><code>* * * * * wget -q -O - https:\/\/yoursite.com\/wp-cron.php?doing_wp_cron &gt;\/dev\/null 2&gt;&amp;1\n<\/code><\/pre>\n\n<p>Or using WP-CLI:<\/p>\n\n<pre><code>* * * * * cd \/path\/to\/wordpress &amp;&amp; wp cron event run --due-now &gt;\/dev\/null 2&gt;&amp;1\n<\/code><\/pre>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20a%20third-party%20email%20service%3F\"><h3>Does this plugin require a third-party email service?<\/h3><\/dt>\n<dd><p>No. Tempmails connects directly to your own IMAP mailbox. You need a mail\nserver with catch-all forwarding \u2014 Hostinger, any cPanel-based host, or\nany standard IMAP server works.<\/p><\/dd>\n<dt id=\"what%20php%20extensions%20are%20required%3F\"><h3>What PHP extensions are required?<\/h3><\/dt>\n<dd><p>The <code>imap<\/code>, <code>mbstring<\/code>, and <code>json<\/code> extensions must be enabled on your\nserver. Most shared hosting providers include these by default. The plugin\nwill display a clear error and refuse to activate if any are missing.<\/p><\/dd>\n<dt id=\"can%20i%20use%20my%20own%20domain%20names%20for%20generated%20addresses%3F\"><h3>Can I use my own domain names for generated addresses?<\/h3><\/dt>\n<dd><p>Yes. Go to <strong>Tempmails \u2192 Settings \u2192 Domains<\/strong> and add one domain per line.\nAll listed domains must route their catch-all to your IMAP mailbox.<\/p><\/dd>\n<dt id=\"how%20is%20message%20deletion%20handled%3F\"><h3>How is message deletion handled?<\/h3><\/dt>\n<dd><p>Tempmails uses <strong>soft delete<\/strong>. When a user deletes a message, the\n    to_address field is changed to an internal tombstone value rather than\nremoving the database row. Deleted messages never appear in inbox queries.\nThis behavior is permanent and guaranteed across all versions.<\/p><\/dd>\n<dt id=\"can%20i%20white-label%20the%20inbox%20ui%3F\"><h3>Can I white-label the inbox UI?<\/h3><\/dt>\n<dd><p>Yes. All user-facing text is translation-ready and overridable via filters.\nThe <strong>Design Panel<\/strong> under <strong>Tempmails \u2192 Design<\/strong> lets you change colors,\nbutton labels, empty state text, and border radius \u2014 with a live preview.<\/p><\/dd>\n<dt id=\"how%20do%20i%20build%20an%20addon%3F\"><h3>How do I build an addon?<\/h3><\/dt>\n<dd><p>Register your addon using the <code>tempmails_registered_addons<\/code> filter, then\nhook into any documented action or filter. Core is frozen \u2014 all new\nfunctionality must be delivered via addons. See the <strong>Hooks<\/strong> section for\nthe full reference.<\/p><\/dd>\n<dt id=\"emails%20are%20not%20appearing%20in%20the%20inbox\"><h3>Emails are not appearing in the inbox<\/h3><\/dt>\n<dd><ol>\n<li>Go to <strong>Tempmails \u2192 Settings \u2192 IMAP<\/strong> and click <strong>Test Connection<\/strong><\/li>\n<li>Verify catch-all forwarding is active on your mail server<\/li>\n<li>Confirm WordPress cron is running \u2014 use the free <strong>WP Crontrol<\/strong> plugin\nto inspect scheduled events<\/li>\n<li>Check <strong>Tempmails \u2192 Addon Health<\/strong> for any logged errors<\/li>\n<\/ol><\/dd>\n<dt id=\"how%20do%20i%20enable%20debug%20logging%3F\"><h3>How do I enable debug logging?<\/h3><\/dt>\n<dd><p>Add these two lines to <code>wp-config.php<\/code>:<\/p>\n\n<pre><code>define('WP_DEBUG', true);\ndefine('WP_DEBUG_LOG', true);\n<\/code><\/pre>\n\n<p>Tempmails logs all errors to the standard WordPress debug log at\n    \/wp-content\/debug.log and to the <strong>Addon Health<\/strong> page in admin.<\/p>\n\n<\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.7 - 2026-04-04 (Security Patch)<\/h4>\n\n<ul>\n<li>Security: ajax_delete_message() \u2014 $_POST['message_id'] now wrapped with\nsanitize_text_field( wp_unslash() ); phpcs:ignore suppression comment\nremoved<\/li>\n<\/ul>\n\n<h4>1.0.7 - 2026-04-02 (Security Patch)<\/h4>\n\n<ul>\n<li>Security: Removed raw <code>&lt;style&gt;<\/code> echo in Design admin page \u2014 static CSS\nmoved to assets\/css\/admin.css<\/li>\n<li>Security: inject_css_variables() now uses wp_add_inline_style() instead\nof echo; all CSS custom property values wrapped with esc_attr()<\/li>\n<li>Security: inject_frontend_css_variables() now escapes all CSS values with\nesc_attr() and passes the CSS string through wp_strip_all_tags() before\ncalling wp_add_inline_style()<\/li>\n<li>Security: wp_footer fallback in inject_frontend_css_variables() replaced\nraw <code>&lt;style&gt;<\/code> echo with a registered dummy style handle using\nwp_register_style() + wp_add_inline_style() \u2014 no more unescaped output<\/li>\n<li>Security: Inline <code>&lt;script&gt;<\/code> in shortcode output replaced with\nwp_add_inline_script('tempmails-frontend', ...)<\/li>\n<li>Security: Inline <code>&lt;script&gt;<\/code> in ecosystem admin block replaced with\nwp_add_inline_script('tempmails-admin', ...)<\/li>\n<li>Security: ajax_mark_seen() \u2014 $_POST['message_id'] now wrapped with\nsanitize_text_field() in addition to wp_unslash()<\/li>\n<li>Security: save_settings() \u2014 raw $_POST no longer passed directly to\ndo_action(); sanitized via array_map('sanitize_text_field',\nwp_unslash($_POST)) before reaching tempmails_before_save_settings and\ntempmails_before_save_imap_settings hooks<\/li>\n<li>Security: get_emails() in Email Generator \u2014 cookie emails now sanitized\nwith array_filter(array_map('sanitize_email', $raw)) after\nmaybe_unserialize()<\/li>\n<\/ul>\n\n<h4>1.0.7 - 2026-03-15<\/h4>\n\n<ul>\n<li>Fixed: IMAP fetch now uses imap_search('UNSEEN') instead of last-N\nsequence range \u2014 stops the infinite re-fetch loop<\/li>\n<li>Fixed: Added synthetic Message-ID generation (synthetic-{md5}) for emails\nwith no Message-ID header<\/li>\n<li>Fixed: Added Delivered-To \/ X-Original-To \/ X-Forwarded-To raw header\nfallback when To: addresses cannot be parsed<\/li>\n<li>Fixed: Added last-resort raw body fallback with FT_PEEK for complex MIME\nstructures<\/li>\n<li>Changed: Renamed \"Messages Received\" dashboard stat card label to\n\"All-Time Received\"<\/li>\n<\/ul>\n\n<h4>1.0.7 - 2026-03-07<\/h4>\n\n<ul>\n<li>Fixed: All action hooks now fully integrated into Core<\/li>\n<li>Fixed: <code>tempmails_email_generated<\/code> fires correctly on every email creation<\/li>\n<li>Fixed: <code>tempmails_inbox_accessed<\/code> fires on every inbox view<\/li>\n<li>Fixed: <code>tempmails_message_received<\/code> fires when a new message is stored<\/li>\n<li>Fixed: <code>tempmails_message_marked_seen<\/code> fires correctly on message read<\/li>\n<li>Fixed: <code>tempmails_message_deleted<\/code> now correctly passes <code>$email<\/code> parameter<\/li>\n<li>Fixed: <code>tempmails_cleanup_completed<\/code> now passes deleted message count<\/li>\n<li>Fixed: Admin JS (<code>admin.js<\/code>) now correctly enqueued on all Tempmails\nadmin pages<\/li>\n<li>Fixed: Dashboard stats now increment correctly<\/li>\n<li>Added: Ecosystem Feed opt-out toggle in Settings \u2192 General<\/li>\n<\/ul>\n\n<h4>1.0.6 - 2026-01-05<\/h4>\n\n<ul>\n<li>Fixed: Modal z-index conflicts with some themes<\/li>\n<li>Fixed: Message list rendering in certain theme layouts<\/li>\n<li>Fixed: Attachment download failing for some file types<\/li>\n<li>Changed: Improved CSS specificity for modal overlay<\/li>\n<li>Changed: Enhanced frontend.css for broader theme compatibility<\/li>\n<\/ul>\n\n<h4>1.0.5 - 2026-01-04<\/h4>\n\n<ul>\n<li>Added: Material Design 3 UI components<\/li>\n<li>Added: Inter and Poppins font integration<\/li>\n<li>Added: Material Symbols icon library<\/li>\n<li>Fixed: Frontend styling conflicts with page builders<\/li>\n<li>Fixed: Button hover states<\/li>\n<\/ul>\n\n<h4>1.0.4 - 2026-01-03<\/h4>\n\n<ul>\n<li>Added: Addon Health monitoring page in admin<\/li>\n<li>Added: Error logging for addon hook callbacks<\/li>\n<li>Added: <code>Tempmails_Addon_Handler<\/code> \u2014 wraps all addon hooks in try\/catch<\/li>\n<li>Fixed: PHP errors from misbehaving addons no longer crash Core<\/li>\n<\/ul>\n\n<h4>1.0.3 - 2026-01-02<\/h4>\n\n<ul>\n<li>Fixed: Nonce verification on all AJAX endpoints<\/li>\n<li>Fixed: Message-ID sanitization now preserves <code>&lt;&gt;<\/code> characters<\/li>\n<li>Fixed: Attachment unserialization on frontend display<\/li>\n<li>Security: Stricter AJAX security checks across all endpoints<\/li>\n<li>Security: Proper SQL escaping in all database queries<\/li>\n<\/ul>\n\n<h4>1.0.2 - 2026-01-01<\/h4>\n\n<ul>\n<li>Added: Ecosystem communication layer UI in admin<\/li>\n<li>Added: ecosystem.css for addon discovery panel<\/li>\n<li>Added: Visual addon cards in admin<\/li>\n<\/ul>\n\n<h4>1.0.1 - 2025-12-31<\/h4>\n\n<ul>\n<li>Added: IMAP email fetching engine<\/li>\n<li>Added: Auto-refresh inbox via AJAX<\/li>\n<li>Added: Attachment download support<\/li>\n<li>Fixed: Database table creation on plugin activation<\/li>\n<li>Fixed: Cron scheduling on activation<\/li>\n<\/ul>\n\n<h4>1.0.0 - 2025-12-30<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Core email generation engine<\/li>\n<li>Message storage with soft delete<\/li>\n<li>Admin dashboard with statistics<\/li>\n<li>Frontend shortcode<\/li>\n<li>Basic IMAP integration<\/li>\n<\/ul>","raw_excerpt":"White-label temporary email platform. Let visitors generate disposable inboxes on your site \u2014 powered by your own IMAP server.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/293353","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=293353"}],"author":[{"embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/neosmartapps"}],"wp:attachment":[{"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=293353"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=293353"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=293353"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=293353"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=293353"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=293353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}