class MailHandler::Receiving::IMAPChecker

in charge of retrieving email by IMAP

Constants

AVAILABLE_SEARCH_OPTIONS

search options: by_subject - String, search by a whole string as part of the subject of the email by_content - String, search by a whole string as part of the content of the email count - Int, number of found emails to return archive - Boolean by_recipient - Hash, accepts a hash like: :to => 'igor@example.com'

RETRY_ON_ERROR_COUNT

Attributes

address[RW]
authentication[RW]
manual_connection_manage[RW]

Connection is closed by default after each search. By setting this flag, closing connection is ignored and you need to close it manually.

password[RW]
port[RW]
use_ssl[RW]
username[RW]

Public Class Methods

new() click to toggle source
Calls superclass method MailHandler::Receiving::Checker::new
# File lib/mailhandler/receiving/imap.rb, line 22
def initialize
  super
  @manual_connection_manage = false
  @available_search_options = AVAILABLE_SEARCH_OPTIONS
end

Public Instance Methods

connect() click to toggle source
# File lib/mailhandler/receiving/imap.rb, line 48
def connect
  mailer.connect
end
disconnect() click to toggle source
# File lib/mailhandler/receiving/imap.rb, line 52
def disconnect
  return if mailer.imap_connection.disconnected?

  mailer.disconnect
end
find(options) click to toggle source
# File lib/mailhandler/receiving/imap.rb, line 28
def find(options)
  verify_and_set_search_options(options)
  @found_emails = find_emails(search_options)

  search_result
end
init_retriever() click to toggle source

delegate retrieval details to Mail library set imap settings if they are not set

# File lib/mailhandler/receiving/imap.rb, line 60
def init_retriever
  return if retriever_set?

  imap_settings = retriever_settings

  Mail.defaults do
    retriever_method :imap,
                     imap_settings
  end
end
start() click to toggle source
# File lib/mailhandler/receiving/imap.rb, line 35
def start
  return if manual_connection_manage

  init_retriever
  connect
end
stop() click to toggle source
# File lib/mailhandler/receiving/imap.rb, line 42
def stop
  return if manual_connection_manage

  disconnect
end

Private Instance Methods

find_emails(options) click to toggle source
# File lib/mailhandler/receiving/imap.rb, line 115
def find_emails(options)
  imap_search(RETRY_ON_ERROR_COUNT, options)
end
imap_date_search_pair(name, value) click to toggle source
# File lib/mailhandler/receiving/imap.rb, line 172
def imap_date_search_pair(name, value)
  [name, Net::IMAP.format_date(value)]
end
imap_filter_keys(options) click to toggle source
# File lib/mailhandler/receiving/imap.rb, line 137
def imap_filter_keys(options)
  keys = []
  options.each { |key, value| keys += retrieve_filter_setting(key, value) }
  keys.empty? ? nil : keys
end
imap_recipient_search_pair(value) click to toggle source
# File lib/mailhandler/receiving/imap.rb, line 164
def imap_recipient_search_pair(value)
  [value.keys.first.to_s.upcase, value.values.first]
end
imap_string_search_pair(name, value) click to toggle source
# File lib/mailhandler/receiving/imap.rb, line 168
def imap_string_search_pair(name, value)
  [name, value.to_s]
end
mailer() click to toggle source
# File lib/mailhandler/receiving/imap.rb, line 73
def mailer
  @mailer ||= Mail.retriever_method
end
reconnect() click to toggle source
# File lib/mailhandler/receiving/imap.rb, line 77
def reconnect
  disconnect
  connect
end
retrieve_filter_setting(key, value) click to toggle source
# File lib/mailhandler/receiving/imap.rb, line 143
def retrieve_filter_setting(key, value)
  case key
  when :by_recipient
    imap_recipient_search_pair(value)

  when :by_subject
    imap_string_search_pair('SUBJECT', value)

  when :by_content
    imap_string_search_pair('BODY', value)

  when :since
    imap_date_search_pair('SINCE', value)

  when :before
    imap_date_search_pair('BEFORE', value)
  else
    []
  end
end
retriever_set?() click to toggle source
# File lib/mailhandler/receiving/imap.rb, line 102
def retriever_set?
  Mail.retriever_method.settings == retriever_settings
end
retriever_settings() click to toggle source
# File lib/mailhandler/receiving/imap.rb, line 106
def retriever_settings
  {
    address: address, port: port,
    user_name: username, password: password,
    authentication: authentication,
    enable_ssl: use_ssl
  }
end