В Rails 3, мы можем ограничить, какие домены получают электронную почту от нашего промежуточного сервера? - PullRequest
3 голосов
/ 03 февраля 2012

Мы хотим проверить работоспособность электронной почты на нашем промежуточном сервере, но не хотим, чтобы клиенты по электронной почте случайно.

Итак, я хотел бы, чтобы письма, отправленные на "any@corporation.com", работалино сообщения электронной почты, отправленные на "everything@customer.com", будут подавлены.

Я мог бы просто войти во все свои контроллеры и вставить код, который запускает метод «доставки» только в том случае, если в письме содержится наш домен или среда является продвинутой.Но, похоже, это немного глупо.Я хотел бы сделать это приложение широко.

Ответы [ 3 ]

6 голосов
/ 09 февраля 2012

Приложения, использующие гем Mail (включая проекты rails> = 3.0), могут использовать гем safety_mailer. Укажите домен (или набор доменов, или магическое слово в адресе электронной почты), на который разрешено отправлять электронную почту, а электронная почта на все остальные домены молча отбрасывается.

https://github.com/cluesque/safety_mailer

Добавьте гем в свой Gemfile, указав группы (вероятно, не производственные), чтобы включить его в.

gem "safety_mailer", :group => :development

Не забудьте установить пакет для установки

В вашей среде файл config / environment / development.rb сконфигурируйте его и некоторые регулярные выражения.

config.action_mailer.delivery_method = :safety_mailer
SafetyMailer::Config.allowed_matchers = [ /mydomain.com/, /mytestacct@gmail.com/, /super_secret_test/ ]

... а теперь отправьте электронное письмо на адрес any@mydomain.com, mytestacct@gmail.com, bob+super_secret_test@yahoo.com. и отправка электронной почты другим получателям (например, реальным пользователям в производственной базе данных, скопированной на тестовый сервер) подавляется.

2 голосов
/ 03 февраля 2012

Вот пример с перехватчиком:

Создание инициализатора /config/initializers/mailer_config.rb:

require 'staging_mail_interceptor'
ActionMailer::Base.register_interceptor(StagingMailInterceptor) if [test here if on staging server]

Файл /lib/staging_mail_interceptor.rb содержит перехватчик, где вы можете изменить сообщение перед нимотправлено.В моем случае я отмечаю тему и перенаправляю все письма на мою личную электронную почту.Вы можете разместить здесь код для фильтрации доменов:

class StagingMailInterceptor
  def self.delivering_email(message)
    message.subject = "TEST #{message.to} - #{message.subject}"
    message.to = 'test@corporation.com'
  end
end
1 голос
/ 03 февраля 2012

Измените параметр delivery_method для вашей промежуточной среды - это намного менее грязно, чем вставка кода в контроллеры, а затем необходимость его извлекать, потому что вы просто изменяете настройку и верни его обратно.

delivery_method - Определяет способ доставки. Возможные значения :smtp (по умолчанию), :sendmail, :test и :file.

В этом случае вы, вероятно, захотите использовать :test или :file. :file сбросит содержимое письма в файл, так что вы можете быть уверены, что письмо отправляется так, как вы этого ожидаете, с введением правильных имен и т. Д., Без фактической отправки письма по электронной почте. .

Как правило, вам не нужно следить за тем, чтобы ActionMailer действительно отправлял электронную почту - он это делает, и это хорошо проверенный модуль.

Альтернативное решение, если вам действительно нужен полный стек, - это изменить список получателей только для подготовки. Если вы отправляете электронное письмо в список рассылки, укажите его в другом списке рассылки для подготовки. Если вы отправляете список адресов электронной почты из базы данных, временно удалите (или отметьте как неактивные) адреса электронной почты, на которые вы не хотите отправлять.

...