Главная/ Блог/ Emailbutler

Отслеживаем отправленные письма в Rails-приложении с помощью open source

Было бы здорово иметь в Rails-приложении функционал обычного почтового ящика. Если эта мысль хоть раз приходила вам в голову, у нас хорошие новости. Наш Ruby-разработчик Антон Богданов сделал email-трекер Emailbutler для приложений на Rails, который позволяет логировать все отправленные через Action Mailer письма. У трекера есть удобный интерфейс, который позволяет сортировать и искать письма.

August 2024

Главная функция 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.

Идея Emailbutler появилась три года назад. Мы решили разобраться, почему пользователь не получил письмо, с какими параметрами оно было создано и можно ли его переотправить. Провайдер не мог дать нужной информации. Поэтому пришлось долго искать в приложении, отправилось ли письмо. Тогда я подумал, что надо логировать, какие имейлы отправлялись и с какими параметрами. Так и появился этот open source.
Антон Богданов
автор Emailbutler
Будем на связи
Прикрепить файл
Максимальный размер файла: 8 МБ.
Допустимые типы файлов: jpg jpeg png txt rtf pdf doc docx ppt pptx.