{"id":366419,"date":"2026-09-13T09:17:18","date_gmt":"2026-09-13T09:17:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/eusend\/"},"modified":"2026-09-13T09:16:43","modified_gmt":"2026-09-13T09:16:43","slug":"eusend","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/eusend\/","author":23563220,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"eusend","header_author":"eusend","header_description":"Sends every WordPress email through eusend's EU-native API \u2014 password resets, WooCommerce receipts, form notifications \u2014 with per-message delivery status, bounce reasons and a searchable log.","assets_banners_color":"000000","last_updated":"2026-09-13 09:16:43","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/eusend.dev\/docs\/integrations\/wordpress","header_author_uri":"https:\/\/eusend.dev","rating":0,"author_block_rating":0,"active_installs":0,"downloads":29,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"eusend","date":"2026-09-13 09:16:43","revision":3693476}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3693476,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3693476,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3693476,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3693476,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3693476,"resolution":"1","location":"assets","locale":"","width":2560,"height":2000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3693476,"resolution":"2","location":"assets","locale":"","width":2560,"height":1920},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3693476,"resolution":"3","location":"assets","locale":"","width":2560,"height":2360},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3693476,"resolution":"4","location":"assets","locale":"","width":2560,"height":1090}},"screenshots":{"1":"Settings \u2014 API key, From address checked against your verified domains, tracking and logging.","2":"The email log: what actually happened to every message, and which plugin sent it.","3":"One message in detail, with the receiving server's own reason for the bounce.","4":"Delivery events, the test send, and a rolling summary of the last seven days."}},"plugin_section":[],"plugin_tags":[267,131785,6696,48586,6695],"plugin_category":[41],"plugin_contributors":[280419],"plugin_business_model":[],"class_list":["post-366419","plugin","type-plugin","status-publish","hentry","plugin_tags-email","plugin_tags-gdpr","plugin_tags-smtp","plugin_tags-transactional-email","plugin_tags-wp_mail","plugin_category-communication","plugin_contributors-eusend","plugin_committers-eusend"],"banners":{"banner":"https:\/\/ps.w.org\/eusend\/assets\/banner-772x250.png?rev=3693476","banner_2x":"https:\/\/ps.w.org\/eusend\/assets\/banner-1544x500.png?rev=3693476","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/eusend\/assets\/icon-128x128.png?rev=3693476","icon_2x":"https:\/\/ps.w.org\/eusend\/assets\/icon-256x256.png?rev=3693476","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/eusend\/assets\/screenshot-1.png?rev=3693476","caption":"Settings \u2014 API key, From address checked against your verified domains, tracking and logging."},{"src":"https:\/\/ps.w.org\/eusend\/assets\/screenshot-2.png?rev=3693476","caption":"The email log: what actually happened to every message, and which plugin sent it."},{"src":"https:\/\/ps.w.org\/eusend\/assets\/screenshot-3.png?rev=3693476","caption":"One message in detail, with the receiving server's own reason for the bounce."},{"src":"https:\/\/ps.w.org\/eusend\/assets\/screenshot-4.png?rev=3693476","caption":"Delivery events, the test send, and a rolling summary of the last seven days."}],"raw_content":"<!--section=description-->\n<p>WordPress sends mail with PHP's <code>mail()<\/code> function. It is unauthenticated, it fails\nSPF and DKIM, and receiving servers routinely drop it without telling anyone. Password\nresets never arrive. WooCommerce receipts go missing. Nobody finds out until a customer\ncomplains.<\/p>\n\n<p>This plugin replaces that path. Every <code>wp_mail()<\/code> call \u2014 core, WooCommerce, Contact\nForm 7, Gravity Forms, your theme, anything \u2014 is sent through the\n<a href=\"https:\/\/eusend.dev\">eusend<\/a> API instead, DKIM-signed, from infrastructure that sits in\nthe EU and stores nothing outside it.<\/p>\n\n<h4>What makes this different from the other mail plugins<\/h4>\n\n<p>Most of them stop at \"handed to the provider\". This one records what happened next.<\/p>\n\n<p>Turn on delivery events and eusend posts back to your site as each message moves:\ndelivered, bounced, marked as spam, opened, clicked. The log stops being a list of send\nattempts and becomes an answer to the question you actually have \u2014 <em>did the customer get\ntheir receipt?<\/em> \u2014 with the receiving server's own words when the answer is no.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Replaces <code>wp_mail()<\/code> through the <code>pre_wp_mail<\/code> filter \u2014 no SMTP connection, no port 465 blocked by your host, works on serverless and locked-down hosting.<\/li>\n<li><strong>Real delivery status.<\/strong> Delivered, bounced, complained, opened and clicked, recorded against each message, with the bounce reason the receiving server gave.<\/li>\n<li><strong>Knows who sent what.<\/strong> The log names the plugin or theme that called <code>wp_mail()<\/code>, so you can tell a WooCommerce receipt from a form notification at a glance.<\/li>\n<li><strong>Domain verification checked in place.<\/strong> The settings screen tells you whether the From domain you typed is actually verified on your account, before you find out by sending.<\/li>\n<li><strong>Conflict detection.<\/strong> Warns when another mail plugin is active, which is the usual reason a correctly-configured mailer appears to do nothing.<\/li>\n<li><strong>Site Health integration.<\/strong> A misconfigured mail setup shows up in Tools \u2192 Site Health, where site owners already look.<\/li>\n<li>Full attachment support, including WordPress 6.3's <code>array( 'invoice.pdf' =&gt; '\/tmp\/file' )<\/code> filename form.<\/li>\n<li>Cc, Bcc, Reply-To, custom headers and HTML mail, handled the way core handles them.<\/li>\n<li>Configurable logging \u2014 off, failures only, metadata, or metadata plus the message body \u2014 with automatic retention.<\/li>\n<li>Configure from the admin screen, from <code>wp-config.php<\/code> constants, or from environment variables.<\/li>\n<li>WP-CLI: <code>wp eusend status<\/code>, <code>wp eusend test<\/code>, <code>wp eusend log<\/code>, <code>wp eusend domains<\/code>, <code>wp eusend events<\/code>.<\/li>\n<li>Filters and actions for developers: <code>eusend_should_send<\/code>, <code>eusend_email_payload<\/code>, <code>eusend_email_tags<\/code>, <code>eusend_email_sent<\/code>, <code>eusend_webhook_event<\/code>.<\/li>\n<\/ul>\n\n<h4>Data and privacy<\/h4>\n\n<p>The plugin talks to <code>api.eusend.dev<\/code>, operated by eusend. Sending an email transmits its\nrecipients, subject, body, headers and attachments to that API, which is what delivering\nit requires. Mail is processed and stored inside the EU.<\/p>\n\n<p>Enabling delivery events registers this site's REST endpoint on your eusend account and\nstores a signing secret locally; every incoming event is verified against it before\nanything is written.<\/p>\n\n<p>The plugin makes no other outbound requests, sends no analytics, and phones nothing home.<\/p>\n\n<ul>\n<li><a href=\"https:\/\/eusend.dev\">eusend<\/a><\/li>\n<li><a href=\"https:\/\/eusend.dev\/legal\/terms\">Terms<\/a> \u00b7 <a href=\"https:\/\/eusend.dev\/legal\/privacy\">Privacy<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Add your sending domain at <a href=\"https:\/\/eusend.dev\/domains\">eusend.dev\/domains<\/a> and publish the DNS records it gives you.<\/li>\n<li>Create an API key at <a href=\"https:\/\/eusend.dev\/api-keys\">eusend.dev\/api-keys<\/a>.<\/li>\n<li>Go to <strong>Settings \u2192 eusend<\/strong>, paste the key, and set the From address to an address on your verified domain.<\/li>\n<li>Send a test email from the same screen.<\/li>\n<\/ol>\n\n<p>Prefer to keep credentials out of the database? Define them in <code>wp-config.php<\/code> instead \u2014\nthe settings screen shows those fields as read-only:<\/p>\n\n<pre><code>define( 'EUSEND_API_KEY', 'eu_live_\u2026' );\ndefine( 'EUSEND_FROM_EMAIL', 'no-reply@yourdomain.com' );\ndefine( 'EUSEND_FROM_NAME', 'Your site' );\n<\/code><\/pre>\n\n<p>Every setting also reads an environment variable of the same name.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20smtp%20credentials%3F\"><h3>Do I need SMTP credentials?<\/h3><\/dt>\n<dd><p>No. The plugin uses the eusend HTTP API, so nothing depends on outbound port 465 or 587\nbeing open. That is the usual reason SMTP plugins fail on shared and managed hosting.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20api%20is%20unreachable%3F\"><h3>What happens if the API is unreachable?<\/h3><\/dt>\n<dd><p>wp_mail() returns false and fires <code>wp_mail_failed<\/code>, exactly as a failed SMTP send does,\nand the failure is written to the log with the reason. WordPress core treats that the same\nway it treats any mail failure.<\/p><\/dd>\n<dt id=\"can%20i%20keep%20another%20mail%20plugin%20installed%3F\"><h3>Can I keep another mail plugin installed?<\/h3><\/dt>\n<dd><p>You can, but don't. Two plugins replacing <code>wp_mail()<\/code> means whichever loads first wins,\nsilently. The plugin warns you when it detects one.<\/p><\/dd>\n<dt id=\"will%20it%20send%20from%20any%20address%3F\"><h3>Will it send from any address?<\/h3><\/dt>\n<dd><p>Only from a domain you have verified on your eusend account. That is the point \u2014 an\nunverified domain is exactly what gets mail discarded. \"Force the From address\" is on by\ndefault so a plugin that hardcodes its own sender cannot break your sending.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%3F\"><h3>Does it work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. WooCommerce sends through <code>wp_mail()<\/code>, so order confirmations, invoices and shipping\nnotices all go through eusend with no extra configuration. Set the WooCommerce \"From\"\naddress to your verified domain, or leave \"Force the From address\" on and it is handled.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20multisite%3F\"><h3>Does it work on multisite?<\/h3><\/dt>\n<dd><p>Yes. Each site keeps its own settings and its own log. Constants defined in <code>wp-config.php<\/code>\napply across the network.<\/p><\/dd>\n<dt id=\"where%20is%20my%20email%20data%20stored%3F\"><h3>Where is my email data stored?<\/h3><\/dt>\n<dd><p>In the EU. eusend runs entirely on EU infrastructure \u2014 that is what it is for.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Send every WordPress email through eusend&#039;s EU-native API, and see what actually happened to it \u2014 delivered, bounced, opened or refused.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/366419","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=366419"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/eusend"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=366419"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=366419"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=366419"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=366419"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=366419"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=366419"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}