Tls

Anyone know if ruby supports TLS in SMTP? can you please provide code snippets?

http://svn.nanorails.com/plugins/action_mailer_tls/

···

--
Alexey Verkhovsky
CruiseControl.rb [http://cruisecontrolrb.thoughtworks.com]
RubyWorks [http://rubyworks.thoughtworks.com]

Look in Ruby/EventMachine- there is now an SMTP client and server and both
support TLS.

···

On 9/21/07, Sean Nakasone <seannakasone@yahoo.com> wrote:

Anyone know if ruby supports TLS in SMTP? can you please provide code
snippets?

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

a @ http://drawohara.com/

···

On Sep 21, 2007, at 12:10 PM, Sean Nakasone wrote:

Anyone know if ruby supports TLS in SMTP? can you please provide code snippets?

--
we can deny everything, except that we have the possibility of being better. simply reflect on that.
h.h. the 14th dalai lama

# thanks, it works. here's the entire code.

msgstr = <<END_OF_MESSAGE

This is a test message.
The quick
brown fox.
END_OF_MESSAGE

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

Net::SMTP.start('smtp.gmail.com', 587, 'mail.domain.com',
'your_account', 'your_pass', :login) do |smtp|
  smtp.send_message msgstr,
                    'from_email@domain.com',
                    'to_email@domain.com',
                    'another_to_email@domain.com'
end

# you need to substitute:
# mail.domain.com - with the mail server on your domain.
# your_account
# your_pass
# from_email@domain.com
# to_email@domain.com
# another_to_email@domain.com

···

Subject: This is my subject.