You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

pop3.rb 2.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # Redmine - project management software
  2. # Copyright (C) 2006-2017 Jean-Philippe Lang
  3. #
  4. # This program is free software; you can redistribute it and/or
  5. # modify it under the terms of the GNU General Public License
  6. # as published by the Free Software Foundation; either version 2
  7. # of the License, or (at your option) any later version.
  8. #
  9. # This program is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. # GNU General Public License for more details.
  13. #
  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
  16. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  17. require 'net/pop'
  18. module Redmine
  19. module POP3
  20. class << self
  21. def check(pop_options={}, options={})
  22. if pop_options[:ssl]
  23. ssl = true
  24. if pop_options[:ssl] == 'force'
  25. Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_NONE)
  26. else
  27. Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_PEER)
  28. end
  29. else
  30. ssl = false
  31. end
  32. host = pop_options[:host] || '127.0.0.1'
  33. port = pop_options[:port]
  34. port ||= ssl ? '995' : '110'
  35. apop = (pop_options[:apop].to_s == '1')
  36. delete_unprocessed = (pop_options[:delete_unprocessed].to_s == '1')
  37. pop = Net::POP3.APOP(apop).new(host,port)
  38. logger.debug "Connecting to #{host}..." if logger && logger.debug?
  39. pop.start(pop_options[:username], pop_options[:password]) do |pop_session|
  40. if pop_session.mails.empty?
  41. logger.debug "No email to process" if logger && logger.debug?
  42. else
  43. logger.debug "#{pop_session.mails.size} email(s) to process..." if logger && logger.debug?
  44. pop_session.each_mail do |msg|
  45. message = msg.pop
  46. message_id = (message =~ /^Message-I[dD]: (.*)/ ? $1 : '').strip
  47. if MailHandler.safe_receive(message, options)
  48. msg.delete
  49. logger.debug "--> Message #{message_id} processed and deleted from the server" if logger && logger.debug?
  50. else
  51. if delete_unprocessed
  52. msg.delete
  53. logger.debug "--> Message #{message_id} NOT processed and deleted from the server" if logger && logger.debug?
  54. else
  55. logger.debug "--> Message #{message_id} NOT processed and left on the server" if logger && logger.debug?
  56. end
  57. end
  58. end
  59. end
  60. end
  61. end
  62. private
  63. def logger
  64. ::Rails.logger
  65. end
  66. end
  67. end
  68. end