Documentation
Quill
Transactional email through your own SMTP relay.
Quill gives your application one HTTP endpoint to send transactional email. It queues each message, delivers it through the SMTP relay you configure, and retries on temporary failures.
Messages can render stored templates with per-send variables. A delivery-event stream reports accepted, delivered, and bounced states, so you don't have to read mail server logs.
#Installation
Quill ships as one static binary. Place it on your host and start it:
# download and start $ curl -sSL get.teslassa.duckdns.org/install | sh $ quill serve --data /var/lib/quill → listening on :2500 · api ready
By default Quill binds to 127.0.0.1:2500. Put it behind your own reverse proxy to expose it over TLS.
#Quickstart
# send a message $ curl -X POST :2500/v1/send \ -d '{"to":"a@b.c","subject":"Hi"}' → queued · id msg_7 # stream delivery events $ curl :2500/v1/events {"id":"msg_7","state":"delivered"}
#Configuration
Configure with flags, environment variables, or a small YAML file. Flags take precedence.
# quill.yaml
data: /var/lib/quill
listen: 127.0.0.1:2500
log: info
smtp:
host: smtp.internal
port: 587data— directory for the send queue and templates.listen— address the HTTP interface binds to.smtp.host— the SMTP relay Quill delivers through.
#API reference
Every route lives under /v1. Requests without a valid token return 401.
| Method & path | Description |
|---|---|
POST /v1/send | Queue a message for delivery. |
GET /v1/messages/{id} | Check a message's status. |
GET /v1/events | Stream delivery events. |
PUT /v1/templates/{name} | Create or update a template. |
GET /health | Liveness probe. Returns 200 when ready. |
#CLI
The quill binary is both the server and the client.
| Command | Description |
|---|---|
quill serve | Start the sender. |
quill send <to> | Send a test message. |
quill templates ls | List templates. |
quill status | Show queue depth and delivery rate. |