记录一下支持ssl的发邮件

 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

你可能感兴趣的:(.net,socket,Ruby)