Bounces, unsubscribes and the mail log

What happens to an email after it leaves, where to look it up, and why a suppression is never lifted by accident.

Everything this site sends goes out through Resend, and everything that happens to it afterwards comes back — delivered, opened, clicked, bounced, complained, unsubscribed.

What gets sent, and from where

Two addresses, on two different domains, both set on OwlDraft → Email:

Sender What leaves from it
Transactional Sign-in links, email-change confirmations, anything that is not the newsletter.
Newsletter The posts you email out.

They are kept on separate domains on purpose. A newsletter run that upsets a mailbox provider damages the reputation of the domain it went out on, and putting the newsletter on its own subdomain means a bad run can never stop your readers signing in.

The log

Every message is one row, written when it leaves and updated in place as Resend reports on it. It has no screen of its own, because the question people actually ask is about one reader rather than about the list. So it shows up where that question is asked:

  • the activity feed on a member’s screen — every message you have sent that person and what became of it
  • the Emails column on the Members screen — how much of it they open
  • the Email box on a post you have emailed — 1,180 of 1,240 delivered, 46% opened

Rows are pruned after 90 days. That is not optional housekeeping: a 10,000-reader list sent weekly writes 40,000 rows a month. Raise it with the owldraft_publisher_mail_log_retention_days filter if you have the room and a reason.

Suppressions

Three things take a reader off the list, and all three arrive by webhook from Resend:

Unsubscribed They clicked the unsubscribe link in an email.
Bounced The address is dead.
Complained They marked a message as spam.

Any of them flips the reader’s newsletter flag off here, within moments. Without that webhook the flag would still read subscribed, and the next thing that touched their profile would push them cheerfully back onto the list — silently undoing an opt-out, which is both rude and unlawful in most of the places a publication has readers.

So: if you have not set up the webhook, go and do it. It is step 6 of set up email, it takes two minutes, and it is the single most important part of that screen.

A suppressed reader shows on the Bounced view of the Members screen, and is never included in a send.

Lifting one

On the member’s own screen, beside the newsletter pill: Lift. It is the only thing that clears a suppression — saving the member form never does, however the box is ticked.

Lift one when a reader has written in to say they have fixed their mailbox, and not otherwise. Re-mailing people who asked you to stop is how a domain gets blocklisted, and a blocklisted domain is not something a support ticket fixes.

The list at Resend

Publisher keeps one Resend segment per tier, plus one for the free bucket, and every reader carries a property naming their tier. That is what makes Custom by plan possible: an audience is a set of tiers, and so is every segment.

Keeping those true is three things working together, and the Email screen shows all three:

  • a push whenever a reader changes here — tier, name, newsletter flag
  • an hourly sync of the segments
  • a nightly pull of what Resend holds, which is both an offsite backup of your suppression list and the check that finds drift

Sync now and Check for drift on the Email screen run the last two by hand, for the moment after you have changed something and would rather not wait.

The backup matters for one thing in particular. Your addresses are not at risk — every subscriber is a WordPress user, in your own database. What only Resend holds is who asked you to stop, and losing that is the one loss that cannot be repaired by exporting a list.

When mail is not arriving

Work down this, in order:

  1. OwlDraft → Email — is the Delivery card green, and are both domains Verified?
  2. Send test, to your own address, for each sender. In the inbox or in spam?
  3. The reader’s activity feed — sent, delivered, or nothing at all?
  4. If the message never left, the send failed: an expired API key and a sender whose domain stopped verifying are the two usual reasons, and both are on that one screen.

Next: reading the analytics.

Last updated September 13, 2026

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