Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require "openssl"
- require "net/smtp"
- require "openssl"
- require "net/smtp"
- Net::SMTP.class_eval do
- private
- def do_start(helodomain, user, secret, authtype)
- raise IOError, 'SMTP session already started' if @started
- check_auth_args user, secret, authtype if user or secret
- sock = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
- @socket = Net::InternetMessageIO.new(sock)
- @socket.read_timeout = 60 #@read_timeout
- @socket.debug_output = STDERR #@debug_output
- check_response(critical { recv_response() })
- do_helo(helodomain)
- raise 'openssl library not installed' unless defined?(OpenSSL)
- starttls
- ssl = OpenSSL::SSL::SSLSocket.new(sock)
- ssl.sync_close = true
- ssl.connect
- @socket = Net::InternetMessageIO.new(ssl)
- @socket.read_timeout = 60 #@read_timeout
- @socket.debug_output = STDERR #@debug_output
- do_helo(helodomain)
- authenticate user, secret, authtype if user
- @started = true
- ensure
- unless @started
- # authentication failed, cancel connection.
- @socket.close if not @started and @socket and not @socket.closed?
- @socket = nil
- end
- end
- def do_helo(helodomain)
- begin
- if @esmtp
- ehlo helodomain
- else
- helo helodomain
- end
- rescue Net::ProtocolError
- if @esmtp
- @esmtp = false
- @error_occured = false
- retry
- end
- raise
- end
- end
- def starttls
- getok('STARTTLS')
- end
- def quit
- begin
- getok('QUIT')
- rescue EOFError
- end
- end
- end
Add Comment
Please, Sign In to add comment