Overview
The official Euromail plugin routes every wp_mail() call -- password
resets, WooCommerce order emails, contact-form notifications, anything a
theme or plugin sends -- through the EuroMail API. It replaces the generic
"point an SMTP plugin at EuroMail" setup described in
Send Email via SMTP with a
purpose-built plugin: an automatic SMTP fallback if the API is unreachable,
a per-email delivery log with resend, a Site Health check, a Domains panel,
and a webhook receiver that updates each log entry's status as delivery
events arrive.
If you only need a one-off SMTP relay (e.g. a non-WordPress mail client, or you'd rather keep using WP Mail SMTP/FluentSMTP), the generic SMTP guide still works -- the plugin is the richer option, not the only one. Migrating a live store's existing mail? Use Migrate WordPress & WooCommerce email, which sequences plugin setup with domain verification and suppression import so no order email is lost during cutover.
Requirements
- WordPress 5.7 or later
- PHP 7.4 or later
- An EuroMail account and API key (API Keys & Authentication)
Install
The plugin is pending review on wordpress.org -- once listed, install it the normal way: Plugins → Add New, search for "Euromail", Install Now, then Activate.
Until then, install from the latest release zip on GitHub:
github.com/kalle-works/euromail-wordpress/releases --
download it, then Plugins → Add New → Upload Plugin in wp-admin, or
extract it into wp-content/plugins/.
Configure
Go to Euromail → Settings.
- API key -- paste your
em_live_...key and click Verify key. You can also defineEUROMAIL_API_KEYinwp-config.phpinstead of storing it in the database; the settings field is disabled and shows "Defined in wp-config.php" when that constant is set. - Sending backend -- Euromail API (default) sends over HTTPS.
SMTP sends over the SMTP relay instead (
smtp.euromail.dev) -- useful if outbound HTTPS toapi.euromail.devis blocked but SMTP isn't. Either way delivery, tracking, and webhooks work identically; see Send Email via SMTP for what the SMTP path does under the hood. - Fallback -- when enabled, a failed send on the primary backend is retried immediately on the other one (API ↔ SMTP) before being queued for retry. Turn this on if you want the plugin to route around a transient outage on one path automatically.
- SMTP settings -- only used when the backend is SMTP, or as the
fallback target. Click Use Euromail SMTP relay to fill in
smtp.euromail.dev, port 587, and STARTTLS, and copy your API key into the password field -- the same connection settings documented in Send Email via SMTP. Or point it at any other SMTP relay you already use. - Force From address -- optionally override the
Fromheader on every outgoing email, regardless of what the theme or a plugin sets. The forced address must be on a domain you've verified (see Domain Verification) -- sends from an unverified domain are sandboxed. - Transactional by default / Open/click tracking by default -- defaults applied to every send unless a specific call overrides them.
- Webhook secret -- the Settings page shows your site's webhook
endpoint URL (
https://yoursite.com/wp-json/euromail/v1/webhook). Create the webhook at dashboard.euromail.dev pointing at that URL; the secret is shown only once, at creation -- paste it into this field (or defineEUROMAIL_WEBHOOK_SECRETinwp-config.php). Once connected, delivery, open, click, bounce, and complaint events update each log entry's status automatically -- see Webhooks for the event types and payload shape. - Log retention -- how many days a log entry is kept before pruning (default 30).
- Store message body -- off by default, for privacy: the log then only records metadata (recipient, subject, status, timestamps), never the rendered HTML/text a send contained. Turning it on additionally keeps that body, at the cost of storing message content in your database -- and is what makes resending a failed email from the log possible, since there's otherwise nothing to resend.
- Delete data on uninstall -- removes the log table and settings when the plugin is deleted, not just deactivated.
Send a test email
Euromail → Send Test sends a one-off email to any address, in HTML or plain text, optionally forcing the API or SMTP backend regardless of the Settings default -- useful for confirming both paths work before relying on automatic fallback.
The delivery log
Euromail → Log lists every email the plugin has sent, with status, backend used, and timestamps. Opening an entry shows the full detail -- recipient, subject, backend, attempt count, the API's message ID, the idempotency key used (so a retried send can't double-deliver), any error, and the webhook event timeline once webhooks are connected. A failed send with a stored body (see the Store message body privacy note above) can be resent directly from its detail page -- without a stored body there's nothing to resend from, only the record that it failed.
Automatic retries
A send that fails with a retryable error (a 5xx from the API, a 429,
or a transport failure) is queued and retried automatically on a
per-minute cron schedule -- the plugin's own queue, not the
PHP SDK's built-in retry loop (which the plugin
disables, since a wp_mail() call can't block for minutes or hours
waiting on it). The wait
before each retry follows a fixed backoff -- 1 minute, then 15 minutes,
then 2 hours, then 12 hours -- for up to 5 attempts total (the original
send plus 4 retries), or the API's own Retry-After hint when it gives
one. Every attempt, including retries, reuses the same idempotency key, so
a delayed retry can't result in a duplicate email if an earlier attempt
actually went through.
Domains panel
Euromail → Domains lists the domains verified on your account and their status, without leaving wp-admin. Sends from a domain that isn't verified yet are sandboxed and may not be delivered -- see Domain Verification to add and verify one.
Site Health
WordPress's built-in Tools → Site Health page runs an "Euromail can send email" check, confirming the API key is configured and the API is reachable -- so a broken configuration shows up as a Site Health warning rather than a silent mail failure.
What the plugin does not change
- Template and API-only features aren't reached through
wp_mail(). Scheduled sends, per-send tags, and template aliases are API features you'd use directly via the PHP SDK or REST API; the plugin's job is routing WordPress's own mail, not replacing custom integrations. - Attachments,
Reply-To, and multiple recipients on awp_mail()call are all passed through normally -- nothing about how plugins and themes callwp_mail()needs to change.
See also
- Send Email via SMTP -- the underlying SMTP relay, for a non-plugin setup or another SMTP client entirely.
- Migrate WordPress & WooCommerce email -- moving a live store's mail without losing an order confirmation.
- Official SDKs -- the PHP SDK this plugin uses
under the hood, for custom sends outside
wp_mail(). - Webhooks -- the event payloads driving the log's status updates.