class MailSafe::AddressReplacer

Constants

ADDRESS_TYPES

Public Class Methods

replace_external_addresses(mail) click to toggle source
# File lib/mail_safe/address_replacer.rb, line 6
def replace_external_addresses(mail)
  replaced_addresses = {}

  ADDRESS_TYPES.each do |address_type|
    if addresses = mail[address_type].try(:value)
      new_addresses = []

      Array(addresses).each do |a|
        new_addresses << if MailSafe::Config.is_internal_address?(a)
                           a
                         else
                           (replaced_addresses[address_type] ||= []) << a
                           MailSafe::Config.get_replacement_address(a)
                         end
      end
      mail.send("#{address_type}=", new_addresses.uniq)
    end
  end

  self.add_body_postscript(mail, replaced_addresses)
end

Protected Class Methods

add_body_postscript(part, replaced_addresses) click to toggle source
# File lib/mail_safe/address_replacer.rb, line 30
def add_body_postscript(part, replaced_addresses)
  return unless replaced_addresses.size > 0

  case part.content_type
    when %r{^text/plain} then add_text_postscript(part, replaced_addresses)
    when %r{^text/html}  then add_html_postscript(part, replaced_addresses)
  end

  part.parts.each { |p| add_body_postscript(p, replaced_addresses) }
end
add_html_postscript(part, replaced_addresses) click to toggle source
# File lib/mail_safe/address_replacer.rb, line 64
      def add_html_postscript(part, replaced_addresses)
        address_type_postscripts = []
        ADDRESS_TYPES.each do |address_type|
          next unless addresses = replaced_addresses[address_type]
          address_type_postscripts << "#{address_type}:<ul>\n<li>#{addresses.join("</li>\n<li>")}</li>\n</ul>"
        end

        postscript = <<-EOS
          <div class="mail-safe-postscript">
            <hr />

            <p>
              This email originally had different recipients,
              but MailSafe has prevented it from being sent to them.
            </p>

            <p>
              The original recipients were:
            </p>

            <ul>
              <li>
                #{address_type_postscripts.join("</li>\n<li>")}
              </li>
            </ul>

            <hr/ >
          </div>
        EOS

        add_postscript(part, postscript)
      end
add_postscript(part, postscript) click to toggle source
# File lib/mail_safe/address_replacer.rb, line 97
def add_postscript(part, postscript)
  part.body = part.body.to_s + postscript.html_safe
end
add_text_postscript(part, replaced_addresses) click to toggle source
# File lib/mail_safe/address_replacer.rb, line 41
      def add_text_postscript(part, replaced_addresses)
        address_type_postscripts = []
        ADDRESS_TYPES.each do |address_type|
          next unless addresses = replaced_addresses[address_type]
          address_type_postscripts << "- #{address_type}:\n  - #{addresses.join("\n  - ")}"
        end

        postscript = <<-EOS


**************************************************
This email originally had different recipients,
but MailSafe has prevented it from being sent to them.

The original recipients were:
#{address_type_postscripts.join("\n\n")}

**************************************************
        EOS

        add_postscript(part, postscript)
      end