Sha256: 9bdf3f7cee07904b93238cfeb7776eb29891f5e60b100b5c42ab60a759b087a5

Contents?: true

Size: 1.44 KB

Versions: 1

Compression:

Stored size: 1.44 KB

Contents

module Mailsafe
  class RecipientWhitelist
    def initialize(message)
      @message = message
      @allowed_domain_config = Mailsafe.allowed_domain
      @allowed_domains = parse_allowed_domains
    end

    def filter_recipient_domains
      return unless @allowed_domains.present?
      [ :to, :cc, :bcc ].each { |rec_type| filter_receipient_type(rec_type) }
    end

    private

    def filter_receipient_type(rec_type)
      receivers = @message.send(rec_type)
      return unless receivers

      receivers.select! { |recipient| email_has_domain?(recipient) }
      @message.send("#{rec_type}=", receivers)
    end

    def email_has_domain?(email_address)
      email_domain = extract_domain_from_address(email_address)
      email_domain.present? && @allowed_domains.include?(email_domain)
    end

    def extract_domain_from_address(email_address)
      email_address.split("@")[1].try(:downcase)
    end

    def parse_allowed_domains
      if @allowed_domain_config.present?
        @allowed_domain_config.split(',').map(&:strip).map(&:downcase) 
      end
    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::RecipientWhitelist.new(self).filter_recipient_domains
    self.deliver_without_recipient_filter unless self.to.blank? || self.to.empty?
  end

  alias_method_chain :deliver, :recipient_filter
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mailsafe-0.2.1 lib/mailsafe/recipient_whitelist.rb