Connection settings
Both ports require TLS 1.2 or later. On port
587, the server only offers AUTH after STARTTLS has completed, and authentication attempted before TLS is rejected with 538. Keep certificate verification enabled.
Ordinary account API keys and your dashboard password cannot authenticate to SMTP.
Allowed senders
Each credential has a sender policy. The gateway checks both the envelope sender (MAIL FROM) and the address in the message’s From header against it:
An empty envelope sender (
MAIL FROM:<>) is accepted, but the From header must still be allowed. If the message has no From header, the envelope sender is used as the From address. A disallowed sender is rejected with 553.
The display name comes from the From header you send. The dashboard’s Display name field does not change outgoing messages. See SMTP sender policies for how scopes and sender policies interact.
Recipients and Bcc
The envelope recipients (RCPT TO) decide who receives the message:
- Addresses in the
ToandCcheaders are delivered and shown only if they are also envelope recipients. Header addresses that are not envelope recipients are removed. - Envelope recipients that don’t appear in
ToorCcare delivered as Bcc and are not visible to other recipients. - A
Bccheader in the message is ignored.
send_message build the envelope from To, Cc, and Bcc automatically, so Bcc works as expected with both.
How messages are rebuilt
Inbound parses each submitted message and sends it again through the email API; it doesn’t relay the raw bytes. The delivered message keeps:From,To,Cc,Reply-To, andSubject- The plain-text and HTML bodies
- Attachments, including inline images referenced by
Content-ID In-Reply-To,References, and customX-headers (exceptX-SES-*)
Date, Sender or List-Unsubscribe, are not kept, and the delivered message gets a new Message-ID. A valid Message-ID you set is kept on the copy saved to Sent, so a client that also saves its own copy doesn’t create a duplicate. Line breaks and control characters in header values are replaced with spaces.
S/MIME signed messages (multipart/signed) are the exception: they are relayed unchanged so the signature stays valid, including their Date, Message-ID, and To and Cc headers.
Limits
The size limit applies to the complete MIME message. Base64 encoding makes attachments about a third larger than the original files. If the client sends a
SIZE parameter above the limit, the message is rejected before DATA.
Connections over the per-IP limit are closed without a reply. When a login is throttled, further attempts from that address fail with 421 until the 15-minute window ends, even with the correct password. Authentication requests are also rate-limited by the API.
SMTP sends count toward your account’s sending limits, the credential’s daily send limit and the API rate limits.
Messages sent with a Mailbox + SMTP credential are saved to its IMAP Sent folder automatically, a few seconds after they are accepted. SMTP only credentials have no mailbox and save no copy. See Sent mail.
Supported extensions
The server advertisesPIPELINING, 8BITMIME, SIZE, STARTTLS (port 587, before TLS), and AUTH PLAIN LOGIN (after TLS).
SMTPUTF8, DSN, and ENHANCEDSTATUSCODES are not supported:
- Envelope addresses (
MAIL FROMandRCPT TO) must have an ASCII local part; a non-ASCII local part is rejected with553. Internationalized domain names are accepted. Non-ASCII display names, subjects, and bodies work normally when MIME-encoded. MAIL FROMaccepts only theSIZE,BODY, andAUTHparameters, andRCPT TOaccepts none. Others, such as the DSN parametersRET,ENVID,NOTIFY, andORCPT, are rejected with555. In Nodemailer, leave thedsnoption unset.
STARTTLS, send EHLO again before AUTH. SMTP libraries do this automatically.
Reply codes
Most replies include an enhanced status code in their text, such as5.7.8, even though ENHANCEDSTATUSCODES is not advertised. Some protocol replies, such as 530, 538 and 250 ... Queued as, don’t.
Inbound derives an idempotency key from the credential, envelope sender, recipients, and exact message bytes. If a client resubmits an identical message that was already sent, for example after a dropped connection, Inbound returns the original result instead of sending it twice. Libraries that generate a new
Message-ID or Date for each attempt produce a different message, so this only covers retries of the same bytes.
Examples
Store the credential asINBOUND_MAILBOX_LOGIN and INBOUND_MAILBOX_PASSWORD. Replace support@example.com with an address your sender policy allows. The TypeScript example uses Nodemailer (bun add nodemailer); the Python example uses only the standard library.
465 in Python, use smtplib.SMTP_SSL("smtp.inboundemail.com", 465, context=context) and skip starttls().
Mail client settings
Set the account’s email address to an address your sender policy allows. For step-by-step setup in Apple Mail, iPhone and iPad, Thunderbird and Outlook, including the IMAP settings, see Set up an email client.
Test the connection
Check TLS and the advertised extensions without sending credentials:EHLO example.com. The reply should list AUTH PLAIN LOGIN and SIZE 3145728. Type QUIT to close the connection.