Set up email

Create a Resend account, add the API key, verify two sending domains in DNS, and wire up the unsubscribe webhook.

Everything Publisher does for a reader arrives by email: the sign-in link, the receipt, the newsletter. WordPress cannot send those on its own — mail from a web host is rate-limited and lands in spam — so Publisher delivers through Resend.

Resend’s free tier is enough to get started, and you only ever pay for what you send.

1. Create the Resend account and an API key

  1. Sign up at resend.com.
  2. Open API Keys in the left sidebar and click Create API Key.
  3. Give it Full access for now, and copy the key. Resend shows it once.

Full access is needed because Publisher is about to create your sending domains for you. Once they are verified you can swap it for a Sending access key — this site never needs to do anything but send.

2. Paste the key into WordPress

  1. Go to OwlDraft → Email.
  2. Paste the key into API key and save.

The Delivery card at the top should now read Resend is handling every email this site sends.

Better, if you can: put the key in wp-config.php instead, above the “stop editing” line —

define( 'OWLDRAFT_PUBLISHER_RESEND_API_KEY', 're_xxxxxxxx' );

A constant outranks anything stored in the database, and a credential that does not have to live in the database should not.

3. Choose the two from-addresses

Publisher sends from two addresses, on two different domains:

Example What leaves from it
Sign-in and receipts [email protected] Every email that is not the newsletter, membership receipts included.
Newsletter [email protected] The posts you email out.

They must not share a domain. A newsletter run that upsets a mailbox provider damages the reputation of the domain it was sent from — putting the newsletter on its own subdomain means a bad run can never stop your readers signing in.

Fill both in and click Save and create the sending domains. Publisher creates both domains at Resend for you; the part after each @ becomes the domain.

Neither address can receive mail. Replies to the newsletter come back to your site’s admin address.

4. Add the DNS records

The screen now lists the records for each domain — a handful of TXT and CNAME entries covering SPF, DKIM and DMARC.

  1. Open the DNS editor wherever your domain is managed (your registrar, or Cloudflare).
  2. Add every row exactly as shown: Type, Name, Value.
  3. Come back and click Check again.

Record names come back relative to the zone, so they already include the subdomain — do not add mail. a second time.

DNS takes anywhere from a minute to a few hours to propagate. If the status still says Waiting for DNS, wait and press Check again. Publisher also re-checks once a day on its own, so a domain that verifies overnight is picked up without you coming back.

You are done when both domains say Verified.

5. Send a test

Put your own address in Send tests to and click Send test for each sender. If it arrives in the inbox rather than spam, your DNS is right.

6. Add the unsubscribe webhook

Without this, unsubscribes and bounces never reach your site, and you will keep emailing people who asked you to stop.

  1. On OwlDraft → Email, copy the Endpoint URL.
  2. At Resend, go to Webhooks → Add Webhook, paste the URL, and subscribe it to the email and contact events.
  3. Copy the webhook’s Signing secret — it begins with whsec_ — and paste it back into Signing secret in WordPress. Save.

The endpoint is public, and that signature is the whole of what protects it. Anything that does not match is refused.

7. Check the list

Further down the same screen, the Segments card shows how many contacts Resend is holding and when they were last confirmed. The sync runs hourly and the drift check nightly; Sync now and Check for drift are there for the moment after you have changed something and would rather not wait.

Next: set up Stripe.

Last updated September 13, 2026

Something missing or out of date? Ask us and we will fix the page.