Amazon SES Plugin for Mautic 6+ — Bounce, Complaint & Full Event Tracking via SNS

Hey Mauticians :waving_hand:

We’ve just released an open-source Amazon SES webhook handler plugin for Mautic 6+ and would love for the community to test it, use it, and help us catch any bugs.

GitHub: https://github.com/iamjpsingh/mautic-ses-plugin Packagist: composer require iamjpsingh/mautic-ses-plugin

What it does

If you’re using Amazon SES as your mailer in Mautic 6+, this plugin handles the SNS webhook callbacks so your Mautic instance automatically:

  • Marks contacts as Do Not Contact on hard bounces and spam complaints

  • Tracks all 10 SES event types — Bounce, Complaint, Delivery, Reject, Send, Open, Click, DeliveryDelay, Rendering Failure, and Subscription

  • Auto-confirms SNS subscriptions — no manual confirmation needed

  • Handles both SES v1 (notificationType) and SES v2 (eventType) payload formats

It works with Symfony’s built-in symfony/amazon-mailer transport — no custom transport layer required.

Why we built this

The original etailors/mautic-amazon-ses plugin by @pm-pmaas is excellent but only supports Mautic 4/5. With Mautic 6 moving to Symfony 6.x and the new mailer architecture, we needed a rewrite. So we rebuilt it from scratch with:

  • Full support for all 10 SES event types (original handled 3)

  • SES v1 + v2 payload format support

  • Fix for the SES "Display Name" <email> address format parsing issue

  • SNS UnsubscribeConfirmation handling

  • Modern PHP 8.2+ strict typing

  • Composer/Packagist installation (no manual file copying)

Installation

composer require iamjpsingh/mautic-ses-plugin
php bin/console cache:clear
php bin/console mautic:plugins:reload

Then set up your SNS topic, point the HTTPS subscription to your-domain.com , connect it to your SES identity’s notification settings, and you’re done. Full step-by-step setup guide is in the README.

Testing

You can verify it works immediately using SES simulator addresses:

  • bounce@simulator.amazonses.com → should mark contact as DNC (Bounced)

  • complaint@simulator.amazonses.com → should mark contact as DNC (Unsubscribed)

  • success@simulator.amazonses.com → successful delivery logged

Requirements

  • Mautic 6.x / 7.x+

  • PHP 8.2+

  • symfony/amazon-mailer

  • AWS account with SES + SNS

Looking for feedback

This is working well in our environment but we’d love more eyes on it. If you’re running SES with Mautic 6+, please give it a try and let us know:

  • Any issues with specific SES event types

  • Edge cases with different AWS regions or SES configurations

  • Anything that could be improved

Bug reports and PRs welcome on GitHub: https://github.com/iamjpsingh/mautic-ses-plugin/issues

License: GPL-3.0-or-later

Credit to @pm-pmaas for the original plugin that inspired this.

It would be great if the plugin adds segment filters and campaign decisions.