Отказоустойчивый 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