Module: Redmine::IMAP

Defined in:
lib/redmine/imap.rb

Class Method Summary collapse

Class Method Details

.check(imap_options = {}, options = {}) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/redmine/imap.rb', line 20

def check(imap_options={}, options={})
  host = imap_options[:host] || '127.0.0.1'
  port = imap_options[:port] || '143'
  ssl = !imap_options[:ssl].nil?
  folder = imap_options[:folder] || 'INBOX'

  imap = Net::IMAP.new(host, port, ssl)
  imap.(imap_options[:username], imap_options[:password]) unless imap_options[:username].nil?
  imap.select(folder)
  imap.search(['NOT', 'SEEN']).each do |message_id|
    msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822']
    logger.debug "Receiving message #{message_id}" if logger && logger.debug?
    if MailHandler.receive(msg, options)
      logger.debug "Message #{message_id} successfully received" if logger && logger.debug?
      if imap_options[:move_on_success]
        imap.copy(message_id, imap_options[:move_on_success])
      end
      imap.store(message_id, "+FLAGS", [:Seen, :Deleted])
    else
      logger.debug "Message #{message_id} can not be processed" if logger && logger.debug?
      imap.store(message_id, "+FLAGS", [:Seen])
      if imap_options[:move_on_failure]
        imap.copy(message_id, imap_options[:move_on_failure])
        imap.store(message_id, "+FLAGS", [:Deleted])
      end
    end
  end
  imap.expunge
end