AtlatestRenderedmarkdown
Readme

sigil-ses

A Sigil library for the Amazon SES v2 API. Send email, manage suppression lists, and parse bounce/complaint notifications.

Features

  • Send email -- simple text/HTML emails with To/Cc/Bcc/Reply-To support
  • Bulk email -- send to multiple recipients with template substitution
  • Suppression list -- add, remove, query, and list suppressed addresses
  • Account info -- sending quota, daily usage, enforcement status
  • Identity verification -- check domain/email DKIM and MAIL FROM status
  • Bounce/complaint parsing -- stateless SNS notification parsing with typed records
  • AWS SigV4 signing -- full implementation of AWS Signature Version 4

Usage

(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
  "[email protected]"
  "[email protected]"
  "Hello from Sigil"
  "This is the plain text body."
  html: "<h1>Hello from Sigil</h1><p>HTML body here.</p>"
  reply-to: "[email protected]")

;; Send to multiple recipients
(ses-send-email client
  "[email protected]"
  '("[email protected]" "[email protected]")
  "Newsletter #42"
  "Plain text content."
  html: "<p>Newsletter content.</p>"
  bcc: '("[email protected]"))

;; 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 "[email protected]" "BOUNCE")
(ses-list-suppressed client)
(ses-delete-suppressed client "[email protected]")

;; Check domain identity
(let ((id (ses-get-identity client "systemcrafters.net")))
  (ses-identity-verified? id)
  (ses-identity-dkim-status id))

Bounce/Complaint Notifications

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))))))

Configuration

SES requires AWS credentials with ses:SendEmail and related IAM permissions.

Environment variables (load with your preferred method):

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_REGION (optional, defaults to us-east-2)

Dependencies

  • sigil-stdlib
  • sigil-http
  • sigil-json
  • sigil-crypto

Building

sigil deps install
sigil build
sigil test

License

BSD-3-Clause