Reference
Email statuses
Every email status in Emailit, what it means, whether it can still change, which webhook event it sends, and what to do next.
Every email has one status that shows where it is in its lifecycle. This page lists all 14 statuses, how an email moves between them, and what to do when an email stops somewhere you didn’t expect. The status is the latest state only; the full history is on the email’s detail page and in events.
Status reference
“Final” means Emailit won’t change the status on its own any more. A final email can still be retried, which creates a new email with a new ID.
| Status | Dashboard tooltip | Final | Webhook event | Meaning and what to do |
|---|---|---|---|---|
accepted |
Accepted for delivery | No | email.accepted |
Stored and queued for delivery. Usually moves on within seconds. Emails sent over SMTP don’t emit email.accepted. |
scheduled |
Scheduled for delivery in the future | No | email.scheduled |
Waiting for its scheduled_at time. You can change the time or cancel it up to 3 minutes before it’s due. |
delivered |
Delivered to the recipient’s mail server | No | email.delivered |
The receiving server accepted the message. It can still become loaded or clicked, and a later bounce report or complaint can change it to bounced or complained. |
loaded |
Email content was loaded by the recipient | No | email.loaded |
The tracking image was loaded (an open). Needs load tracking on a verified tracking domain. |
clicked |
A link in the email was clicked | No | email.clicked |
A tracked link was clicked. Needs click tracking on a verified tracking domain. |
attempted |
Delivery attempted but resulted in a temporary failure | No | email.attempted |
The receiving server answered with a temporary error. Emailit retries automatically; see the retry schedule. |
bounced |
Email permanently failed to deliver | Yes | email.bounced |
The receiving server rejected the message permanently, a bounce report arrived later, or retries ran out. Check the address before sending to it again. See Bounces and complaints for when the address is suppressed automatically. |
failed |
Failed to deliver due to a specific error | Yes | email.failed |
A processing error rather than an answer from the recipient’s server. Rare. Retry it with the API. |
rejected |
Accepted for delivery but rejected after | Yes | email.rejected |
Emailit refused to send it after accepting it, because an unverified workspace can only send to members. |
suppressed |
Recipient is on the suppression list | Yes | email.suppressed |
Not sent because the address is on your suppression list. Remove the suppression only if you’re sure, then retry. |
received |
Incoming email was accepted | Yes | email.received |
An inbound message was received on your inbound subdomain. |
complained |
A complaint was registered for this email | Yes | email.complained |
The recipient marked it as spam and their provider reported it. The address is added to suppressions unless your automatic suppression settings exclude complaints. Don’t email it again. |
canceled |
Canceled: pulled from the send queue when possible | Yes | email.canceled |
You canceled it in the dashboard or with the API. Cancellation is best effort. |
held |
Email is being held | Yes | email.held |
Emailit didn’t send it. See why an email is held, fix the cause, then retry. |
Webhooks receive email.canceled and email.held when they’re subscribed to all events, or when you add them to the webhook’s event list with the API. See Event types.
Lifecycle
Most emails move along this path:
- Created. An API send creates the email as
accepted, orscheduledwhenscheduled_atis in the future. SMTP sends start asacceptedtoo. Inbound mail is created asreceivedand never changes. - Checked. Before each delivery attempt, Emailit checks the workspace, domain, API key, credits, suppression list and spam score. A failed check ends the email as
held,rejectedorsuppressedwithout sending it. - Delivered or deferred. The delivery attempt either succeeds (
delivered), fails temporarily (attempted, then retried), or fails permanently (bounced). - Engagement. If tracking is on, opens and clicks move a delivered email to
loadedand thenclicked. - Late reports. A bounce report that arrives after delivery changes the status to
bounced. A spam complaint changes it tocomplained.
At any point before delivery, a scheduled, accepted or attempted email can be canceled.
The engagement ladder
Delivery and engagement statuses only move forward:
accepted, scheduled or attempted → delivered → loaded → clicked
A later event never moves an email back down the ladder. If a click is recorded, the email stays clicked even when more opens arrive. An open or click can skip ahead of delivered, because it proves the message arrived. Statuses that end delivery (bounced, failed, rejected, suppressed, complained and canceled) are never overwritten by opens or clicks.
Retry schedule for attempted
When a receiving server answers with a temporary error (a 4xx reply such as 421 or 451, a timeout or a connection error), the email becomes attempted and Emailit tries again. Each wait is twice as long as the previous one:
| After failed attempt | Next step |
|---|---|
| 1 | Try again after 10 minutes |
| 2 | Try again after 20 minutes |
| 3 | Try again after 40 minutes |
| 4 | Try again after 80 minutes |
| 5 | Try again after 160 minutes |
| 6 | Try again after 320 minutes |
| 7 | Wait 640 minutes, then mark the email bounced |
That’s 7 delivery attempts over about 21 hours. When they run out, the email is marked bounced with “Maximum number of delivery attempts (7) has been reached”, and the recipient is added to suppressions with the reason too many soft fails, unless your automatic suppression settings exclude bounces.
Each attempt is listed on the email’s Deliveries tab with the server’s reply, and each one sends an email.attempted event that includes smtp_code, smtp_enhanced_code and smtp_response. Some temporary replies that clearly mean a permanent problem, such as a disabled mailbox, are treated as bounces straight away. When a provider is throttling, Emailit can also pause delivery to it briefly; those rows say “Delivery delayed due to…”.
Why an email is held
A held email was taken out of the send queue without being sent. The Deliveries tab on the email shows which reason applied:
| Reason | Message on the Deliveries tab | What to do |
|---|---|---|
| Workspace suspended | Mail server has been suspended. No e-mails can be processed at present. Contact support for assistance. | Check Sending health and contact support. |
| Sending domain paused | Sending from this domain is paused. Contact support for assistance. | The domain’s bounce rate was too high. See Sending health. |
| Not enough credits | Workspace has not enough email credits to send this email. | Buy credits or turn on auto-refill. |
| Spam score too high | Held because Rspamd scored this message 8.4, which is at or above the threshold of 7. | Read the spam checks for the email, fix the content, then retry. |
| API key set to hold | Credential is configured to hold all messages authenticated by it. | Messages sent with this key are held on purpose. Contact support. |
Held emails aren’t released automatically. After fixing the cause, select Retry on the email, or call Retry an email. Retrying creates a new email with the same content and charges credits again.
Why an email is rejected
Until your workspace has production access, you can only send to workspace members’ account emails. The API returns 403 and SMTP returns 550 for other recipients at send time, so most of the time you see the error instead of an email. The rejected status appears when the same check fails later, at delivery time, for example for an email that was scheduled earlier. The Deliveries tab shows “Unverified workspaces can only send to workspace members’ account emails” and the blocked address.
Retry rules
| Dashboard Retry button | Retry an email API | |
|---|---|---|
| Statuses | held, suppressed |
bounced, failed, suppressed, held |
| Age | Less than 30 days old | Less than 30 days old |
| Content | Must not be purged by data retention | Must not be purged |
| Result | A new email with a new ID; the original is unchanged | Same, the response includes original_id |
For a suppressed email, remove the address from your suppression list first, otherwise the retry is suppressed again.