SMTP retry guide
Retry SMTP delivery without counting the same relay batch twice.
A safe retry depends on whether EmailDesk can prove it is the same logical delivery. Durable relay receipts and quota keys protect supported SMTP retries, while a new application submission is a new send.
Charge quota at the provider-handoff boundary
EmailDesk completes sender, recipient, DNS, size, quota, and applicable protection checks before handing a message to the configured provider. A local pre-handoff block consumes zero units.
Once a genuine provider attempt begins, the recipient and applicable attachment units are billable even if the provider later rejects or defers the message. Provider acceptance is evidence of that handoff, not final delivery.
1 message to 4 unique recipients = 4 recipient units at provider handoffA later 4xx deferral or 5xx rejection does not create a refund or another charge by itself.
Reuse the durable relay identity for the same retry
Supported mail-client and SMTP credential relays derive a stable identity from relay evidence such as the authenticated scope, queue identifier, and message digest. The durable receipt and quota idempotency key allow temporary Postfix processing to recognize the same logical delivery.
Concurrent or repeated processing of that relay reuses the existing quota event. It does not add the recipient or attachment units again.
First attempt: 4 units; same durable relay retry: 0 new units; total remains 4This applies only when EmailDesk recognizes the same supported logical relay batch.
Treat a new application submission as a new send
A direct API resubmission or an application job that creates a new request is a new send unless the application has its own durable business-event control. The current public API and Laravel transport do not promise automatic application-level deduplication.
After a lost or timed-out response, preserve the business event, source job, returned message identifier when available, and EmailDesk history. Check for an existing handoff before manually replaying.
- Do not use a changed subject or recipient list to force what is meant to be the same retry.
- Keep application retry records free of credentials and message content where possible.
- A later bounce belongs to the original provider attempt and does not create another sending charge.
Record the unit breakdown separately from message status
Message count records how many message transactions exist. Recipient units count unique To, Cc, and Bcc envelope destinations. Attachment units apply according to the sending channel. The quota event stores the relevant breakdown while delivery history records queued, accepted, rejected, deferred, or later evidence.
For a hosted mailbox SMTP send, apply the mailbox attachment rule. For an SMTP credential send, current quota accounting records its recipient units. Do not infer one channel's attachment rule from another channel's label.
Do not use retries to bypass a failure
A permanent sender, DNS, policy, size, authorization, or provider rejection should be corrected before another submission. Repeated unchanged retries can consume new quota when they are genuinely new provider attempts.
Idempotency prevents duplicate accounting for the same recognized relay batch; it does not guarantee provider acceptance, final delivery, inbox placement, or deduplication across unrelated systems.
Frequently asked questions
Questions about this guide.
Does an SMTP authentication failure consume quota?
No. Authentication and local validation failures occur before a genuine provider handoff, so they consume zero recipient and attachment units.
Does a temporary Postfix retry charge quota again?
Not when EmailDesk recognizes the same supported logical relay batch. Its durable receipt and quota idempotency key reuse the existing event.
Is resending the same API request automatically idempotent?
No. A direct API resubmission is a new send. Applications should keep a stable business-event or job record and inspect EmailDesk evidence before replaying an uncertain result.
Continue with evidence