Email from WordPress

Stelae doesn’t relay email from hosted WordPress sites. Instead, messages your site would normally send are captured in an outbox you can download. This page explains how it works and how to connect your own SMTP provider if you need real outbound delivery.

Why Stelae doesn’t relay email

Running a shared SMTP relay for customer WordPress sites is a reputation and abuse problem. One compromised or misconfigured site (a plugin caught in a loop, a stolen admin password used by spammers, a contact form without a captcha) is enough to get the whole platform’s sending reputation blocklisted. When that happens, every site loses legitimate email: password resets, transaction receipts, support notifications, the works. Keeping Stelae out of the mail path entirely is safer for every tenant.

This is also why every serious static-site / managed-WordPress host takes the same approach: customers bring their own email provider. The difference with Stelae is that Stelae also captures anything the site tries to send so password resets and admin notifications don’t just vanish while you’re setting up.

How outbox capture works

Inside your WordPress container, PHP’s mail function is wired to a small wrapper that forwards each message to Stelae instead of delivering it. Messages are stored on the Stelae server in a per-site outbox that your WordPress container cannot read. This keeps captured mail (including password resets) from being readable by other users on the same WordPress install.

When new mail starts arriving in a previously empty outbox, you’ll get a brief notification to your Stelae account email: just the subdomain and message count, no content. You only get one notification per outbox cycle: subsequent messages while the outbox is non-empty don’t generate more email. The next notification fires only after you clear the outbox and fresh mail arrives. So a runaway plugin that sends a thousand messages still produces exactly one notification, not a flood.

Downloading your outbox

When messages are waiting, your dashboard site card’s overflow menu (…) will include a “Download email outbox (N)” entry. Clicking it gives you a zip file containing each message as a standard .eml file.

Double-click any .eml file to open it in your mail client: Thunderbird, Apple Mail, Outlook, or whatever you use for email. Those apps are designed to render email safely (including HTML from untrusted sources), so this is the right place to read captured messages. The dashboard deliberately doesn’t render them, because rendering arbitrary WordPress email in a browser page would open a security hole.

Outbox limits

A stuck plugin or a form bot can’t fill your disk. If you see an outbox that’s suddenly huge, it’s worth looking at what’s in it. 300 identical messages is a signal that something on the site is misbehaving.

Connecting your own SMTP provider

If you need real outbound email (reliable notifications, form submissions that actually reach your inbox, transactional mail), install WP Mail SMTP or a similar plugin, and connect it to your own email provider.

Once WP Mail SMTP is configured, it takes over the mail path and email flows through your provider directly. Stelae’s outbox capture no longer applies. You keep full control of deliverability, reputation, and volume.

Providers that work well

All of these have free tiers suitable for low-volume WordPress sites:

Quick setup

  1. Sign up with your chosen provider and verify your sending domain (DNS records they provide).
  2. Install WP Mail SMTP from the WordPress plugin directory.
  3. In WP Mail SMTP’s settings, pick your provider and paste the API key or SMTP credentials they gave you.
  4. Send a test email from WP Mail SMTP’s Tools page to confirm delivery.

After the test email arrives in your real inbox, new email from WordPress will flow through your provider instead of the Stelae outbox.

Published static sites

None of this applies to your published static site. There’s no PHP or mail runtime on the exported HTML. For forms on your published site, use a third-party service like Formspree, Basin, or Netlify Forms. See the static compatibility guide for details.