Emails
Emails your application sends, grouped by template or subject, with failures, send times and transports.
Emails shows every message your application hands to a mail transport: how many went out, how many failed, how long sending took and which transport carried them. Use it when a customer says the password reset never arrived.
The list lives at /o/:org/projects/:project/emails and one email at /o/:org/projects/:project/emails/detail?key=....
Where the data comes from
Any span with email.system is an email. The AdonisJS agent wraps @adonisjs/mail and creates one span per message, named email send <mailer>, with these attributes:
| Attribute | Value |
|---|---|
email.system | adonisjs-mail |
email.operation | send |
email.transport | Transport of the mailer |
email.message.subject | Subject |
email.message.from | Sender address |
email.message.to | Recipient addresses, as a JSON array |
email.recipient_count | To, cc and bcc recipients together |
email.message.id | Message ID returned by the transport |
Queued mail is traced too: sendLater ends in the same send path once the queue worker delivers it, so those messages appear when they are actually sent. Mail spans are on by default; mail: false in the agent config turns them off.
How emails are grouped
The key is email.template when your spans set it. Otherwise it is the subject with numbers replaced by #, so "Your order #1042 has shipped" and "Your order #1043 has shipped" share the row "Your order # has shipped". A span with neither uses its name.
The list
| Card | Value | Hint |
|---|---|---|
| Emails Sent | Messages sent in range | Number of templates |
| Failed | Failed sends | Share of all sends |
| Avg Send Time | Mean send duration | P95 |
| Transports | Distinct email.transport values |
Email Volume stacks sent and failed messages per bucket. Send Time plots average and P95.
The table lists up to 200 emails with Service, Email, Sent, Errors, Avg, P95 and Last sent. Sort by Volume (the default), Failures, Avg or P95. A send fails when the transport throws: the agent records the exception on the span and marks it failed.
Email detail
The detail page repeats the cards and charts for one template or subject. When several services send it and you arrived without a service, it asks you to choose one first.
Failure reasons groups failed sends by error.type, falling back to the span status message, with a count and last seen time for the top 20.
Recent executions lists the 50 latest sends with Time, Subject, Recipients, Transport, Status, Duration and a trace link. The trace shows the request or job that sent the message. Filter by All or Failed. Show switches between Recent, the default, and Slowest.
Recipients shows the email.message.to list, or the recipient count when the span has no addresses.
Answering "did the password reset email go out?"
- Find the reset email row and open it.
- Look for the customer's address in Recipients under Recent executions.
- If the row shows Error, read Failure reasons for the transport's message.
- If there is no row at all, open the trace of the reset request on Traces to see whether the mail was queued but never sent.