| 
									
										
										
										
											2019-03-15 01:32:57 +00:00
										 |  |  | # frozen_string_literal: false | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-17 13:53:13 +00:00
										 |  |  | # Redmine - project management software | 
					
						
							| 
									
										
										
										
											2022-01-02 05:29:10 +00:00
										 |  |  | # Copyright (C) 2006-2022  Jean-Philippe Lang | 
					
						
							| 
									
										
										
										
											2010-01-17 13:53:13 +00:00
										 |  |  | # | 
					
						
							|  |  |  | # This program is free software; you can redistribute it and/or | 
					
						
							|  |  |  | # modify it under the terms of the GNU General Public License | 
					
						
							|  |  |  | # as published by the Free Software Foundation; either version 2 | 
					
						
							|  |  |  | # of the License, or (at your option) any later version. | 
					
						
							| 
									
										
										
										
											2011-09-20 02:47:03 +00:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2010-01-17 13:53:13 +00:00
										 |  |  | # This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | # GNU General Public License for more details. | 
					
						
							| 
									
										
										
										
											2011-09-20 02:47:03 +00:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2010-01-17 13:53:13 +00:00
										 |  |  | # You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  | # along with this program; if not, write to the Free Software | 
					
						
							|  |  |  | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require 'net/pop' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module Redmine | 
					
						
							|  |  |  |   module POP3 | 
					
						
							|  |  |  |     class << self | 
					
						
							|  |  |  |       def check(pop_options={}, options={}) | 
					
						
							| 
									
										
										
										
											2014-05-16 08:28:52 +00:00
										 |  |  |         if pop_options[:ssl] | 
					
						
							|  |  |  |           ssl = true | 
					
						
							|  |  |  |           if pop_options[:ssl] == 'force' | 
					
						
							|  |  |  |             Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_NONE) | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_PEER) | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           ssl = false | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-17 13:53:13 +00:00
										 |  |  |         host = pop_options[:host] || '127.0.0.1' | 
					
						
							| 
									
										
										
										
											2014-05-16 08:28:52 +00:00
										 |  |  |         port = pop_options[:port] | 
					
						
							|  |  |  |         port ||= ssl ? '995' : '110' | 
					
						
							| 
									
										
										
										
											2010-01-17 13:53:13 +00:00
										 |  |  |         apop = (pop_options[:apop].to_s == '1') | 
					
						
							|  |  |  |         delete_unprocessed = (pop_options[:delete_unprocessed].to_s == '1') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         pop = Net::POP3.APOP(apop).new(host,port) | 
					
						
							| 
									
										
										
										
											2011-01-22 12:09:07 +00:00
										 |  |  |         logger.debug "Connecting to #{host}..." if logger && logger.debug? | 
					
						
							| 
									
										
										
										
											2010-01-17 13:53:13 +00:00
										 |  |  |         pop.start(pop_options[:username], pop_options[:password]) do |pop_session| | 
					
						
							|  |  |  |           if pop_session.mails.empty? | 
					
						
							| 
									
										
										
										
											2011-01-22 12:09:07 +00:00
										 |  |  |             logger.debug "No email to process" if logger && logger.debug? | 
					
						
							| 
									
										
										
										
											2010-01-17 13:53:13 +00:00
										 |  |  |           else | 
					
						
							| 
									
										
										
										
											2011-01-22 12:09:07 +00:00
										 |  |  |             logger.debug "#{pop_session.mails.size} email(s) to process..." if logger && logger.debug? | 
					
						
							| 
									
										
										
										
											2010-01-17 13:53:13 +00:00
										 |  |  |             pop_session.each_mail do |msg| | 
					
						
							|  |  |  |               message = msg.pop | 
					
						
							| 
									
										
										
										
											2012-02-11 10:06:14 +00:00
										 |  |  |               message_id = (message =~ /^Message-I[dD]: (.*)/ ? $1 : '').strip | 
					
						
							| 
									
										
										
										
											2014-03-21 03:04:43 +00:00
										 |  |  |               if MailHandler.safe_receive(message, options) | 
					
						
							| 
									
										
										
										
											2010-01-17 13:53:13 +00:00
										 |  |  |                 msg.delete | 
					
						
							| 
									
										
										
										
											2011-01-22 12:09:07 +00:00
										 |  |  |                 logger.debug "--> Message #{message_id} processed and deleted from the server" if logger && logger.debug? | 
					
						
							| 
									
										
										
										
											2010-01-17 13:53:13 +00:00
										 |  |  |               else | 
					
						
							|  |  |  |                 if delete_unprocessed | 
					
						
							|  |  |  |                   msg.delete | 
					
						
							| 
									
										
										
										
											2011-01-22 12:09:07 +00:00
										 |  |  |                   logger.debug "--> Message #{message_id} NOT processed and deleted from the server" if logger && logger.debug? | 
					
						
							| 
									
										
										
										
											2010-01-17 13:53:13 +00:00
										 |  |  |                 else | 
					
						
							| 
									
										
										
										
											2011-01-22 12:09:07 +00:00
										 |  |  |                   logger.debug "--> Message #{message_id} NOT processed and left on the server" if logger && logger.debug? | 
					
						
							| 
									
										
										
										
											2010-01-17 13:53:13 +00:00
										 |  |  |                 end | 
					
						
							|  |  |  |               end | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2011-09-20 02:47:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-22 12:09:07 +00:00
										 |  |  |       private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def logger | 
					
						
							| 
									
										
										
										
											2012-05-25 16:54:23 +00:00
										 |  |  |         ::Rails.logger | 
					
						
							| 
									
										
										
										
											2011-01-22 12:09:07 +00:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2010-01-17 13:53:13 +00:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |