Relock: record the >= pin form
a4d8c7b7
A Sigil library for the Amazon SES v2 API. Send email, manage suppression lists, and parse bounce/complaint notifications.
(import (amazon ses))
;; Create a client (defaults to us-east-2 region)
(define client (ses-client access-key-id: "AKIA..."
secret-access-key: "wJalr..."))
;; Send a simple email
(ses-send-email client
"sender@example.com"
"recipient@example.com"
"Hello from Sigil"
"This is the plain text body."
html: "<h1>Hello from Sigil</h1><p>HTML body here.</p>"
reply-to: "reply@example.com")
;; Send to multiple recipients
(ses-send-email client
"newsletter@example.com"
'("user1@example.com" "user2@example.com")
"Newsletter #42"
"Plain text content."
html: "<p>Newsletter content.</p>"
bcc: '("admin@example.com"))
;; Check account quota
(let ((acct (ses-get-account client)))
(display (ses-account-send-quota acct))
(display (ses-account-sent-last-24h acct)))
;; Manage suppression list
(ses-put-suppressed client "bounced@example.com" "BOUNCE")
(ses-list-suppressed client)
(ses-delete-suppressed client "bounced@example.com")
;; Check domain identity
(let ((id (ses-get-identity client "systemcrafters.net")))
(ses-identity-verified? id)
(ses-identity-dkim-status id))Parse SNS notifications from SES:
(import (amazon ses notify))
;; In your webhook handler, parse the SNS JSON body:
(let ((notif (parse-ses-notification json-body)))
(when notif
(cond
((ses-hard-bounce? notif)
;; Remove permanently bounced addresses
(for-each remove-subscriber (ses-notification-addresses notif)))
((ses-complaint? notif)
;; Unsubscribe complainers
(for-each unsubscribe (ses-notification-addresses notif))))))SES requires AWS credentials with ses:SendEmail and related IAM permissions.
Environment variables (load with your preferred method):
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_REGION (optional, defaults to us-east-2)sigil deps install
sigil build
sigil testBSD-3-Clause
$ git clone https://codeberg.org/sigil/sigil-ses
v0.9.2 — latest by version, released 2 Sep 2026
All releases — 2 tags in this repository.
One page per file, and every line has a permalink.
Relock: record the >= pin form
a4d8c7b7
7ff8c4f9
The last 20 commits keep a page here. Everything older lives in the clone.