new(host, port_or_options = {}, usessl = false, certs = nil, verify = true)
public
Creates a new Net::IMAP object and connects it to the specified
host.
options is an option hash, each key of which is a symbol.
The available options are:
port |
port number (default value is 143 for imap, or 993 for imaps)
|
ssl |
if options[:ssl] is true, then an attempt will be made to use SSL (now TLS)
to connect to the server. For this to work OpenSSL [OSSL] and the Ruby OpenSSL [RSSL] extensions need to be installed. if
options[:ssl] is a hash, it’s passed to OpenSSL::SSL::SSLContext#set_params
as parameters.
|
The most common errors are:
Errno::ECONNREFUSED |
connection refused by host or an intervening firewall.
|
Errno::ETIMEDOUT |
connection timed out (possibly due to packets being dropped by an
intervening firewall).
|
Errno::ENETUNREACH |
there is no route to that network.
|
SocketError |
hostname not known or other socket error.
|
Net::IMAP::ByeResponseError |
we connected to the host, but they immediately said goodbye to us.
|
Show source
def initialize(host, port_or_options = {},
usessl = false, certs = nil, verify = true)
super()
@host = host
begin
options = port_or_options.to_hash
rescue NoMethodError
options = {}
options[:port] = port_or_options
if usessl
options[:ssl] = create_ssl_params(certs, verify)
end
end
@port = options[:port] || (options[:ssl] ? SSL_PORT : PORT)
@tag_prefix = "RUBY"
@tagno = 0
@parser = ResponseParser.new
@sock = TCPSocket.open(@host, @port)
if options[:ssl]
start_tls_session(options[:ssl])
@usessl = true
else
@usessl = false
end
@responses = Hash.new([].freeze)
@tagged_responses = {}
@response_handlers = []
@tagged_response_arrival = new_cond
@continuation_request_arrival = new_cond
@idle_done_cond = nil
@logout_command_tag = nil
@debug_output_bol = true
@exception = nil
@greeting = get_response
if @greeting.nil?
@sock.close
raise Error, "connection closed"
end
if @greeting.name == "BYE"
@sock.close
raise ByeResponseError, @greeting
end
@client_thread = Thread.current
@receiver_thread = Thread.start {
begin
receive_responses
rescue Exception
end
}
@receiver_thread_terminating = false
end