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: 587

#API reference

Every route lives under /v1. Requests without a valid token return 401.

Method & pathDescription
POST /v1/sendQueue a message for delivery.
GET /v1/messages/{id}Check a message's status.
GET /v1/eventsStream delivery events.
PUT /v1/templates/{name}Create or update a template.
GET /healthLiveness probe. Returns 200 when ready.

#CLI

The quill binary is both the server and the client.

CommandDescription
quill serveStart the sender.
quill send <to>Send a test message.
quill templates lsList templates.
quill statusShow queue depth and delivery rate.