https://github.com/eventhomes/laravel-mandrillhooks
A simple Mandrill webhook base controller for catching bounced, rejected, etc mail events.
https://github.com/eventhomes/laravel-mandrillhooks
laravel mandrill php
Last synced: 4 months ago
JSON representation
A simple Mandrill webhook base controller for catching bounced, rejected, etc mail events.
- Host: GitHub
- URL: https://github.com/eventhomes/laravel-mandrillhooks
- Owner: eventhomes
- License: mit
- Created: 2015-07-22T01:25:25.000Z (almost 11 years ago)
- Default Branch: develop
- Last Pushed: 2021-04-20T16:06:54.000Z (about 5 years ago)
- Last Synced: 2025-12-09T23:42:25.896Z (5 months ago)
- Topics: laravel, mandrill, php
- Language: PHP
- Homepage:
- Size: 23.4 KB
- Stars: 63
- Watchers: 5
- Forks: 12
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Laravel Mandrill Webhook Controller
[](https://github.com/eventhomes/laravel-mandrillhooks/releases)
[](LICENSE.md)
[](https://packagist.org/packages/eventhomes/laravel-mandrillhooks)
A simple Mandrill webhook controller to help with email events. Useful for notifying users that you cannot reach them via email inside your application. Compatible with Laravel 5+ and Lumen 5+.
## Installation
```composer require eventhomes/laravel-mandrillhooks```
## Basic Usage
1) Create a controller that extends MandrillWebhookController as follows. You can then handle any Mandrillapp webhook event.
```php
use EventHomes\Api\Webhooks\MandrillWebhookController;
class MyController extends MandrillWebhookController {
/**
* Handle a hard bounced email
*
* @param $payload
*/
public function handleHardBounce($payload)
{
$email = $payload['msg']['email'];
}
/**
* Handle a rejected email
*
* @param $payload
*/
public function handleReject($payload)
{
$email = $payload['msg']['email'];
}
}
```
2) Create the route to handle the webhook. In your routes.php file add the following.
```php
post('mandrill-webhook', ['as' => 'mandrill.webhook', 'uses' => 'MandrillController@handleWebHook']);
```
3) [Exclude your route from CSRF protection](https://laravel.com/docs/5.4/csrf#csrf-excluding-uris) so it will not fail.
4) Make sure you add your webhook in Mandrill to point to your route. You can do this here: https://mandrillapp.com/settings/webhooks
## (Optional) Webhook Authentication
If you would like to increase the security of the webhooks. Add the *MandrillWebhookServiceProvider* provider to the providers array in config/app.php
```php
'providers' => [
...
EventHomes\Api\Webhooks\MandrillWebhookServiceProvider::class,
],
```
Next, publish the configuration via
```php
php artisan vendor:publish --provider="EventHomes\Api\Webhooks\MandrillWebhookServiceProvider"
```
Simply add your Mandrill webhook key in the config file and requests will be authenticated.
## Webhook Events
[Webhook event types](https://mandrill.zendesk.com/hc/en-us/articles/205583217-Introduction-to-Webhooks#event-types):
Event type | Method | Description
------------ |------------ |---------------
Sent | handleSend() | message has been sent successfully
Bounced | handleHardBounce() | message has hard bounced
Opened | hadleOpen() | recipient opened a message; will only occur when open tracking is enabled
Marked As Spam | handleSpam() | recipient marked a message as spam
Rejected | handleReject() | message was rejected
Delayed | handleDeferral() | message has been sent, but the receiving server has indicated mail is being delivered too quickly and Mandrill should slow down sending temporarily
Soft-Bounced | handleSoftBounce() | message has soft bounced
Clicked | handleClick() | recipient clicked a link in a message; will only occur when click tracking is enabled
Recipient Unsubscribes | handleUnsub() | recipient unsubscribes
Rejection Blacklist Changes | handleBlacklist() | triggered when a Rejection Blacklist entry is added, changed, or removed
Rejection Whitelist Changes | handleWhitelist() | triggered when a Rejection Whitelist entry is added or removed
## Contributors
Special thanks to @rafaelbeckel and @minioak!