trabajo-afectivo/app/models/channel/driver/pop3.rb

80 lines
1.8 KiB
Ruby
Raw Normal View History

2014-02-03 19:23:00 +00:00
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
require 'net/pop'
2012-04-10 14:06:46 +00:00
2015-08-28 00:53:14 +00:00
class Channel::Driver::Pop3 < Channel::EmailParser
2012-04-10 14:06:46 +00:00
2015-08-28 00:53:14 +00:00
def fetch (options, channel, check_type = '', verify_string = '')
2014-11-18 21:09:01 +00:00
ssl = true
port = 995
2015-08-28 00:53:14 +00:00
if options.key?(:ssl) && options[:ssl].to_s == 'false'
2014-11-18 21:09:01 +00:00
ssl = false
port = 110
2013-01-04 23:14:08 +00:00
end
2015-08-28 00:53:14 +00:00
Rails.logger.info "fetching pop3 (#{options[:host]}/#{options[:user]} port=#{port},ssl=#{ssl})"
2015-08-28 00:53:14 +00:00
@pop = Net::POP3.new( options[:host], port )
2014-11-16 22:45:57 +00:00
# on check, reduce open_timeout to have faster probing
if check_type == 'check'
2014-11-18 11:51:35 +00:00
@pop.open_timeout = 4
2014-11-16 22:45:57 +00:00
@pop.read_timeout = 6
end
2013-01-04 23:14:08 +00:00
if ssl
2014-11-16 22:45:57 +00:00
@pop.enable_ssl(OpenSSL::SSL::VERIFY_NONE)
2013-01-04 23:14:08 +00:00
end
2015-08-28 00:53:14 +00:00
@pop.start( options[:user], options[:password] )
2014-10-22 21:00:11 +00:00
if check_type == 'check'
2015-05-04 19:34:04 +00:00
Rails.logger.info 'check only mode, fetch no emails'
2014-10-22 21:00:11 +00:00
disconnect
return
elsif check_type == 'verify'
2015-05-04 19:34:04 +00:00
Rails.logger.info 'verify mode, fetch no emails'
2014-10-22 21:00:11 +00:00
end
2014-11-09 20:18:13 +00:00
mails = @pop.mails
2012-04-13 17:06:09 +00:00
count = 0
2014-11-09 20:18:13 +00:00
count_all = mails.size
# reverse message order to increase performance
if check_type == 'verify'
mails.reverse!
end
mails.each do |m|
2012-04-13 17:06:09 +00:00
count += 1
Rails.logger.info " - message #{count}/#{count_all}"
2012-04-13 17:06:09 +00:00
2014-10-22 21:00:11 +00:00
# check for verify message
if check_type == 'verify'
mail = m.pop
if mail && mail =~ /#{verify_string}/
2015-05-04 19:34:04 +00:00
Rails.logger.info " - verify email #{verify_string} found"
2014-10-22 21:00:11 +00:00
m.delete
disconnect
return 'verify ok'
end
else
# delete email from server after article was created
if process(channel, m.pop)
m.delete
end
end
end
2014-06-22 07:00:09 +00:00
disconnect
2012-04-13 17:06:09 +00:00
if count == 0
2015-05-04 19:34:04 +00:00
Rails.logger.info ' - no message'
2012-04-13 17:06:09 +00:00
end
2015-05-04 19:34:04 +00:00
Rails.logger.info 'done'
end
2014-06-22 07:00:09 +00:00
def disconnect
return if !@pop
@pop.finish
2014-06-22 07:00:09 +00:00
end
end