class IronMailer::SendEmail

Attributes

cache[R]
debug[R]
delivery_method[R]
delivery_method_settings[R]
iron_cache_client[R]
iron_mq_client[R]
queue[R]

Public Class Methods

new(options={}) click to toggle source
# File lib/iron_mailer/send_email.rb, line 6
def initialize(options={})    
  @iron_mq_client = IronMQ::Client.new(options['iron_mq'])
  @queue = @iron_mq_client.queue(options['iron_mq']['queue_name'])
  @iron_cache_client = IronCache::Client.new(options['iron_cache'])
  
  @cache = @iron_cache_client.cache(options['iron_cache']['cache_name'])
  @debug = options['debug']

    if options['delivery_method'].is_a?(Hash)
      delivery_method_hash = options['delivery_method']
      @delivery_method=delivery_method_hash.keys.first.to_sym
      @delivery_method_settings = {}

      params = delivery_method_hash.values.first.clone

      params.keys.each do |key|
        @delivery_method_settings[key.to_sym] = params[key]
      end
      
    else
      @delivery_method=options['delivery_method'].to_sym          
      @delivery_method_settings={}
    end

end

Public Instance Methods

cache_email(mail) click to toggle source
# File lib/iron_mailer/send_email.rb, line 64
def cache_email(mail)
  field = mail.header['X-SMTPAPI'].is_a?(Array) ? mail.header['X-SMTPAPI'].first : mail.header['X-SMTPAPI']
  cache_key = JSON.parse(field.value)['unique_args']['cache_key']
  self.cache.put(cache_key, self.extract_cache_info(mail).to_json)
end
execute() click to toggle source
# File lib/iron_mailer/send_email.rb, line 70
def execute
  messages = self.queue.get(:n=>100)
  
  errors = []
  messages.each do |message|
    begin
      source_email = Mail.new(message.body)
      puts "Processing: #{source_email.subject}" if self.debug
      puts self.delivery_method=>self.delivery_method_settings if self.debug
      puts source_email if self.debug
      mails = self.split_email(source_email)

      mails.each do |mail|
        mail.delivery_method self.delivery_method, self.delivery_method_settings
        mail.deliver
        cache_email(mail)
      end
      message.delete
    rescue Exception=>e 
      if self.debug
        puts e.message 
        puts e.backtrace
      end
      errors << message
    end
  end
  errors.each do |message|
    puts "Releasing: #{message.id}" if self.debug
    message.release
  end

end
extract_cache_info(mail) click to toggle source
# File lib/iron_mailer/send_email.rb, line 55
def extract_cache_info(mail)
  {'subject'=>mail.subject,
    'date'=>mail.date,
    'from'=>mail.from,
    'to'=>mail.to,
    'mail'=>mail.to_s
  }
end
split_email(source_email) click to toggle source
# File lib/iron_mailer/send_email.rb, line 32
def split_email(source_email)
  puts "split_email: #{source_email}" 
  tos = source_email.to
  tos = [tos] if tos.is_a?(String)
  
  tos.uniq.map{|destination|
    duplicate = Mail.new(source_email)
    duplicate.to = destination
    
    if destination==tos.first
      duplicate.message_id=source_email.message_id
      duplicate.bcc=source_email.bcc
      duplicate.cc=source_email.cc
    else
      duplicate.message_id = nil
      duplicate.bcc = nil
      duplicate.cc = nil
    end
    duplicate.header['X-SMTPAPI']={unique_args: {cache_key: UUIDTools::UUID.random_create.to_s}}.to_json
    duplicate
  }
end