Skip to content

Mail log

Every send — REST, SDK, $mails.send, or an email trigger — writes a _mailLog row before attempting delivery and updates it once an attempt resolves. A trigger whose toField doesn’t resolve to anything usable also writes a "failed" row directly, with no send ever attempted, so a misconfigured trigger is visible here rather than silent. It’s an ordinary system collection, so it’s readable through the generic Records API, or through the dashboard’s Settings → Mail log page (filterable by status/template):

GET /api/collections/_mailLog/records?sort=-created&filter=status='failed'
Field Notes
to JSON array of { address, name }
subject
template The template key used, or "" for a raw send
status queued | sent | failed
error Set when status is failed
messageId Backend-provided message id, when available
created / updated Standard autodate fields

Superuser-read-only end to end (listRule/viewRule/createRule/ updateRule/deleteRule all stay superuser-only) and append-only in practice, like _audit_log — the only writer is the send pipeline itself, not a rule-driven client path.

settings.logs.mailLogMaxDays (default 30) prunes old rows on the same 0 */6 * * * cadence as _logs’ own maxDays; <= 0 disables cleanup. See Settings object.