Coldfeet workers deliver mail via direct MX by default (inbound gateway delivery and outbound without a verified ESP identity). For outbound mail whose header From domain is verified with an ESP, the platform opens an authenticated SMTP session to that ESP — workers are not involved. The same accounts can also terminate inbound MX — see INBOUND-PROVIDER-MX.md.
Inbound gateway delivery to the tenant’s mailbox host always uses the configured smart host (never ESP selection keyed on an external From).
| Provider | Outbound | Inbound MX | Notes |
|---|---|---|---|
| Amazon SES | Yes | Yes | IAM for identity API + SMTP credentials. Region required. Receiving in 22 regions. |
| SendGrid | Yes | Yes | One API key for SMTP (username=apikey) and identity API. Disable click/open tracking. |
| Mailgun | Yes | Yes | Per-domain SMTP credentials created via API and stored on DomainRelayIdentity. Tracking forced off. |
| Resend | Yes | Yes | API key for SMTP (user=resend) and domain API. Svix-signed email.received webhook; raw MIME via Receiving API. |
| Postmark | Yes | Yes | Account token + server token (JSON). SMTP uses server token for user+pass. Inbound: URL token + IP allowlist (no HMAC). |
| MailerSend | Yes | Yes | Per-domain SMTP users. Inbound route HMAC secret. Domains via POST /v1/domains. |
| SparkPost / Bird | No | No | Mid-rebrand API, extra DNS gates. |
Admin → Workers → Relay accounts → Add.
Optional: enable inbound MX so domains can point MX at this provider. How that webhook is authenticated differs per provider — only Mailgun needs a signing secret you paste; SES and SendGrid provision verification material automatically (see below).
SES has no inbound webhook signing secret. Each SNS message is signed with an
Amazon X.509 certificate instead, which Coldfeet verifies. Because a valid
signature only proves some AWS account's topic sent the message, ingest also
pins the TopicArn, S3 bucket and object prefix to the values Provision
inbound created for the account. Notifications from any other topic are
rejected, and an account that has not been provisioned cannot receive at all.
apikey; password is the API keyinboundConfig; requests without a valid
signature are rejected. Hourly reconcile self-heals missing keys.us or eu selects API/SMTP hostsresend; password is the API key (smtp.resend.com:587)email.received webhook and
stores the Svix signing secret automaticallyinbound-smtp.<region>.amazonaws.com (see domain wizard)InboundHookUrl (with URL token) and
InboundDomain on the server. Auth is URL token + Postmark IP allowlist only
(weaker than HMAC — see INBOUND-PROVIDER-MX.md)When a tenant domain is added (or a relay account is enabled), Coldfeet calls the provider API to create an identity. Returned DKIM/CNAME records appear in the domain’s DNS wizard. Eligibility to send is gated on the provider’s verification status.
verified identityinboundMode=provider_mxESPs often rewrite the envelope return path. Coldfeet also ingests provider
failure webhooks at POST /public/relay-events/:provider so ESP-relayed mail
is not silently lost.
See WORKER-CUTOVER.md.