A background job fails, queues an email and succeeds on retry. The user receives “action required” after the result is already available. The template was accurate when it entered the queue. The notification policy was wrong.

Event does not equal email

For each event, write five fields before copy: eligible recipient, consequence of delay, channel, suppression rule and action. “Prompt” has no universal number of minutes; it means waiting could change the person’s next decision. Derive timing from the workflow.

Illustrative eventEligible recipientPolicy choiceAction
Import rejected before any writePerson who started it and still has accessEmail only if the in-app result is no longer active; suppress after a successful retryReview rejected rows
Configured review date approachingCurrent assigneeSend at the workspace’s chosen lead time; cancel on completion or reassignmentReview the item
Routine status changesMembers who chose the relevant summaryBatch by workspace and periodOpen one review
Job completes while the actor is viewing the resultNo email recipientRecord in the product onlyNone

These rows are editorial scenarios, not PBT behaviour or a universal notification standard. Test them against your product’s actual roles, state and obligations.

Urgency is about consequence, not importance

  • Can this recipient act?
  • Will waiting change the outcome or risk?
  • Is the current state already visible where the person is working?
  • Can several events become one decision-ready summary?

An important monthly review can wait for a digest. A failed import may deserve interruption during setup and no message after recovery. If nobody can act, keep the event in an activity log.

Make suppression a state machine

Recheck authoritative product state at send time. Cancel, redirect or batch only through explicit rules:

State before sendPolicy response
Resolved or staleCancel the queued message
Recipient lost access or ownershipDo not reveal workspace data; recalculate eligibility
Equivalent incident already openUpdate the incident record instead of repeating the warning
Optional category disabledRespect the stored preference for that category
Address bounced or complainedApply the provider and application suppression rules; expose a safe in-product recovery path
Workspace deleted or pausedCancel product updates unless a separately verified obligation applies

Strictly transactional, optional product summary and marketing messages may have different requirements. In the United States, FTC guidance distinguishes commercial from transactional or relationship content by primary purpose and treats mixed content carefully. That US framing is not a worldwide classification. Get jurisdiction-specific review for your markets and message types.

Three fictional specimens, attached to policy rows

Illustrative only — no real recipient, customer, delivery result or compliance claim.

Failed import

Subject: Review the rows that were not imported

We stopped before adding records because required fields were missing.

Import reference: EXAMPLE-2048
Current state: No records added

Review the import

Open the product to see the current status. This message is no longer actionable after a successful retry.

Decision digest

Subject: Your workspace review is ready

The current review contains items that need a decision, completed items and blocked items.

Open the current review

This optional summary follows your saved digest preference. The product shows the latest state.

Assigned reminder

Subject: An assigned record is approaching its review date

You are the current assignee for this record.

Review the record

The reminder stops after completion, reassignment or a preference change, subject to the applicable policy for this message.

Transport evidence is not task evidence

In Resend’s documentation, delivered means the recipient’s mail server accepted the message. It does not prove inbox placement or human reading. Other providers may use different semantics. Keep the current task state in the product and link the email back to it.

Maintain only the structured lifecycle needed to operate the feature: notification type, recipient decision, related object, suppression reason, provider reference and states such as created, suppressed, queued, provider accepted, bounced, complained or cancelled. Do not store full message bodies or unnecessary personal data “just in case.” Define purpose, access and retention; legal duties depend on context and jurisdiction.

Authentication, without a deliverability promise

SPF lets a domain authorise hosts for MAIL FROM or HELO use. DKIM associates a domain with a message through a cryptographic signature. DMARC uses SPF or DKIM alignment with the author domain and can publish policy and reporting requests. None guarantees inbox placement, message safety or reading.

RFC 9989 is the current DMARC specification and obsoletes RFC 7489; RFC 9990 covers aggregate reporting. Detailed failure reports described by RFC 9991 can expose headers or content, so assess whether they are needed and protect personal data. RFC 8058 defines one-click unsubscribe for list email through specific headers and an HTTPS POST; it is not a rule that every transactional product email requires the mechanism.

Gmail sender requirements vary by sending profile and volume and apply to personal Gmail accounts. The page is dynamic: check the current rules for your sender instead of copying a threshold into product policy.

Skip a large template library, universal retry count and engagement dashboard. First prove one event-to-recipient row, its stale-state check and its failure path. Opens and clicks do not establish that the customer’s job completed. Email authentication does not establish deliverability performance.

Approve one policy row

RecordDecision
Event, eligible recipient and consequence of delayInterrupt, batch or keep in product
Suppression states and in-product actionCancel, redirect or preserve the current task
Failure ownerWho handles bounce, complaint or transport ambiguity?

Do not write the next template until one real event has a recipient rule and a tested cancellation condition. If a support contact exposed the missing state, return to the ticket evidence register.

Email rules are jurisdictional and mutable