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