Concepts
Sending & replies
Send, reply and forward, and the rules that keep send0 mail landing in inboxes.
Send a new message
const sent = await send0.messages.send(inbox.id, {
to: "dana@acme.com", // string, {email, name}, or a list
cc: [{ email: "ops@acme.com", name: "Ops" }],
subject: "PO #4471 delivery date",
text: "Can you confirm Thursday?",
html: "<p>Can you confirm <b>Thursday</b>?</p>", // optional
});A new message starts a new thread. Up to 50 recipients across to, cc and bcc. If you send only html, a plain-text version is generated for you.
Reply
await send0.messages.reply(msg.id, { text: "Thursday works.", reply_all: false });- Goes to the original sender (their
Reply-Toif set). Withreply_all: true, the originalToandCcare included too. Your own address is always left out. - Keeps the thread:
In-Reply-To,Referencesand aRe:subject.
Forward
await send0.messages.forward(msg.id, { to: "finance@acme.com", text: "FYI, see below." });The original is quoted under a standard ---------- Forwarded message --------- header in a new thread. Attachments aren't forwarded yet.
Responses
| Status | Body | When |
|---|---|---|
201 | Message with status: "sent" | Sent through our mail servers |
202 | Draft | The inbox's send policy is approval. See Drafts. |
Delivery happens after that: status moves to delivered, bounced or complained, and you get message.delivered / message.bounced / message.complained events.
Sending rules
These protect everyone's deliverability on the shared domain. Breaking one returns an error with a clear code:
| Rule | Error |
|---|---|
Free accounts and reply_only inboxes may only send to addresses that have emailed that inbox | 403 recipient_not_allowed |
| Addresses that hard-bounced or complained are never mailed again from your account | 422 recipient_suppressed |
| New accounts can send 50 messages per day (UTC). The limit rises as your record builds. | 429 daily_limit_reached |
| Sending pauses automatically if complaints pass 0.3% or hard bounces pass 5% over 30 days. Receiving keeps working. | 403 sending_paused |
Cold outreach, bulk mail and marketing are not allowed. See the acceptable use policy.
Test keys
With an s0_test_ key, sends go through every rule above and are recorded as sent, but nothing leaves. Use them in CI.
How messages are built
Every message has Message-ID: <msg_…@send0.email>, a sender name, a plain-text part, and is DKIM-signed for send0.email, with SPF and DMARC aligned. Bodies use quoted-printable, as mainstream mail clients do. See Deliverability.