def start(helo = 'localhost',
              user = nil, secret = nil, authtype = nil)   # :yield: smtp
      if block_given?
        begin
          do_start helo, user, secret, authtype
          return yield(self)
        ensure
          do_finish
        end
      else
        do_start helo, user, secret, authtype
        return self
      end
    end
def start(helo = 'localhost',
              user = nil, secret = nil, authtype = nil)   # :yield: smtp
      if block_given?
        begin
          do_start helo, user, secret, authtype
          return yield(self)
        ensure
          do_finish
        end
      else
        do_start helo, user, secret, authtype
        return self
      end
    end
Opens a TCP connection and starts the SMTP session.

 === Parameters

 +helo+ is the _HELO_ _domain_ that you'll dispatch mails from; see
 the discussion in the overview notes.

 If both of +user+ and +secret+ are given, SMTP authentication
 will be attempted using the AUTH command.  +authtype+ specifies
 the type of authentication to attempt; it must be one of
 :login, :plain, and :cram_md5.  See the notes on SMTP Authentication
 in the overview.

 === Block Usage

 When this methods is called with a block, the newly-started SMTP
 object is yielded to the block, and automatically closed after
 the block call finishes.  Otherwise, it is the caller's
 responsibility to close the session when finished.

 === Example

 This is very similar to the class method SMTP.start.

     require 'net/smtp'
     smtp = Net::SMTP.new('smtp.mail.server', 25)
     smtp.start(helo_domain, account, password, authtype) do |smtp|
       smtp.send_message msgstr, 'from@example.com', ['dest@example.com']
     end

 The primary use of this method (as opposed to SMTP.start)
 is probably to set debugging (#set_debug_output) or ESMTP
 (#esmtp=), which must be done before the session is
 started.

 === Errors

 If session has already been started, an IOError will be raised.

 This method may raise:

 * Net::SMTPAuthenticationError
 * Net::SMTPServerBusy
 * Net::SMTPSyntaxError
 * Net::SMTPFatalError
 * Net::SMTPUnknownError
 * Net::OpenTimeout
 * Net::ReadTimeout
 * IOError