No auth configured. Set HTTP_AUTH_USERNAME / HTTP_AUTH_PASSWORD to secure this instance.

Takes about 5 minutes. No AWS credentials shared with Sessy — you configure AWS to push events to your webhook URL. All events are cryptographically verified.

New to SES? Follow the full AWS SES setup guide before continuing.

Running in production? Review security and deliverability best practices.

1. Create a Configuration Set

A Configuration Set tracks what happens after emails are sent.

  1. Go to Amazon SES (correct region)
  2. Navigate to Configuration sets
  3. Click Create set
  4. Name: betalist-ses
  5. Leave defaults, click Create set

Prefer CLI?

aws ses create-configuration-set \
  --configuration-set '{"Name":"betalist-ses"}' \
  --region <region>

2. Create an SNS Topic

SNS forwards events to your webhook.

  1. Go to Amazon SNS
  2. Click TopicsCreate topic
  3. Select Standard (not FIFO)
  4. Name: betalist-ses-events
  5. Click Create topic

Prefer CLI?

aws sns create-topic \
  --name "betalist-ses-events" \
  --region <region>

3. Subscribe the Webhook

Create an HTTPS subscription pointing to Sessy.

  1. From the SNS topic, click Create subscription
  2. Protocol: HTTPS
  3. Endpoint: https://ses.woz.lt/webhooks/d5caf1d3-ac03-44b7-9b4f-2610a264547d
  4. Leave filter policy empty
  5. Leave "Enable raw message delivery" unchecked
  6. Click Create subscription
  7. Confirmation is automatic

Prefer CLI?

aws sns subscribe \
  --topic-arn arn:aws:sns:<region>:<account-id>:betalist-ses-events \
  --protocol https \
  --notification-endpoint "https://ses.woz.lt/webhooks/d5caf1d3-ac03-44b7-9b4f-2610a264547d" \
  --region <region>

4. Add an Event Destination

Connect your Configuration Set to SNS.

  1. Go to SES → Configuration sets
  2. Click betalist-ses
  3. Event destinations tab → Add destination
  4. Select event types: Sends, Deliveries, Bounces, Complaints, Opens, Clicks, Delivery delays, Rejections
  5. Destination type: Amazon SNS
  6. Topic: betalist-ses-events
  7. Enable "Include original email headers"
  8. Click Add destination

Prefer CLI?

aws ses create-configuration-set-event-destination \
  --configuration-set-name "betalist-ses" \
  --event-destination '{
    "Name":"betalist-ses-events",
    "Enabled":true,
    "MatchingEventTypes":["bounce","click","complaint","delivery","deliveryDelay","open","reject","renderingFailure","send","subscription"],
    "SNSDestination":{"TopicARN":"arn:aws:sns:<region>:<account-id>:betalist-ses-events"}
  }' \
  --region <region>

5. Use the Configuration Set

Specify your Configuration Set when sending emails.

With aws-sdk-sesv2:

ses.send_email(
  from_email_address: "[email protected]",
  destination: { to_addresses: ["[email protected]"] },
  content: { ... },
  configuration_set_name: "betalist-ses"
)

With aws-actionmailer-ses:

Set globally:

class ApplicationMailer < ActionMailer::Base
  default "X-SES-CONFIGURATION-SET" => "betalist-ses"
end

Or per mailer:

class UserMailer < ApplicationMailer
  def welcome(user)
    headers["X-SES-CONFIGURATION-SET"] = "betalist-ses"
    mail(to: user.email, subject: "Welcome!")
  end
end

Verify it works

Send a test email with the Configuration Set. Events should appear in Activity within seconds.

CLI checks:

aws sns list-subscriptions-by-topic \
  --topic-arn arn:aws:sns:<region>:<account-id>:betalist-ses-events \
  --region <region>

aws ses describe-configuration-set \
  --configuration-set-name "betalist-ses" \
  --configuration-set-attribute-names eventDestinations \
  --region <region>