PHPackages                             iamjpsingh/mautic-ses-plugin - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Mail &amp; Notifications](/categories/mail)
4. /
5. iamjpsingh/mautic-ses-plugin

ActiveMautic-plugin[Mail &amp; Notifications](/categories/mail)

iamjpsingh/mautic-ses-plugin
============================

Bounce, complaint, and delivery tracking for Amazon SES via SNS webhooks for Mautic 6+

1.0.0(3mo ago)039↓33.3%GPL-3.0-or-laterPHPPHP &gt;=8.2

Since Apr 1Pushed 2mo agoCompare

[ Source](https://github.com/iamjpsingh/mautic-ses-plugin)[ Packagist](https://packagist.org/packages/iamjpsingh/mautic-ses-plugin)[ Docs](https://github.com/iamjpsingh/mautic-ses-plugin)[ RSS](/packages/iamjpsingh-mautic-ses-plugin/feed)WikiDiscussions main Synced 4w ago

READMEChangelogDependencies (6)Versions (4)Used By (0)

Mautic Amazon SES Plugin
========================

[](#mautic-amazon-ses-plugin)

[![Latest Version](https://camo.githubusercontent.com/4c4797ebc9a18b403b7bfec4d06379b78b5859c0cf4b4782c29d6057670a6e8a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f69616d6a7073696e67682f6d61757469632d7365732d706c7567696e2e737667)](https://packagist.org/packages/iamjpsingh/mautic-ses-plugin)[![License](https://camo.githubusercontent.com/765b307d486824091304b9c73cf027e3d2f950107e8bfc2e90509dcae609b062/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f69616d6a7073696e67682f6d61757469632d7365732d706c7567696e2e737667)](https://packagist.org/packages/iamjpsingh/mautic-ses-plugin)[![PHP Version](https://camo.githubusercontent.com/8f2386f45370bce9a9252d88e5ab703b687f3cd17c85523fa1207ef6c756213e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f69616d6a7073696e67682f6d61757469632d7365732d706c7567696e2e737667)](https://packagist.org/packages/iamjpsingh/mautic-ses-plugin)

Amazon SES webhook handler plugin for **Mautic 6+**. Automatically tracks bounces, complaints, deliveries, and more via AWS SNS webhooks. Marks contacts as **Do Not Contact** on hard bounces and spam complaints.

Works with Symfony's built-in SES transport (`symfony/amazon-mailer`) — no custom transport needed.

Credits
-------

[](#credits)

This plugin is based on the amazing work by **[@pm-pmaas](https://github.com/pm-pmaas)** and their original [etailors/mautic-amazon-ses](https://github.com/pm-pmaas/etailors_amazon_ses) plugin. Huge thanks to them for building the foundation!

The original plugin supports Mautic 4/5. This version has been **rewritten and upgraded** for Mautic 6+ with:

- Full support for **all 10 SES event types** (not just bounce/complaint/delivery)
- **SES v1 + v2** payload format support
- Email address parsing fix for SES `"Display Name" ` format
- SNS `UnsubscribeConfirmation` handling
- Modern PHP 8.2+ strict typing
- **Composer/Packagist** ready for easy installation

---

Requirements
------------

[](#requirements)

- Mautic 6.x / 7.x+
- PHP 8.2+
- `symfony/amazon-mailer` package
- AWS account with SES and SNS access
- SES verified domain or email address

Installation
------------

[](#installation)

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

That's it! The plugin is ready to use.

Quick Start Guide
-----------------

[](#quick-start-guide)

### Step 1: Create IAM Access Keys

[](#step-1-create-iam-access-keys)

1. Go to **AWS Console &gt; IAM &gt; Users**
2. Select or create a user with SES permissions
3. Go to **Security credentials &gt; Create access key**
4. Save the **Access Key ID** and **Secret Access Key**

### Step 2: Configure Mautic Email Settings

[](#step-2-configure-mautic-email-settings)

Go to **Mautic &gt; Settings &gt; Email Settings** and configure:

FieldValue**Scheme**`ses+api`**Host**`default`**User**Your AWS Access Key ID**Password**Your AWS Secret Access Key**Options**Key: `region`, Value: your AWS region (e.g. `us-east-1`, `ap-south-1`)[![alt text](api-setup.png)](api-setup.png)

Click **Save** and **Send Test Email** to verify.

### Step 3: Create SNS Topic

[](#step-3-create-sns-topic)

1. Go to **AWS SNS Console &gt; Topics &gt; Create topic**
2. Select **Standard** type
3. Name it `mautic-ses-notifications`
4. Click **Create topic**

### Step 4: Create SNS Subscription

[](#step-4-create-sns-subscription)

1. Inside the topic, click **Create subscription**
2. Set:
    - **Protocol**: HTTPS
    - **Endpoint**: `https://your-domain.com/mailer/callback`
3. Click **Create subscription**
4. The plugin **auto-confirms** the subscription

### Step 5: Connect SES to SNS

[](#step-5-connect-ses-to-sns)

1. Go to **SES &gt; Identities &gt; your-domain &gt; Notifications tab**
2. Click **Edit** on **Feedback notifications**
3. Set your SNS topic for **Bounce**, **Complaint**, and **Delivery**
4. Enable **Include original email headers**
5. Click **Save**

### Step 6: Test It!

[](#step-6-test-it)

1. Create a contact in Mautic with email: `bounce@simulator.amazonses.com`
2. Send an email to that contact
3. The contact should be marked as **Do Not Contact (Bounced)**

[![alt text](testing.png)](testing.png)

Alternative Configuration Methods
---------------------------------

[](#alternative-configuration-methods)

### Via config/local.php

[](#via-configlocalphp)

```
'mailer_dsn' => 'ses+api://ACCESS_KEY:SECRET_KEY@default?region=us-east-1',
```

### Via Environment Variable

[](#via-environment-variable)

```
MAILER_DSN=ses+api://ACCESS_KEY:SECRET_KEY@default?region=us-east-1
```

Available DSN Schemes
---------------------

[](#available-dsn-schemes)

SchemeProtocolUse case`ses+api`SES v2 HTTPS API**Recommended** - fastest`ses+https`SES v2 HTTPSAlternative API method`ses+smtp`SMTP via SESUse if API access is restricted`ses`Default (same as `ses+smtp`)FallbackSupported SES Event Types
-------------------------

[](#supported-ses-event-types)

All 10 SES event types are handled:

Event TypeActionDescription**Bounce**Marks contact as **Do Not Contact (Bounced)**Hard/soft bounce with full diagnostics**Complaint**Marks contact as **Do Not Contact (Unsubscribed)**Spam complaint from recipient**Delivery**LoggedSuccessful delivery confirmation**Reject**Marks contact as **Do Not Contact (Bounced)**SES rejected the email (e.g., virus detected)**Send**LoggedSES accepted the email for delivery**Open**LoggedRecipient opened the email**Click**LoggedRecipient clicked a link**DeliveryDelay**Logged as warningTemporary delay (mailbox full, etc.)**Rendering Failure**Logged as errorSES template rendering failed**Subscription**LoggedRecipient changed subscription preferencesSNS Message Types
-----------------

[](#sns-message-types)

TypeAction**SubscriptionConfirmation**Auto-confirmed (calls SubscribeURL)**UnsubscribeConfirmation**Logged as warning**Notification**Unwrapped and processed as SES eventSupports both **SES v1** (`notificationType`) and **SES v2** (`eventType`) payload formats.

Advanced: Configuration Set (Optional)
--------------------------------------

[](#advanced-configuration-set-optional)

For tracking Open, Click, and other v2 events, create a Configuration Set:

1. Go to **SES &gt; Configuration Sets &gt; Create**
2. Name it `mautic-tracking`
3. Add an **SNS event destination** for all event types
4. Add `configuration_set=mautic-tracking` to your DSN options

Webhook Endpoint
----------------

[](#webhook-endpoint)

```
POST /mailer/callback

```

Accepts:

- SNS SubscriptionConfirmation (auto-confirmed)
- SNS UnsubscribeConfirmation (acknowledged)
- SNS Notification wrapping SES events
- Direct SES event JSON

SES Simulator Addresses (For Testing)
-------------------------------------

[](#ses-simulator-addresses-for-testing)

AddressSimulates`bounce@simulator.amazonses.com`Hard bounce`complaint@simulator.amazonses.com`Spam complaint`success@simulator.amazonses.com`Successful delivery`suppressionlist@simulator.amazonses.com`Suppression list bounce`ooto@simulator.amazonses.com`Out of office (soft bounce)Troubleshooting
---------------

[](#troubleshooting)

### "Unsupported scheme ses+api" error

[](#unsupported-scheme-sesapi-error)

```
composer require symfony/amazon-mailer
```

### Bounces not being recorded

[](#bounces-not-being-recorded)

- Verify SNS subscription is **Confirmed** in AWS SNS Console
- Check SES Notifications tab - is your SNS topic selected for Bounce/Complaint/Delivery?
- Check webhook URL is publicly accessible
- Check Mautic logs: `var/logs/mautic_*.php`

### Test email works but campaign emails don't

[](#test-email-works-but-campaign-emails-dont)

- Check SES sending limits in AWS Console
- Verify you're out of the SES sandbox (or recipients are verified)

### Plugin not showing in Mautic

[](#plugin-not-showing-in-mautic)

```
php bin/console cache:clear
php bin/console mautic:plugins:reload
```

IAM Policy
----------

[](#iam-policy)

Minimum required IAM permissions for sending:

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ses:SendEmail",
                "ses:SendRawEmail",
                "ses:GetSendStatistics",
                "ses:GetSendQuota"
            ],
            "Resource": "*"
        }
    ]
}
```

Contributing
------------

[](#contributing)

Found a bug? Have a suggestion? Please [open an issue](https://github.com/iamjpsingh/mautic-ses-plugin/issues) or submit a pull request.

License
-------

[](#license)

GPL-3.0-or-later

---

**Made with love for the Mautic community. Special thanks to [@pm-pmaas](https://github.com/pm-pmaas) for the original [etailors/mautic-amazon-ses](https://github.com/pm-pmaas/etailors_amazon_ses) plugin that made this possible.**

###  Health Score

39

—

LowBetter than 85% of packages

Maintenance83

Actively maintained with recent releases

Popularity10

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

2

Last Release

90d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/9673b082452fd373cdbbc3823f08ad1a4c87ab3577f55b133814a8f7e6278ed4?d=identicon)[iamjpsingh](/maintainers/iamjpsingh)

---

Top Contributors

[![iamjpsingh](https://avatars.githubusercontent.com/u/190072362?v=4)](https://github.com/iamjpsingh "iamjpsingh (6 commits)")

---

Tags

pluginemailMauticbounceAmazon SESsns-webhook

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/iamjpsingh-mautic-ses-plugin/health.svg)

```
[![Health](https://phpackages.com/badges/iamjpsingh-mautic-ses-plugin/health.svg)](https://phpackages.com/packages/iamjpsingh-mautic-ses-plugin)
```

###  Alternatives

[etailors/mautic-amazon-ses

Amazon SES Mailer Plugin for Mautic

573.4k](/packages/etailors-mautic-amazon-ses)[railsware/mailtrap-php

The Mailtrap SDK provides methods for all API functions.

60879.6k](/packages/railsware-mailtrap-php)[pabloveintimilla/mautic-amazon-ses

Mautic 5 plugin that provides Amazon SES as an email transport and callback to process bounces

452.4k](/packages/pabloveintimilla-mautic-amazon-ses)[princealikhan/laravel-mautic-api

Free and Open Source Marketing Automation API

405.9k](/packages/princealikhan-laravel-mautic-api)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
