AWS Lambda that monitors SES sending events (bounces, complaints, rejections, delivery delays, rendering failures) and pushes alerts to Slack.
SES Configuration Set
→ SNS topic or EventBridge
→ this Lambda (parses SES event, formats alert)
→ Slack webhook
The Lambda supports two input modes:
- SNS — handler:
com.functorful.sesmonitoring.SnsEntryHandler - EventBridge — handler:
com.functorful.sesmonitoring.EventBridgeEntryHandler
Select the appropriate handler in the Lambda configuration based on your event source.
Built with Micronaut 4.9 and compiled to a GraalVM native image for fast Lambda cold starts.
| Event type | Severity | Description |
|---|---|---|
| Bounce (Permanent) | Critical | Hard bounce — recipient address does not exist |
| Bounce (Transient) | Warning | Soft bounce — temporary delivery failure |
| Complaint | Critical | Recipient marked email as spam |
| Reject | Critical | SES rejected the email before sending |
| DeliveryDelay | Warning | Temporary communication failure |
| Rendering Failure | Warning | SES template rendering error |
The Lambda requires one environment variable:
| Variable | Description |
|---|---|
SLACK_WEBHOOK_URL |
Slack incoming webhook URL for alert delivery |
Published to GitHub Container Registry on every version tag:
ghcr.io/functorful/ses-monitoring:<tag>
Tags are created automatically on every push to main using github-tag-action. The default bump is patch.
Include one of these tokens in your commit message to control the bump:
| Token | Example | Result |
|---|---|---|
#patch |
fix: handle null bounce #patch |
v0.1.0 → v0.1.1 |
#minor |
feat: add email gateway #minor |
v0.1.0 → v0.2.0 |
#major |
refactor!: new alert format #major |
v0.1.0 → v1.0.0 |
#none |
docs: update readme #none |
no tag created |
If no token is present, the default #patch bump is applied.
./gradlew build # compile + test
./gradlew test # tests only
./gradlew optimizedDockerBuildNative # build native Docker imageRequires Java 21 and GraalVM.