def open_message_stream(from_addr, *to_addrs, &block)   # :yield: stream
      raise IOError, 'closed session' unless @socket
      mailfrom from_addr
      rcptto_list to_addrs
      data(&block)
    end
def open_message_stream(from_addr, *to_addrs, &block)   # :yield: stream
      raise IOError, 'closed session' unless @socket
      mailfrom from_addr
      rcptto_list to_addrs
      data(&block)
    end
obsolete

 Opens a message writer stream and gives it to the block.
 The stream is valid only in the block, and has these methods:

 puts(str = '')::       outputs STR and CR LF.
 print(str)::           outputs STR.
 printf(fmt, *args)::   outputs sprintf(fmt,*args).
 write(str)::           outputs STR and returns the length of written bytes.
 <<(str)::              outputs STR and returns self.

 If a single CR ("\r") or LF ("\n") is found in the message,
 it is converted to the CR LF pair.  You cannot send a binary
 message with this method.

 === Parameters

 +from_addr+ is a String representing the source mail address.

 +to_addr+ is a String or Strings or Array of Strings, representing
 the destination mail address or addresses.

 === Example

     Net::SMTP.start('smtp.example.com', 25) do |smtp|
       smtp.open_message_stream('from@example.com', ['dest@example.com']) do |f|
         f.puts 'From: from@example.com'
         f.puts 'To: dest@example.com'
         f.puts 'Subject: test message'
         f.puts
         f.puts 'This is a test message.'
       end
     end

 === Errors

 This method may raise:

 * Net::SMTPServerBusy
 * Net::SMTPSyntaxError
 * Net::SMTPFatalError
 * Net::SMTPUnknownError
 * IOError
 * TimeoutError