Connecting a transport
Docs / Transports

Connecting a transport

A transport is the mail server or provider you already pay for. We connect to it the way any client would and hand the message over; nothing is sent as if it were ours. Add one in the panel under Transports. The form offers three types — smtp, mailgun and postmark — and a credential you save is never shown again.

Plain SMTP

Host, port (587 unless you set another), username and password. The host has to be a public address: loopback, private networks, the 100.64.0.0/10 range and cloud metadata addresses are refused when you save the transport, and again whenever we connect to it.

Plain SMTP cannot tell anyone what happened after the server accepted the message. A message sent this way stops at Handed to your server, with the server's reply kept word for word — permanently, because that is a property of SMTP rather than a setting.

Amazon SES

Add SES as a plain SMTP transport: host email-smtp.<region>.amazonaws.com, port 587, and the SMTP credentials SES issues for your IAM user. It sends exactly as SES does today.

A native SES type is not offered yet: it needs signed AWS requests (SigV4), which are not built. So an SES transport cannot bind its SNS feed, and its messages stop at the handoff like any other SMTP server's.

Mailgun & Postmark

Mailgun takes the sending domain, an API key and the webhook signing key. Postmark takes a server token and a webhook secret you choose. We send through the provider's API.

Both can report what happened after the handoff — delivered, bounced, complained, unsubscribed — but only once that webhook credential is saved. Until then the transport's row reads no webhook credential set — this transport cannot report until one is. Evidence feeds covers pointing the webhook at us.

Test & health

Testing an SMTP transport opens a real session — greeting, EHLO, STARTTLS and AUTH — and stops before DATA, so nothing is sent and the server's own words come back. Mailgun and Postmark have no live probe yet, so a test there reads unknown and says so, rather than calling a saved configuration healthy.

Every transport is checked again hourly. A result older than 24 hours reads unknown, never healthy, and a failing check is mailed to the people on your account who can change the transport, with the refusal word for word.