Class: XmlConv::Util::PopMission

Inherits:
Mission
  • Object
show all
Defined in:
lib/xmlconv/util/polling_manager.rb

Instance Attribute Summary collapse

Attributes inherited from Mission

#arguments, #backup_dir, #debug_recipients, #destination, #error_recipients, #filter, #partner, #postprocs, #reader, #tmp_destination, #writer

Instance Method Summary collapse

Methods inherited from Mission

#create_transaction, #filtered_transaction

Instance Attribute Details

#content_typeObject

Returns the value of attribute content_type.



66
67
68
# File 'lib/xmlconv/util/polling_manager.rb', line 66

def content_type
  @content_type
end

#hostObject

Returns the value of attribute host.



66
67
68
# File 'lib/xmlconv/util/polling_manager.rb', line 66

def host
  @host
end

#passObject

Returns the value of attribute pass.



66
67
68
# File 'lib/xmlconv/util/polling_manager.rb', line 66

def pass
  @pass
end

#portObject

Returns the value of attribute port.



66
67
68
# File 'lib/xmlconv/util/polling_manager.rb', line 66

def port
  @port
end

#userObject

Returns the value of attribute user.



66
67
68
# File 'lib/xmlconv/util/polling_manager.rb', line 66

def user
  @user
end

Instance Method Details

#poll(&block) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/xmlconv/util/polling_manager.rb', line 67

def poll(&block)
  # puts "PopMission starts polling host #{@host}:#{@port} u: #{@user} pw: #{@pass}"
  options = {
                    :address    => @host,
                    :port       => @port,
                    :user_name  => @user,
                    :password   => @pass,
                    :enable_ssl => true
    }
  ::Mail.defaults do retriever_method :pop3, options  end
  all_mails = ::Mail.delivery_method.is_a?(::Mail::TestMailer) ? ::Mail::TestMailer.deliveries : ::Mail.all
  all_mails.each do |mail|
      begin
        poll_message(mail, &block)
      ensure
        time = Time.now
        name = sprintf("%s.%s.%s", @user, time.strftime("%Y%m%d%H%M%S"), time.usec)
        FileUtils.mkdir_p(@backup_dir)
        path = File.join(@backup_dir, name)
        File.open(path, 'w') { |fh| fh.puts(mail) }
        mail.mark_for_delete = true
        # mail.delete # Not necessary with gem mail, as delete_after_find is set to true by default
      end
  end
end

#poll_message(message, &block) ⇒ Object



92
93
94
95
96
97
98
99
100
# File 'lib/xmlconv/util/polling_manager.rb', line 92

def poll_message(message, &block)
  if(message.multipart?)
    message.parts.each do |part|
      poll_message(part, &block)
    end
  elsif(/text\/xml/.match(message.content_type))
    filtered_transaction(message.decoded, sprintf('pop3:%s@%s:%s', @user, @host, @port), &block)
  end
end