Hey Mauticians 
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
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.
i will try to add the segment filter and campaign decsions
Hey, nice work on the plugin.
Just wondering why you think etailors/mautic-amazon-ses does not support Mautic 6 or 7? I have it currently running in prod on a mautic 7 instance
Mautic 7 Support was added 3 months ago (see here)
Also worth noting for anyone comparing the two: these plugins are quite different in scope. Your plugin handles only incoming SNS webhooks and requires
symfony/amazon-mailer as a separate dependency for actually sending emails. The etailors plugin includes the full SES transport layer using the AWS SDK directly, which
gives you rate limiting with a cross-worker token bucket, batch sending via CommandPool, automatic retries with exponential backoff, send quota caching, soft bounce vs
hard bounce distinction, and dynamic From/Reply-To handling. symfony/amazon-mailer sends one email at a time with no rate awareness or retry logic.
Thanks for the detailed comparison! You’re absolutely right - etailors/mautic-amazon-ses is a more complete solution with its custom SES transport, rate limiting, batch sending, and quota caching. It’s a great plugin and full credit to @pm-pmaas for building it.
My plugin takes a simpler approach - it just uses Symfony’s built-in symfony/amazon-mailer for sending and focuses on the webhook/SNS side. It handles all 10 SES event types (vs 4 in etailors) and includes some fixes like email address parsing for the "Display Name" <email> format that SES sends.
The reason I built this was honestly because I struggled with installing and debugging the etailors plugin on my setup - had to manually debug several things to get it working. I’ve seen others in the community facing similar installation issues too. So I wanted something that’s simple to install (composer require and done), easy to understand, and just works out of the box without needing to dig into the code.
I’m planning to add Segment Filters, Campaign Decisions/Conditions, and Dashboard widgets in future updates features that will make it useful beyond just webhook handling.
Will update the README to reflect this properly. Thanks again for keeping me honest!
The Etailor etailors/mautic-amazon-ses would be a good option, but it has a number of issues on large-volume sending.
Its retry handling is not very accurate, and when errors occur, some emails are often sent multiple times, while this is not visible in the Mautic logs. I contacted the plugin author with a full report, and he is aware of the problem.
On smaller installations, sending errors are much less frequent and the issue is less likely to repeat, although it can still happen.
However, on small installations, the speed of the Symfony mailer is usually sufficient, and its overall stability is higher.
Out of curiosity: Did you try the newest PR applied? Should work much better with large-volume sending and also fixes the duplicate send problem
Do you mean version 1.0.31?
Yes, duplicate sends still occur with that version too, although less frequently.
I currently have a fork of etailor plugin under testing for internal use, but I have not yet collected enough statistics on errors and duplicate sends to draw solid conclusions.