Skip to content

The client says they didn't receive the email

A staff user gets a message from a client — "I never got the link", "the reminder didn't arrive", "where's my approval email?". This is almost always one of five things; work them top to bottom. The Outbox is the single source of truth — open it before doing anything else.

1. The email was sent and accepted by their server

The platform fired the email and the recipient's mail server accepted it. By far the most common case — usually it's in spam, or it went to the right address but the wrong person at the client.

Check:

  1. Open Outbox in the staff dashboard sidebar.
  2. Filter by the client (or the recipient email).
  3. Sort by Created descending. Find the row that matches what you expect — cycle-request, reminder, approval-request, or client-action-request.
  4. Read the Status column.

If the row shows Dispatched, the email left the platform and the recipient's server accepted it. There's nothing wrong on our side.

Fix:

  • Ask the client to check their spam / junk folder.
  • Click into the row and read the Recipient field — confirm the email address matches the person who's complaining. If it's a shared inbox or a colleague, the right person may simply not be on the contact list.
  • If the address is wrong on the contact record, fix it via Add or edit client contacts and trigger a fresh send.

TIP

Dispatched doesn't mean opened. The platform doesn't track opens by default. See Verify an email was sent for what Dispatched really proves.

2. The email failed or bounced

The platform tried to send but the provider (or the recipient's mail server) rejected it.

Check: in the Outbox row, Status is Failed or Bounced. Click into the row — the error detail panel shows the SMTP-level reason: mailbox does not exist, recipient address rejected, rate-limited, malformed address, etc.

Fix:

  • Bounced is almost always a wrong email on the contact record. Confirm the address with the client by phone or another channel, then update the contact via Add or edit client contacts.
  • Failed with a transient SMTP error — re-trigger the send (start the cycle again, click Request approval, or use Request info from client). Most transient errors clear within minutes.
  • For repeated Failed rows on the same client across multiple sends, escalate via the Outbox stuck runbook — it may be an account-level deliverability issue, not a per-email problem.

3. The email is stuck in Pending

The row exists but the dispatcher hasn't picked it up.

Check: the row's Status is Pending and Created is more than 5 minutes ago.

Fix: this is an outbox-dispatcher problem, not a per-email problem. The dispatcher runs every 10 seconds — anything sitting in Pending for more than 5 minutes means the dispatcher itself is stuck. Escalate via the Outbox stuck runbook.

4. There's no Outbox row at all

You searched the Outbox by client and template and found nothing. The trigger that creates the row never fired.

Check: open the cycle's Audit tab. Look for the event that should have created the email:

EmailAudit event that creates it
Cycle requestcycle.requested
Day-2 / 5 / 7 reminderreminder.dispatched
Approval requestapproval.requested
Action-requiredclient_action.requested

If the upstream audit event is missing, the email was never queued because the underlying state change never happened.

Fix: depends on which email is missing.

  • Cycle request missing — the cycle wasn't actually started, or the client had no active submitter at the time. See Why isn't my cycle showing?.
  • Reminder missing — confirm the cycle is genuinely past the threshold day. The check fires on UTC dates; a cycle started late in the day Singapore time may not hit day-2 until ~24 hours later than you expect. See Timing reference.
  • Approval request missing — the client likely had no active approver at export time. See Approval request didn't auto-fire.

5. The contact has the wrong email or is deactivated

The contact exists but is set to inactive, or the email address has a typo.

Check: open the client → Contacts tab. Find the contact you expected to receive the email.

  • Is Is active ticked?
  • Does the email address match what the client gave you, character-for-character (a single typo in the domain is enough to bounce silently for some providers)?
  • For a cycle-request email, does the contact have Can submit intake ticked?
  • For an approval email, does the contact have Can approve ticked?

Fix: correct the contact via Add or edit client contacts, then re-trigger the email by re-running the action that originally fired it.

Still not finding it?

If you've worked through all five and the client genuinely didn't receive an email that the Outbox shows as Dispatched:

  • Get the recipient's email provider (Gmail, Outlook 365, a hosted Exchange, etc.) and ask them to check the Quarantine / Trash / Blocked senders views for messages from noreply@ your sending domain.
  • Their domain may be silently rejecting mail from our sending IP — that's a deliverability investigation, not a payroll problem. Escalate to the on-call engineer.

For the underlying mechanics of how the platform sends and confirms email, see Verify an email was sent.

Internal use only — BreezyCorp