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  
   
     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
评论
发表评论

您还没有登录,请登录后发表评论

magicgod
搜索本博客
我的相册
215886b9-3ce2-36c9-97a2-c2372e40191e-thumb
dog
共 3 张
存档
最新评论