Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
- if user or secret
- begin
- check_auth_args user, secret, authtype
- rescue ArgumentError => e
- if e.message =~ /wrong number of arguments \(3 for 2\)/
- #ruby 1.8.7 fix
- check_auth_args user, secret
- else
- raise e
- end
- end
- end
- sock = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
- @socket = Net::InternetMessageIO.new(sock)
- @socket.read_timeout = 60 #@read_timeout
- check_response(critical { recv_response() })
- do_helo(helodomain)
- if starttls
- raise 'openssl library not installed' unless defined?(OpenSSL)
- ssl = OpenSSL::SSL::SSLSocket.new(sock)
- ssl.sync_close = true
- ssl.connect
- @socket = Net::InternetMessageIO.new(ssl)
- @socket.read_timeout = 60 #@read_timeout
- do_helo(helodomain)
- end
- 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') rescue return false
- return true
- end
- def quit
- begin
- getok('QUIT')
- rescue EOFError
- end
- end
- end
Add Comment
Please, Sign In to add comment