class Popper::MailAccount
Attributes
complete_list[RW]
config[RW]
current_list[RW]
Public Class Methods
new(config)
click to toggle source
# File lib/popper/mail_account.rb, line 9 def initialize(config) self.config = config end
Public Instance Methods
check_and_action(m)
click to toggle source
# File lib/popper/mail_account.rb, line 47 def check_and_action(m) mail = EncodeMail.new(m.mail) Popper.log.info "check mail:#{mail.date.to_s} #{mail.subject}" match_rules?(mail).each do |rule| Popper.log.info "do action:#{mail.subject}" Popper::Action::ExecCmd.run(config.action_by_rule(rule), mail) if config.action_by_rule(rule) end m.uidl end
match_rules?(mail)
click to toggle source
# File lib/popper/mail_account.rb, line 88 def match_rules?(mail) config.rule_with_conditions_select do |rule,mail_header,conditions| conditions.all? do |condition| mail.respond_to?(mail_header) && mail.send(mail_header).to_s.match(/#{condition}/) end end end
pop(conn)
click to toggle source
# File lib/popper/mail_account.rb, line 23 def pop(conn) done_uidls = [] error_uidls = [] Popper.log.info "start popper #{config.name}" process_uidl_list(conn).each do |m| begin done_uidls << check_and_action(m) m.delete if config.login.respond_to?(:delete_after) && config.login.delete_after rescue Net::POPError => e self.complete_list += done_uidls Popper.log.warn "pop err write uidl" return rescue => e error_uidls << m.uidl Popper.log.warn e end end self.complete_list = current_list - error_uidls Popper.log.info "success popper #{config.name}" end
process_uidl_list(conn)
click to toggle source
# File lib/popper/mail_account.rb, line 83 def process_uidl_list(conn) uidl_list = current_list - complete_list conn.mails.select {|_m|uidl_list.include?(_m.uidl)} end
run()
click to toggle source
# File lib/popper/mail_account.rb, line 13 def run session_start do |conn| self.current_list = conn.mails.map(&:uidl) self.complete_list = current_list unless complete_list pop(conn) end rescue => e Popper.log.warn e end
session_start(&block)
click to toggle source
# File lib/popper/mail_account.rb, line 58 def session_start(&block) pop = Net::POP3.new(config.login.server, config.login.port || 110) pop = set_pop_option(pop) pop.start( config.login.user, config.login.password ) do |conn| Popper.log.info "connect server #{config.name}" block.call(conn) Popper.log.info "disconnect server #{config.name}" end end
set_pop_option(pop)
click to toggle source
# File lib/popper/mail_account.rb, line 72 def set_pop_option(pop) pop.enable_ssl if config.login.respond_to?(:ssl) && config.login.ssl %w( open_timeout read_timeout ).each do |m| pop.instance_variable_set("@#{m}", ENV['POP_TIMEOUT'] || 120) end pop end