Отслеживаем отправленные письма в Rails-приложении с помощью open source
Было бы здорово иметь в Rails-приложении функционал обычного почтового ящика. Если эта мысль хоть раз приходила вам в голову, у нас хорошие новости. Наш Ruby-разработчик Антон Богданов сделал email-трекер Emailbutler для приложений на Rails, который позволяет логировать все отправленные через Action Mailer письма. У трекера есть удобный интерфейс, который позволяет сортировать и искать письма.
Главная функция Emailbutler — запись всех исходящих писем. Если отправка прервана ошибкой, письма не появятся в списке. UI позволяет удобно работать со списком писем, фильтровать и искать их по получателям и действиям.
Вторая полезная функция — сбор данных от SMTP-провайдеров. В интерфейсе видно, ушло ли письмо провайдеру, отправлено ли оно получателю, открыто ли оно. Пометки «Спам» тоже отображаются в интерфейсе. На момент публикации Emailbutler позволяет отслеживать статус доставки писем, отправленных через Sendgrid, SMTP2GO, Resend, Mailjet.
Еще через Emailbutler можно повторить отправку письма без прописывания параметров вручную. В интерфейсе есть кнопка Resend, которая отправляет письмо ровно с теми же параметрами, что и в первый раз.
Установка
Добавьте эту строку в Gemfile приложения:
gem 'emailbutler'
gem 'pagy'
Затем выполните:
$ bundle install
$ rails g emailbutler:active_record
$ rails db:migrate
Настройка
Initializer
Добавьте строку конфигурации в config/initializers/emailbutler.rb:
Для Active Record
require 'emailbutler/adapters/active_record'
Emailbutler.configure do |config|
config.adapter = Emailbutler::Adapters::ActiveRecord.new # required
config.providers = %w[sendgrid smtp2go resend mailjet] # optional
config.ui_username = 'username' # optional
config.ui_password = 'password' # optional
config.ui_secured_environments = ['production'] # optional
end
Routes
Добавьте эту строку в config/routes.rb
mount Emailbutler::Engine => '/emailbutler'
UI-стили
Чтобы добавить стили для UI, добавьте следующую строку в assets/config/manifest.js
//= link emailbutler.css
В некоторых случаях можно указать это в assets/javascript/application.js
//= require emailbutler_manifest
Мейлеры
Обновите мейлер приложения
class ApplicationMailer < ActionMailer::Base
include Emailbutler::Mailers::Helpers
end
Настройки webhooks для провайдеров
Sendgrid
- перейдите в настройки почты,
- включите Event Webhook,
- в поле HTTP POST URL вставьте URL-адрес контроллера webhook вашего приложения (host/emailbutler/webhooks/sendgrid),
- выберите все данные о доставке,
- сохраните настройки.
Для других поддерживаемых провайдеров действует аналогичная процедура.
Использование
Каждое событие с отправкой письма создаст новую запись с параметрами сообщения в базе данных. Каждое событие вебхуков обновит статус сообщения в базе данных.
Планы на будущее
Все основные функции Emailbutler уже реализованы. В планах Антона — почистить логи и добавить новые сервисы для рассылок. Пока трекер позволяет работать с четырьмя провайдерами: Sendgrid, SMTP2GO, Resend, Mailjet.