Как вы можете фильтровать / блокировать адреса исходящей электронной почты с помощью rails 2.x actionmailer? - PullRequest
3 голосов
/ 10 марта 2011

для непроизводственной среды rails 2.x. Я хочу заблокировать / отфильтровать любые исходящие электронные письма, которые не адресованы людям в моей организации (например, "*@where-i-work.com").

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

спасибо.

Ответы [ 2 ]

3 голосов
/ 11 марта 2011

Вы можете попробовать расширить функцию Mail::Message.deliver в вашем файле environment.rb - что-то вроде (не проверено - просто демонстрационный код!):

class Mail::Message
    def deliver_with_recipient_filter
        self.to = self.to.to_a.delete_if {|to| !(to =~ /.*@where-i-work.com\Z/)} if RAILS_ENV != production
        self.deliver_without_recipient_filter unless self.to.blank?
    end

    alias_method_chain :deliver, :recipient_filter
end

Обратите внимание, что этот идентификатор для Rails 3 - я думаю,все версии Rails 2 используют TMail вместо Mail, поэтому вам нужно переопределить что-то еще, если вы не используете Rails 3.

Надеюсь, это поможет!

2 голосов
/ 11 марта 2011

на основе предложения @ Xavier's rails 3 я смог заставить его работать в rails 2:

class ActionMailer::Base
  def deliver_with_recipient_filter!(mail = @mail) 
    unless 'production' == Rails.env
      mail.to = mail.to.to_a.delete_if do |to| 
        !to.ends_with?('where-i-work.com')
      end
    end
    unless mail.to.blank?
      deliver_without_recipient_filter!(mail)
    end
  end
  alias_method_chain 'deliver!'.to_sym, :recipient_filter
end
...