Revision 6bc51624
Added by Marc Dequènes almost 14 years ago
- ID 6bc51624438375e0d63f00ffa642a6c5720b7312
lib/cyborghood/imap.rb | ||
---|---|---|
|
||
module CyborgHood
|
||
class IMAP
|
||
def initialize(params)
|
||
def initialize(params, min_check_interval)
|
||
@params = params
|
||
@imap = nil
|
||
@is_loggued = false
|
||
@min_check_interval = min_check_interval
|
||
end
|
||
|
||
class IMAPMessage
|
||
... | ... | |
|
||
@config = Config.instance
|
||
@content = nil
|
||
@stop_mail_check = false
|
||
end
|
||
|
||
def content
|
||
... | ... | |
|
||
def delete
|
||
if @config.debug.nil? or @config.debug.flags.nil? or not @config.debug.flags.include?(:debug_nomaildeletion)
|
||
@imap.store(@message_id, "+FLAGS", [:Deleted])
|
||
@imap.store(@message_id, "+FLAGS", [:Deleted])
|
||
end
|
||
end
|
||
end
|
||
... | ... | |
@imap = Net::IMAP.new(@params.host, port, ssl, @params.ca_cert, check_ca)
|
||
rescue SocketError
|
||
logger.warn "Could not connect to the IMAP server"
|
||
return false
|
||
return false
|
||
end
|
||
logger.debug "Connected (IMAP Capabilities: " + @imap.capability.join(", ") + ")"
|
||
#p @imap.getquotaroot("INBOX")
|
||
|
||
@stop_mail_check = false
|
||
|
||
true
|
||
end
|
||
|
||
... | ... | |
@imap.authenticate('LOGIN', @params.login, @params.passwd)
|
||
rescue Net::IMAP::NoResponseError
|
||
logger.warn "Could not authenticate to the IMAP server"
|
||
disconnect
|
||
return false
|
||
disconnect
|
||
return false
|
||
end
|
||
logger.debug "Authenticated as '#{@params.login}'"
|
||
@is_loggued = true
|
||
true
|
||
end
|
||
|
||
def check_mail(&message_handler)
|
||
def check_mails_once(&message_handler)
|
||
connect &&
|
||
authenticate &&
|
||
check_inbox(&message_handler) &&
|
||
disconnect
|
||
authenticate &&
|
||
check_inbox(&message_handler)
|
||
rescue SocketError, Net::IMAP::NoResponseError => e
|
||
logger.warn "IMAP or Network error: " + e.message
|
||
rescue Net::IMAP::Error => e
|
||
raise CyberError.new(:unrecoverable, "protocol/imap", e.message)
|
||
ensure
|
||
begin
|
||
disconnect
|
||
rescue
|
||
end
|
||
end
|
||
|
||
def check_mails(&message_handler)
|
||
until @stop_mail_check
|
||
t = Time.now.to_i
|
||
r = check_mails_once(&message_handler)
|
||
t2 = Time.now.to_i
|
||
|
||
sleep_time = @min_check_interval - (t2 - t)
|
||
if sleep_time > 0
|
||
logger.debug "Having a break before new check..."
|
||
begin
|
||
sleep(sleep_time)
|
||
rescue
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
def check_inbox
|
||
logger.debug "Examining INBOX"
|
||
@imap.select('INBOX')
|
||
|
||
logger.debug "Starting mail check"
|
||
@imap.search(["ALL"], "UTF-8").each do |message_id|
|
||
logger.debug "*** Fetched mail ##{message_id}"
|
||
yield IMAPMessage.new(@imap, message_id)
|
||
unless yield IMAPMessage.new(@imap, message_id)
|
||
@stop_mail_check = true
|
||
break
|
||
end
|
||
end
|
||
logger.debug "Mail check finished"
|
||
|
||
@imap.expunge
|
||
end
|
Also available in: Unified diff
[evol] reorganized imap processing