module Mailsafe
  class ReceipientWhitelist
    def self.filter_receipient_domain(message)
      allowed_domain = Mailsafe.allowed_domain
      if allowed_domain.present?
        receipients = []
        message.to.each do |receipient|
          if email_has_domain?(receipient, allowed_domain)
            receipients << receipient 
          end
        end
        message.to = receipients
      end
    end

    def self.email_has_domain?(email, domain)
      email_domain = email.split("@").second
      email_domain.downcase == domain.downcase
    end
  end
end

# Unfortunately, monkeypatching Mail is the only way I found to actually prevent sending an email 
require 'mail'

class Mail::Message
  def deliver_with_recipient_filter
    Mailsafe::ReceipientWhitelist.filter_receipient_domain(self)
    self.deliver_without_recipient_filter unless self.to.blank? || self.to.empty?
  end

  alias_method_chain :deliver, :recipient_filter
end