{"id":387432,"date":"2026-10-18T18:47:52","date_gmt":"2026-10-18T18:47:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/pigeon-mail\/"},"modified":"2026-10-18T18:47:24","modified_gmt":"2026-10-18T18:47:24","slug":"pigeon-mail","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/pigeon-mail\/","author":23464516,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.2.14","stable_tag":"0.2.14","tested":"7.1.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Pigeon Mail","header_author":"ClickWebStudio","header_description":"Send WordPress email through your own SMTP server, so contact forms, password resets and order emails actually arrive.","assets_banners_color":"","last_updated":"2026-10-18 18:47:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/seopigeon.com\/pigeon-mail","header_author_uri":"https:\/\/clickwebstudio.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":57,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.2.14":{"tag":"0.2.14","author":"clickwebstudio","date":"2026-10-18 18:47:24","revision":3753481}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3753481,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3753481,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3753481,"resolution":false,"location":"assets","locale":false}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.2.14"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3753481,"resolution":"1","location":"assets","locale":"","width":2560,"height":1800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3753481,"resolution":"2","location":"assets","locale":"","width":2560,"height":2000}},"screenshots":{"1":"Settings screen with connection status","2":"Test send showing the server conversation"}},"plugin_section":[],"plugin_tags":[17561,267,450,6696,41812],"plugin_category":[41],"plugin_contributors":[277324],"plugin_business_model":[],"class_list":["post-387432","plugin","type-plugin","status-publish","hentry","plugin_tags-deliverability","plugin_tags-email","plugin_tags-mail","plugin_tags-smtp","plugin_tags-wp-mail","plugin_category-communication","plugin_contributors-clickwebstudio","plugin_committers-clickwebstudio"],"banners":[],"icons":{"svg":"https:\/\/ps.w.org\/pigeon-mail\/assets\/icon.svg?rev=3753481","icon":"https:\/\/ps.w.org\/pigeon-mail\/assets\/icon.svg?rev=3753481","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/pigeon-mail\/assets\/screenshot-1.png?rev=3753481","caption":"Settings screen with connection status"},{"src":"https:\/\/ps.w.org\/pigeon-mail\/assets\/screenshot-2.png?rev=3753481","caption":"Test send showing the server conversation"}],"raw_content":"<!--section=description-->\n<p>By default WordPress hands email to whatever the web server provides, which on most hosts is unauthenticated and quietly filtered as spam. Pigeon Mail sends through a real SMTP server instead \u2014 your host's, your mailbox provider's, or a dedicated sending service.<\/p>\n\n<p>It does one job and stays out of the way.<\/p>\n\n<p><strong>What it does<\/strong><\/p>\n\n<ul>\n<li>Sends WordPress email through the SMTP server you choose, with one-click presets for Google (Gmail and Workspace), Resend, SendGrid, Postmark, Mailgun and Brevo<\/li>\n<li>Sets a consistent From address and name across every plugin on the site<\/li>\n<li>Sends a test message and shows you the server's actual reply when it fails<\/li>\n<li>Warns you in the admin when a message could not be delivered<\/li>\n<\/ul>\n\n<p><strong>Why the test matters<\/strong><\/p>\n\n<p>\"Could not send email\" tells you nothing. Pigeon Mail shows the conversation with your mail server \u2014 the refused login, the blocked port, the rejected sender \u2014 which is usually the whole answer. Credentials are stripped from that transcript, so it is safe to paste into a support request.<\/p>\n\n<p><strong>Privacy<\/strong><\/p>\n\n<p>Pigeon Mail contacts nothing except the mail server you configure. It does not phone home, collect usage data, or require an account. Your messages go from your site to your server.<\/p>\n\n<h3>Source code<\/h3>\n\n<p>The settings screens are built with <code>@wordpress\/scripts<\/code>. The compiled files are in <code>build\/settings\/<\/code>; the readable source they are built from is in <code>src-js\/settings\/<\/code>, with <code>package.json<\/code> and <code>package-lock.json<\/code> at the plugin's root. To rebuild: <code>npm install<\/code> then <code>npm run build<\/code>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Go to <strong>Settings \u2192 Pigeon Mail<\/strong>.<\/li>\n<li>Enter your SMTP server details, save, then send yourself a test message.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20settings%20do%20i%20use%3F\"><h3>What settings do I use?<\/h3><\/dt>\n<dd><p>Your mail provider publishes them. The common shape is host <code>smtp.yourprovider.com<\/code>, port <code>587<\/code> with TLS, and your full email address as the username.<\/p><\/dd>\n<dt id=\"why%20do%20my%20emails%20still%20go%20to%20spam%3F\"><h3>Why do my emails still go to spam?<\/h3><\/dt>\n<dd><p>Sending through SMTP is only half of it. The other half is DNS: your domain needs an SPF record, and ideally DKIM, that authorise the server you are sending from. Your mail provider will document both.<\/p><\/dd>\n<dt id=\"should%20the%20from%20address%20match%20my%20domain%3F\"><h3>Should the From address match my domain?<\/h3><\/dt>\n<dd><p>Yes. Sending as a Gmail or Outlook address from your own site fails modern spam checks, because those providers explicitly say only their servers may send as their addresses. The exception is sending <em>through<\/em> that provider: the Google preset sends via Google's own server with an app password, so mail from your Google address is fine.<\/p><\/dd>\n<dt id=\"is%20my%20password%20safe%3F\"><h3>Is my password safe?<\/h3><\/dt>\n<dd><p>It is encrypted before it is stored, using a key derived from your site's own security salts, and it is never sent back to the browser once saved. Anyone reading the database alone cannot recover it.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20woocommerce%20and%20contact%20form%20plugins%3F\"><h3>Does this work with WooCommerce and contact form plugins?<\/h3><\/dt>\n<dd><p>Yes. It changes how WordPress itself sends mail, so anything using <code>wp_mail()<\/code> \u2014 which is nearly everything \u2014 goes through your server without needing its own configuration.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.2.14<\/h4>\n\n<ul>\n<li>The \"last email could not be sent\" notice on the dashboard and plugins list is now for recent failures only (three days), can be dismissed, and comes back only for a newer failure. Until now it stayed until you saved the settings or sent a test. The failure still shows on the plugin's own screens, and the setting that switches the notice off is unchanged.<\/li>\n<\/ul>\n\n<h4>0.2.13<\/h4>\n\n<ul>\n<li>Clears the notes the WordPress.org Plugin Check raises: translations are no longer loaded by the plugin itself (WordPress.org does it for plugins in the directory), and the one direct database query, in uninstall, says why it is needed. No change in behaviour.<\/li>\n<\/ul>\n\n<h4>0.2.12<\/h4>\n\n<ul>\n<li>The server conversation on the Test tab shows the greeting, the login, the sender and the recipient again. The test message's embedded logo filled the 80 lines the tab keeps with redacted lines, so a successful send showed nothing but \"[redacted]\". The message itself is now one line.<\/li>\n<\/ul>\n\n<h4>0.2.11<\/h4>\n\n<ul>\n<li>The Overview and Settings screens use the full width of the admin; Troubleshooting and the delivery status sit in a fixed-width column on the right.<\/li>\n<\/ul>\n\n<h4>0.2.10<\/h4>\n\n<ul>\n<li>A provider card no longer shows \"This server needs a username and password\": every provider needs one, so it is always on. The checkbox stays under Custom SMTP, for relays that trust the server's address instead.<\/li>\n<li>The Overview shows Troubleshooting in a column on the right, beside the sent and failed counts.<\/li>\n<\/ul>\n\n<h4>0.2.9<\/h4>\n\n<ul>\n<li>New provider card: Google (Gmail and Google Workspace). One click fills smtp.gmail.com, port 587 and TLS, and the screen explains the app password Google requires.<\/li>\n<\/ul>\n\n<h4>0.2.8<\/h4>\n\n<ul>\n<li>The provider cards show every provider's real logo: SendGrid and Mailgun no longer use a letter, and Custom SMTP has a server icon.<\/li>\n<\/ul>\n\n<h4>0.2.7<\/h4>\n\n<ul>\n<li>The diagnostic report says whether the web server can write to the uploads folder, and who owns it when it cannot. A folder owned by root, left behind by a command run as root, makes every upload on the site fail with \"could not be moved\" and is otherwise easy to miss.<\/li>\n<\/ul>\n\n<h4>0.2.6<\/h4>\n\n<ul>\n<li>The Overview can show extra cards from add-ons, next to Sent and Failed. Nothing is added by this plugin itself.<\/li>\n<\/ul>\n\n<h4>0.2.5<\/h4>\n\n<ul>\n<li>Troubleshooting tools, on a new Tools tab in Settings and linked from the Overview:\n\n<ul>\n<li>Connectivity test: checks that the saved server can be found, reached and logged in to, step by step, and sends nothing. It gives up after 12 seconds rather than hanging.<\/li>\n<li>Diagnostic report: a summary of your site and mail setup to paste into a support request. The password and username are only reported as present.<\/li>\n<li>Import and export settings: move your mail settings to another site. The file never contains the password; an import that would leave mail unable to log in switches routing off and says so instead of failing every message.<\/li>\n<li>Reset to defaults.<\/li>\n<\/ul><\/li>\n<li>Credentials are removed from every server conversation shown, in two independent ways.<\/li>\n<\/ul>\n\n<h4>0.2.4<\/h4>\n\n<ul>\n<li>The admin menu icon address carries the plugin version, so a browser that kept the previous icon loads the new one.<\/li>\n<\/ul>\n\n<h4>0.2.3<\/h4>\n\n<ul>\n<li>The Overview no longer has a \"Recent messages\" card advertising Premium when there is no email log to show; the plugin has no upsell of any kind now.<\/li>\n<li>The admin menu icon is the plain Pigeon mark, the same as Pigeon SEO's, without the badge.<\/li>\n<li>Tested with WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>0.2.2<\/h4>\n\n<ul>\n<li>The test-mail transcript's credential redaction now works: PHPMailer's \"CLIENT -&gt; SERVER:\" prefix kept the patterns from matching, so base64 and AUTH lines went through unredacted (PHPMailer's own masking hid the real credentials, so this was defence in depth).<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Fix: on phones a ticked checkbox on the settings screen showed as an orange blot. WordPress enlarges the tick on small screens; it now keeps the size of its box.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>New Overview screen, and the plugin's menu opens on it: emails sent and failed today, this week and this month, whether mail is going through your server, the last failure, and shortcuts to the test and the settings.<\/li>\n<li>The counts are two numbers per day, nothing about the messages themselves: no recipients, no subjects. They start from the day this version is installed, and the screen says so.<\/li>\n<li>Mail settings is its own screen with Server, Sender and Test tabs, and a Delivery status panel beside them that checks the saved settings item by item.<\/li>\n<li>The screens use the Pigeon design shared with Pigeon Form: bundled Plus Jakarta Sans and JetBrains Mono (nothing loaded from a font host), the Pigeon orange, and layouts that follow the space left by the admin menu.<\/li>\n<li>Unsaved changes are marked next to Save, the Test tab says when the test would use older saved settings, and leaving with unsaved changes asks first.<\/li>\n<li>The \"last email could not be sent\" notice no longer repeats on the plugin's own screens, which show the failure themselves.<\/li>\n<\/ul>\n\n<h4>0.1.5<\/h4>\n\n<ul>\n<li>Test email: the logo is the plain Pigeon mark without the envelope badge, and it keeps its size in Apple Mail, which ignored the image's width attribute and drew it at full size.<\/li>\n<\/ul>\n\n<h4>0.1.4<\/h4>\n\n<ul>\n<li>The test email is a proper branded message: Pigeon Mail logo (embedded, so it shows even from a site behind a login), a clear confirmation, the site, recipient, delivery route and time, and a plain-text version for clients that do not show HTML.<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>The provider cards show the real Resend, Postmark and Brevo logos, taken from each provider's official brand page. SendGrid and Mailgun keep their monograms: neither publishes a logo download.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>The Pigeon plugins sit together in the admin menu, one below another, instead of wherever their menu positions landed among other plugins' items.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>The admin menu uses the Pigeon family mark: the Pigeon SEO pigeon with a small envelope badge.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Send WordPress email through your own SMTP server, so contact forms, password resets and order emails actually arrive.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/387432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=387432"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/clickwebstudio"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=387432"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=387432"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=387432"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=387432"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=387432"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=387432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}