##// END OF EJS Templates
Merged r11905 from trunk (#14103)....
Jean-Philippe Lang -
r11771:5c6349a7cad7
parent child
Show More
@@ -1,60 +1,62
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2013 Jean-Philippe Lang
2 # Copyright (C) 2006-2013 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 require 'net/imap'
18 require 'net/imap'
19
19
20 module Redmine
20 module Redmine
21 module IMAP
21 module IMAP
22 class << self
22 class << self
23 def check(imap_options={}, options={})
23 def check(imap_options={}, options={})
24 host = imap_options[:host] || '127.0.0.1'
24 host = imap_options[:host] || '127.0.0.1'
25 port = imap_options[:port] || '143'
25 port = imap_options[:port] || '143'
26 ssl = !imap_options[:ssl].nil?
26 ssl = !imap_options[:ssl].nil?
27 folder = imap_options[:folder] || 'INBOX'
27 folder = imap_options[:folder] || 'INBOX'
28
28
29 imap = Net::IMAP.new(host, port, ssl)
29 imap = Net::IMAP.new(host, port, ssl)
30 imap.login(imap_options[:username], imap_options[:password]) unless imap_options[:username].nil?
30 imap.login(imap_options[:username], imap_options[:password]) unless imap_options[:username].nil?
31 imap.select(folder)
31 imap.select(folder)
32 imap.uid_search(['NOT', 'SEEN']).each do |uid|
32 imap.uid_search(['NOT', 'SEEN']).each do |uid|
33 msg = imap.uid_fetch(uid,'RFC822')[0].attr['RFC822']
33 msg = imap.uid_fetch(uid,'RFC822')[0].attr['RFC822']
34 logger.debug "Receiving message #{uid}" if logger && logger.debug?
34 logger.debug "Receiving message #{uid}" if logger && logger.debug?
35 if MailHandler.receive(msg, options)
35 if MailHandler.receive(msg, options)
36 logger.debug "Message #{uid} successfully received" if logger && logger.debug?
36 logger.debug "Message #{uid} successfully received" if logger && logger.debug?
37 if imap_options[:move_on_success]
37 if imap_options[:move_on_success]
38 imap.uid_copy(uid, imap_options[:move_on_success])
38 imap.uid_copy(uid, imap_options[:move_on_success])
39 end
39 end
40 imap.uid_store(uid, "+FLAGS", [:Seen, :Deleted])
40 imap.uid_store(uid, "+FLAGS", [:Seen, :Deleted])
41 else
41 else
42 logger.debug "Message #{uid} can not be processed" if logger && logger.debug?
42 logger.debug "Message #{uid} can not be processed" if logger && logger.debug?
43 imap.uid_store(uid, "+FLAGS", [:Seen])
43 imap.uid_store(uid, "+FLAGS", [:Seen])
44 if imap_options[:move_on_failure]
44 if imap_options[:move_on_failure]
45 imap.uid_copy(uid, imap_options[:move_on_failure])
45 imap.uid_copy(uid, imap_options[:move_on_failure])
46 imap.uid_store(uid, "+FLAGS", [:Deleted])
46 imap.uid_store(uid, "+FLAGS", [:Deleted])
47 end
47 end
48 end
48 end
49 end
49 end
50 imap.expunge
50 imap.expunge
51 imap.logout
52 imap.disconnect
51 end
53 end
52
54
53 private
55 private
54
56
55 def logger
57 def logger
56 ::Rails.logger
58 ::Rails.logger
57 end
59 end
58 end
60 end
59 end
61 end
60 end
62 end
General Comments 0
You need to be logged in to leave comments. Login now