EmailEvents handles incoming events for your emails: bounces, drops, delivery, link clicks, and replies. It aims to do this in a provider agnostic way. Currently supports Sengrid and AWS.
Add this line to your application's Gemfile:
gem 'email_events'
And then execute:
$ bundle
Or install it yourself as:
$ gem install email_events
Then install the migration for tracking sent emails:
$ rails g email_events:install
-
Setup your action_mailer smtp settings as usual. Email_events will detect whether your using Sendgrid SES based on the smtp address, but you can also set the adapter in an initializer -- eg.
EmailEvents.provider = :sendgrid
. -
Important: Set
config.action_mailer.smtp_settings[:return_response] = true
. This is necessary to get the email provider's unique ids back for tracking events against the original email.
-
Login to your SendGrid account and navigate to "Mail Settings" -> Event Notification.
-
Turn the module "On".
-
Set the HTTP POST URL to https:///email_events/sendgrid
-
Under "Select Actions", choose the event types for which you would like to receive triggers.
That's it!
-
Login to the AWS Management Console.
-
Open up the AWS SNS console.
-
Click "Create Topic". Set both the the "Topic name" to "email_events" and the "Display name" to "emails". Click "Create topic".
-
In the "Topic Details", click "Create Subscription". Set the endpoint to https:///email_events/ses.
-
With your Rails server running, click "Request confirmations" to confirm the subscription at your endpoint.
-
Open up the AWS SES console.
-
Under either "Domains" or "Email Addresses" (depending on whether you want event triggers for an entire domain or individual senders), click on a domain or email adress, then click "Details" and expand the "Notifications" tab.
-
Click Edit Configuration and set the SNS Topic to "email_events" for Bounces, Complaints, and/or Deliveries.
-
At the moment, you need to mount the sns_endpoint gem engine which email_events uses (yes, a nice-to-have would be for email_events to just act as an engine itself). Put
mount SnsEndpoint::Core => '/email_events/ses'
in your routes.rb.
Simply add an on_event
handler to your mailer to start handling email events. Eg.:
class MyMailer < ActionMailer::Base
on_event :handle_event
...
def handle_event(event_data, email_data)
if event_data.event_type == :bounce
my_bounce_notification_method(email_data.to)
end
end
end
- For Sendgrid: :delivered, :bounce, :dropped, :deferred, :processed, :click, :open, :spamreport, :group_unsubscribe, :group_resubscribe
- For AWS: :delivered, :bounce, :spamreport
You can track custom JSON data along with the original email message. This data will then be available to you in the event handler:
class MyMailer < ActionMailer::Base
on_event :handle_event
track_data :custom_metadata
...
def custom_metadata
{
my_data: true
}
end
def handle_event(event_data, email_data)
my_data = email_data.data[:my_data]
...
end
end
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/85x14/email_events.
The gem is available as open source under the terms of the MIT License.