如何使用 Rails 2.x Actionmailer 过滤/阻止传出电子邮件地址?

发布于 2024-10-21 06:34:35 字数 155 浏览 5 评论 0原文

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

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

谢谢。

for non-production rails 2.x environments i want to block/filter any outgoing emails that aren't addressed to people in my organization (e.g. "*@where-i-work.com").

please note, i don't want to block email entirely - i know i can just write them to the logs in test mode - i need emails to internal employees to be delivered.

thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

絕版丫頭 2024-10-28 06:34:35

您可以尝试在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,则需要覆盖其他内容。

希望这会有所帮助!

You could try extending the Mail::Message.deliver function in your environment.rb file - something like (not tested - just demo code!):

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

Note that this id for Rails 3 - I think all versions of Rails 2 use TMail instead of Mail, so you'll need to override something else if you're not using Rails 3.

Hope this helps!

罪歌 2024-10-28 06:34:35

基于@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

based on @Xavier's rails 3 proposal i was able to get it working in 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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文