{"id":346291,"date":"2026-08-25T07:56:49","date_gmt":"2026-08-25T07:56:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/easy-smtp-connect\/"},"modified":"2026-08-25T08:00:47","modified_gmt":"2026-08-25T08:00:47","slug":"vora-smtp","status":"publish","type":"plugin","link":"https:\/\/de.wordpress.org\/plugins\/vora-smtp\/","author":23539291,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.7.0","stable_tag":"1.7.0","tested":"7.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Vora SMTP","header_author":"WPVora","header_description":"Send WordPress email through an authenticated SMTP server, a Gmail account or PHP Mail, with automatic fallback when a provider fails, an email log with preview and one-click resend, failure alerts and a built-in connection test.","assets_banners_color":"975ef4","last_updated":"2026-08-25 08:00:47","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wpvora.com\/products\/vora-smtp","header_author_uri":"https:\/\/wpvora.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":51,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.7.0":{"tag":"1.7.0","author":"rajapriayahere","date":"2026-08-25 08:00:47"}},"upgrade_notice":{"1.7.0":"<p>Microsoft 365 and one-click OAuth setup have moved to the Pro add-on. Gmail is unchanged, and existing connections keep working.<\/p>","1.6.0":"<p>Adds the WPVora contributor credit. No functional change and no action is needed.<\/p>","1.5.0":"<p>Makes the whole admin interface translatable and ships a POT file. No settings change and no action is needed.<\/p>","1.2.0":"<p>Renamed to Vora SMTP. Settings, email log and queue are carried over automatically. If you define the OAuth relay constant or filter, rename them to VORA_SMTP_OAUTH_RELAY_URL and vora_smtp_oauth_relay_url.<\/p>","1.1.0":"<p>Adds PHP Mail as a no-configuration fallback and extends fallback routing to SMTP. Existing settings are preserved.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3664822,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3664822,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3664822,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3664822,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.7.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3664822,"resolution":"1","location":"assets","locale":"","width":2880,"height":2608},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3664822,"resolution":"2","location":"assets","locale":"","width":2880,"height":2832},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3664822,"resolution":"3","location":"assets","locale":"","width":2880,"height":2418},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3664822,"resolution":"4","location":"assets","locale":"","width":2880,"height":2230}},"screenshots":{"1":"Dashboard with delivery statistics and the test email tool.","2":"Choosing and configuring a sending method on the Providers screen.","3":"Sender identity and logging options on the Settings screen.","4":"The email log, with filtering and per-message detail."}},"plugin_section":[],"plugin_tags":[267,26736,897,9965,6696],"plugin_category":[41],"plugin_contributors":[277364,277363],"plugin_business_model":[],"class_list":["post-346291","plugin","type-plugin","status-publish","hentry","plugin_tags-email","plugin_tags-email-log","plugin_tags-gmail","plugin_tags-mailer","plugin_tags-smtp","plugin_category-communication","plugin_contributors-rajapriayahere","plugin_contributors-rajapriya","plugin_committers-rajapriayahere"],"banners":{"banner":"https:\/\/ps.w.org\/vora-smtp\/assets\/banner-772x250.png?rev=3664822","banner_2x":"https:\/\/ps.w.org\/vora-smtp\/assets\/banner-1544x500.png?rev=3664822","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/vora-smtp\/assets\/icon-128x128.png?rev=3664822","icon_2x":"https:\/\/ps.w.org\/vora-smtp\/assets\/icon-256x256.png?rev=3664822","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/vora-smtp\/assets\/screenshot-1.png?rev=3664822","caption":"Dashboard with delivery statistics and the test email tool."},{"src":"https:\/\/ps.w.org\/vora-smtp\/assets\/screenshot-2.png?rev=3664822","caption":"Choosing and configuring a sending method on the Providers screen."},{"src":"https:\/\/ps.w.org\/vora-smtp\/assets\/screenshot-3.png?rev=3664822","caption":"Sender identity and logging options on the Settings screen."},{"src":"https:\/\/ps.w.org\/vora-smtp\/assets\/screenshot-4.png?rev=3664822","caption":"The email log, with filtering and per-message detail."}],"raw_content":"<!--section=description-->\n<p>WordPress sends mail with PHP's <code>mail()<\/code> function by default. Most hosts send it from an address the receiving server cannot verify, so password resets, order receipts and contact form notifications quietly land in spam or vanish.<\/p>\n\n<p>Vora SMTP replaces that with a real authenticated connection. You point it at a mail service you already control, and every message WordPress sends goes out over that connection instead.<\/p>\n\n<h4>Sending methods<\/h4>\n\n<ul>\n<li><strong>Generic SMTP<\/strong> \u2014 any provider that gives you a host, port, username and password, with TLS, SSL or unencrypted connections.<\/li>\n<li><strong>Gmail and Google Workspace<\/strong> \u2014 connect over OAuth 2.0 by registering your own Google app. No password is stored, and no app password is needed.<\/li>\n<li><strong>PHP Mail<\/strong> \u2014 the server's own <code>mail()<\/code> function, with nothing to configure. Deliverability is the weakest of the three, which is why it exists mainly as a safety net rather than a first choice.<\/li>\n<\/ul>\n\n<h4>Automatic fallback<\/h4>\n\n<p>A mail provider can stop accepting messages for reasons that have nothing to do with your site: an expired credential, a rate limit, an outage, a DNS failure. When that happens the message is normally lost, and nobody finds out until a customer says they never got their receipt.<\/p>\n\n<ul>\n<li>If a send fails, the plugin immediately retries it through a second sending method of your choice.<\/li>\n<li>PHP Mail is the default fallback, because it needs no credentials and no connection to a third party, so it is still available when the configured provider is not.<\/li>\n<li>Fallback covers every sending method, including Generic SMTP.<\/li>\n<li>The log records which method actually delivered each message, so a send rescued by the fallback is never credited to the provider that failed.<\/li>\n<li>Turn it off, or point it at a different method, on the Providers screen.<\/li>\n<\/ul>\n\n<h4>Failure alerts<\/h4>\n\n<p>Optionally email a chosen address whenever a message cannot be delivered, including the recipient, the sending method used and the error the mail server returned. Alerts cannot loop: a failing alert never triggers another alert.<\/p>\n\n<h4>Email log, with preview and resend<\/h4>\n\n<p>Every message the plugin handles is recorded, so you can prove what was sent, see exactly what it looked like, and send it again without asking the customer to trigger it a second time.<\/p>\n\n<ul>\n<li><strong>Preview<\/strong> \u2014 open any logged message and read it as the recipient saw it. HTML email is rendered in a sandboxed frame, so a message can be inspected safely without its markup, styles or scripts touching your admin screen. Storing message bodies is optional and off by default, so you choose whether the log keeps content or only metadata.<\/li>\n<li><strong>Resend<\/strong> \u2014 send any logged message again with one click, to the original recipient, using your current sending method. Useful when a receipt failed while a provider was down, or when a password reset never arrived.<\/li>\n<li>Searchable history filtered by status, provider, recipient or subject.<\/li>\n<li>The real error text returned by the mail server when a message fails, not a generic failure notice.<\/li>\n<li>A record of which sending method actually delivered each message, including when a fallback rescued it.<\/li>\n<li>Automatic pruning of entries older than a configurable number of days, so the log cannot grow without limit.<\/li>\n<\/ul>\n\n<h4>Sender identity<\/h4>\n\n<p>Set the From name and address once and optionally force every message on the site to use them, which stops other plugins overriding your sender details. The plugin also repairs invalid defaults such as <code>wordpress@localhost<\/code> that cause outright send failures on local and staging installs.<\/p>\n\n<h4>Diagnostics<\/h4>\n\n<p>A dashboard summarises messages sent, failures and success rate. You can send a test message to any address and see exactly what the mail server said if it does not arrive.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>Credentials and OAuth tokens are stored in your own database and are never transmitted anywhere except to the mail provider you configure. The plugin collects no analytics and phones no home. See the External services section below for the full list of endpoints it contacts.<\/p>\n\n<h4>Source code and build process<\/h4>\n\n<p>The plugin's admin screen is a React application. The file it loads at runtime, <code>build\/index.jsx.js<\/code>, is generated and minified, so the <strong>complete, unminified, human-readable source it is built from ships inside this plugin<\/strong> \u2014 no external download is needed to read, study, modify or fork it.<\/p>\n\n<ul>\n<li>Source: <code>admin\/src\/<\/code> (<code>index.jsx<\/code>, <code>App.jsx<\/code>, <code>api.js<\/code> and <code>components\/<\/code>), documented in <code>admin\/src\/README.md<\/code><\/li>\n<li>Build configuration: <code>package.json<\/code><\/li>\n<li>Generated output: <code>build\/index.jsx.js<\/code> and <code>build\/index.jsx.asset.php<\/code><\/li>\n<\/ul>\n\n<p>Nothing else in the plugin is compiled, minified or obfuscated. All PHP and all CSS (<code>assets\/admin.css<\/code>) is the original source, formatted as written.<\/p>\n\n<p><strong>To rebuild the generated file from the included source:<\/strong><\/p>\n\n<ol>\n<li>Install <a href=\"https:\/\/nodejs.org\/\">Node.js<\/a> 18 or newer, which includes npm.<\/li>\n<li>From the plugin directory, install the build tooling: <code>npm install<\/code><\/li>\n<li>Produce the production build: <code>npm run build<\/code><\/li>\n<\/ol>\n\n<p>That regenerates <code>build\/index.jsx.js<\/code> and <code>build\/index.jsx.asset.php<\/code> from <code>admin\/src\/<\/code>. Use <code>npm run start<\/code> instead for an unminified watch build while developing, and <code>npm run lint<\/code> to run ESLint over the sources.<\/p>\n\n<p>The build uses <a href=\"https:\/\/www.npmjs.com\/package\/@wordpress\/scripts\">@wordpress\/scripts<\/a>, WordPress's own official, free and open source build toolchain (a wrapper around webpack and Babel). It is declared in <code>package.json<\/code>, is fetched by <code>npm install<\/code>, and there is no custom webpack configuration \u2014 the entry point and output path are the two arguments in the <code>build<\/code> script.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the following third party services. It contacts <strong>only<\/strong> the services required by the sending method you configure, and makes no outbound request to any third party at all when you use Generic SMTP or PHP Mail.<\/p>\n\n<h4>Google OAuth 2.0<\/h4>\n\n<p>Used when you connect a Gmail or Google Workspace account, to exchange an authorisation code for an access token and to refresh that token when it expires.<\/p>\n\n<ul>\n<li>Endpoint: <code>https:\/\/oauth2.googleapis.com\/token<\/code><\/li>\n<li>Data sent: your Google app's client ID and client secret, the authorisation code returned by Google's consent screen, and your refresh token.<\/li>\n<li>When: only when you click Connect, and afterwards whenever a stored access token has expired.<\/li>\n<li>Terms of service: https:\/\/policies.google.com\/terms<\/li>\n<li>Privacy policy: https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<h4>Gmail API<\/h4>\n\n<p>Used to transmit outgoing email when Gmail is the active sending method.<\/p>\n\n<ul>\n<li>Endpoint: <code>https:\/\/gmail.googleapis.com\/gmail\/v1\/users\/me\/messages\/send<\/code><\/li>\n<li>Data sent: the message itself, including recipients, subject, body, headers and attachments.<\/li>\n<li>When: each time WordPress sends an email while Gmail is selected.<\/li>\n<li>Terms of service: https:\/\/policies.google.com\/terms<\/li>\n<li>Privacy policy: https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<h4>Microsoft identity platform<\/h4>\n\n<p>This plugin on its own offers no Microsoft 365 sending method, so out of the box it never contacts these endpoints. The OAuth code that does so ships here and is used when the Vora SMTP Pro add-on supplies the Microsoft 365 provider. It is declared for completeness, because the requests are made by this plugin's code.<\/p>\n\n<p>Used when you connect a Microsoft 365 account, to exchange an authorisation code for an access token and to refresh it.<\/p>\n\n<ul>\n<li>Endpoints: <code>https:\/\/login.microsoftonline.com\/<\/code>, <code>https:\/\/graph.microsoft.com\/<\/code><\/li>\n<li>Data sent: your Microsoft app's client ID, client secret and tenant ID, the authorisation code returned by Microsoft's consent screen, and your refresh token.<\/li>\n<li>When: only when you click Connect, and afterwards whenever a stored access token has expired.<\/li>\n<li>Terms of service: https:\/\/www.microsoft.com\/servicesagreement<\/li>\n<li>Privacy policy: https:\/\/privacy.microsoft.com\/privacystatement<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/<\/code> and activate it through the Plugins screen.<\/li>\n<li>Go to <strong>Vora SMTP \u2192 Providers<\/strong> and choose your sending method.<\/li>\n<li>Enter the credentials for your SMTP server, or connect a Gmail account over OAuth.<\/li>\n<li>Set your From name and address under <strong>Vora SMTP \u2192 Settings<\/strong>.<\/li>\n<li>Send a test message from <strong>Vora SMTP \u2192 Dashboard<\/strong> to confirm delivery works.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20is%20the%20source%20code%20for%20the%20minified%20javascript%3F\"><h3>Where is the source code for the minified JavaScript?<\/h3><\/dt>\n<dd><p>Inside the plugin, in <code>admin\/src\/<\/code>. The admin screen is a React application, and <code>build\/index.jsx.js<\/code> is generated from those files by <a href=\"https:\/\/www.npmjs.com\/package\/@wordpress\/scripts\">@wordpress\/scripts<\/a>. Run <code>npm install<\/code> and then <code>npm run build<\/code> from the plugin directory to regenerate it. See \"Source code and build process\" in the Description for the full detail. Nothing else in the plugin is compiled or minified.<\/p><\/dd>\n<dt id=\"do%20i%20still%20need%20an%20email%20account%20somewhere%3F\"><h3>Do I still need an email account somewhere?<\/h3><\/dt>\n<dd><p>Yes. This plugin connects WordPress to a mail service you already have. It is not itself a mail service and does not send anything on your behalf.<\/p><\/dd>\n<dt id=\"where%20are%20my%20credentials%20stored%3F\"><h3>Where are my credentials stored?<\/h3><\/dt>\n<dd><p>In your own site's database, in a single WordPress option. They are transmitted only to the provider you configure.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20create%20a%20google%20app%20to%20use%20gmail%3F\"><h3>Do I need to create a Google app to use Gmail?<\/h3><\/dt>\n<dd><p>Yes, for the standard setup. You register an OAuth application in Google Cloud Console and paste the client ID and secret into the plugin. This keeps the connection entirely between your site and Google.<\/p><\/dd>\n<dt id=\"why%20does%20my%20email%20still%20go%20to%20spam%3F\"><h3>Why does my email still go to spam?<\/h3><\/dt>\n<dd><p>Authenticated sending fixes the connection, but receiving servers also check your domain's DNS. Add SPF and DKIM records for whichever service you send through. Your provider documents the exact values.<\/p><\/dd>\n<dt id=\"my%20messages%20fail.%20how%20do%20i%20find%20out%20why%3F\"><h3>My messages fail. How do I find out why?<\/h3><\/dt>\n<dd><p>Send a test message from the Dashboard. The plugin shows the actual error returned by the mail server rather than a generic failure, and the same detail is recorded against each failed entry in the email log.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20log%20the%20contents%20of%20my%20email%3F\"><h3>Does the plugin log the contents of my email?<\/h3><\/dt>\n<dd><p>Only if you enable it. By default the log records metadata such as recipient, subject, provider and status. Storing the full message body is a separate setting, off by default, because it noticeably increases database size.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20deactivate%20the%20plugin%3F\"><h3>What happens if I deactivate the plugin?<\/h3><\/dt>\n<dd><p>WordPress reverts to its default <code>mail()<\/code> behaviour. Your settings and logs are preserved. They are removed only if you delete the plugin, which drops its tables and options.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>Added a Disconnect button to the Gmail screen. It revokes the authorisation with Google and deletes every stored token from your site, so you can withdraw access without leaving WordPress.<\/li>\n<li>Fixed: Test Connection reported \"Google Client ID is not configured\" for a Gmail account connected without a local app registration, even though sending worked correctly.<\/li>\n<li>The unminified source of the admin screen's JavaScript, and instructions for rebuilding it, are documented in the readme and shipped in <code>admin\/src\/<\/code>.<\/li>\n<li>Microsoft 365 sending, and one-click setup for both Gmail and Microsoft 365, have moved to the Vora SMTP Pro add-on, which supplies the hosted relay holding the shared OAuth app. Gmail is unchanged in this plugin and still connects with your own Google Cloud app.<\/li>\n<li>The plugin no longer contacts an OAuth relay under any configuration, so that entry has been removed from External services.<\/li>\n<li>Added <code>vora_smtp_oneclick_available<\/code>, <code>vora_smtp_oneclick_start_url<\/code> and <code>vora_smtp_oauth_refresh<\/code> so an add-on can supply a connection method the plugin has no credentials for.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>WPVora is now credited as a contributor alongside the individual maintainers. No functional change.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>The admin interface is now fully translatable. Every string in the React admin \u2014 tabs, provider forms, the email log, the test-email tool and its confirmations \u2014 was previously hardcoded English and could not be translated at all.<\/li>\n<li>Provider connection results and sending errors are translatable, including the messages returned by each sending method's connection test.<\/li>\n<li>The test email itself is translatable, subject and body.<\/li>\n<li>Added <code>languages\/vora-smtp.pot<\/code> with 191 strings for translators, with <code>translators:<\/code> comments on every string that interpolates a value.<\/li>\n<li>Email log delivery states now display translated (\"Sent\", \"Failed\", \"Queued\") while still filtering on the stored English key.<\/li>\n<li>Plugin URI updated to the new product page.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Renamed to Vora SMTP. The plugin's display name, menu entry and text domain have changed; its behaviour and settings have not.<\/li>\n<li>Internal identifiers now use the <code>vora_smtp<\/code> prefix throughout, including the settings option, the two database tables, the REST namespace and the OAuth relay constant and filter. Sites upgrading from an earlier build have their settings, email log and queue carried over automatically on activation.<\/li>\n<li>Sites that define the OAuth relay constant must rename it from <code>EASYSMCO_OAUTH_RELAY_URL<\/code> to <code>VORA_SMTP_OAUTH_RELAY_URL<\/code>, and the matching filter from <code>easysmco_oauth_relay_url<\/code> to <code>vora_smtp_oauth_relay_url<\/code>.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New \"PHP Mail\" sending method, using the server's own mail() function. It needs no credentials, so it works as a last resort when a configured provider is unavailable.<\/li>\n<li>PHP Mail is now the fallback provider on new installs, and fallback is enabled by default. Existing sites keep their saved settings.<\/li>\n<li>Fallback now also covers SMTP-based providers. Previously a failed Generic SMTP send was never retried.<\/li>\n<li>Attachments are no longer dropped when a message is delivered through the Generic SMTP driver.<\/li>\n<li>A network failure while connecting a Google or Microsoft account now returns to the Providers screen with an explanation instead of a blank error page, and retries once when the request never left the server.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Send WordPress email via SMTP, Gmail or PHP Mail, with automatic fallback, an email log with preview and resend, and failure alerts.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/346291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=346291"}],"author":[{"embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rajapriayahere"}],"wp:attachment":[{"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=346291"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=346291"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=346291"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=346291"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=346291"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=346291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}