SMTP
Already speak SMTP? Keep your libraries. Point them at Calder and get the same pipeline — queue, retries, events, webhooks — as the REST API.
Status: specified, rolling out. The gateway spec below is final; availability follows the phases in our engineering plan. Test keys will work over SMTP from day one of the rollout.
Settings
| Setting | Value |
|---|---|
| Host | smtp.calder.click |
| Port | 587 (STARTTLS) |
| Username | Project SMTP username (dashboard → SMTP) |
| Password | Generated secret — shown once, hashed at rest |
Nodemailer
mailer.js
import nodemailer from "nodemailer";
const transporter = nodemailer.createTransport({
host: "smtp.calder.click",
port: 587,
secure: false, // STARTTLS — upgraded automatically
auth: { /* user + pass from env */ },
});
await transporter.sendMail({ /* from, to, subject, html */ });Python smtplib
send.py
import smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg["From"] = "app@acme.com"
# …To, Subject, set_content…
with smtplib.SMTP("smtp.calder.click", 587) as s:
s.starttls() # mandatory
s.login(…)
s.send_message(msg)Rules of the road
- TLS is mandatory — plaintext authentication is rejected, always.
- The From address must belong to a verified project identity, or the message is rejected with a 550 and a dashboard explanation.
- Same events, same webhooks, same usage meter as API sends — one pipeline.
- Supported subset: STARTTLS, AUTH PLAIN/LOGIN, MAIL/RCPT/DATA, MIME (HTML, text, attachments), CC/BCC/Reply-To, custom headers.