如何使用rails 2.x actionmailer过滤/阻止外发电子邮件地址?

时间:2011-03-10 16:00:29

标签: ruby-on-rails filter block actionmailer

对于非生产rails 2.x环境我想阻止/过滤任何未发送给我组织中人员的外发电子邮件(例如“*@where-i-work.com”)。

请注意,我不想完全阻止电子邮件 - 我知道我可以在测试模式下将它们写入日志 - 我需要向内部员工发送电子邮件。

感谢。

2 个答案:

答案 0 :(得分:3)

您可以尝试在environment.rb文件中扩展Mail::Message.deliver函数 - 类似于(未测试 - 只是演示代码!):

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的这个ID - 我认为Rails 2的所有版本都使用TMail而不是Mail,因此如果您不使用Rails 3,则需要覆盖其他内容。

希望这有帮助!

答案 1 :(得分:2)

根据@ Xavier的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