Отказоустойчивый SMTP-экшн в Ruby On Rails

Отправка электронных писем крайне важна для нашего бизнеса. В настоящее время мы планируем использовать Mandrill в качестве основного провайдера электронной почты, но если их служба выходит из строя, крайне важно, чтобы у нас была служба резервного копирования (SendGrid), которая срабатывает при любых сбоях.

Поскольку конфигурация SMTP загружается в Application.rb (который, я считаю, только один раз при загрузке приложения), как я могу интеллектуально переключиться на другую службу SMTP, если отправка электронной почты не удалась?

2 ответа

Вместо того чтобы выполнять переключение / восстановление в Rails, рекомендация SendGrid дает клиентам, для которых отправка электронной почты имеет решающее значение, является настройка локального почтового сервера (например, с использованием Postfix) и настройка почтового сервера на использование SendGrid в качестве промежуточного узла.

В вашем случае вы бы настроили Mandrill в качестве сервера ретрансляции и SendGrid в качестве резервного сервера ретрансляции. Ваш локальный сервер затем позаботится об отправке через Mandrill и SendGrid, если Mandrill выйдет из строя.

Вот мое решение:

class UserMailer < ActionMailer::Base

  def welcome_message(user, custom_email=nil, settings)
    ActionMailer::Base.username = settings["username"]
    ActionMailer::Base.password = settings["password"]
    ActionMailer::Base.server = settings["server"]
    ActionMailer::Base.port = settings["port"]

    target_email = custom_email || user.email
    mail(to: target_email, subject: 'Welcome')
  end
end
Другие вопросы по тегам