From 79c2d60971501ea6cb8304a9c860bac0bc2bee94 Mon Sep 17 00:00:00 2001 From: aamine Date: Wed, 16 Aug 2000 19:26:07 +0000 Subject: [PATCH] aamine * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.27. * lib/net/protocol.rb: writing methods returns written byte size. * lib/net/smtp.rb: send_mail accepts many destinations. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@896 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 8 +++++++ lib/net/http.rb | 7 +++--- lib/net/pop.rb | 7 +++--- lib/net/protocol.rb | 16 ++++++++----- lib/net/smtp.rb | 56 ++++++++++++++++++++++++--------------------- 5 files changed, 56 insertions(+), 38 deletions(-) diff --git a/ChangeLog b/ChangeLog index f74ef95126..de1fe58a49 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Thu Aug 17 04:26:31 2000 Minero Aoki + + * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.27. + + * lib/net/protocol.rb: writing methods returns written byte size. + + * lib/net/smtp.rb: send_mail accepts many destinations. + Tue Aug 15 17:30:59 2000 Yukihiro Matsumoto * eval.c (frame_dup): should set flag FRAME_MALLOC after diff --git a/lib/net/http.rb b/lib/net/http.rb index 5a5917baa0..e5822d6138 100644 --- a/lib/net/http.rb +++ b/lib/net/http.rb @@ -1,12 +1,13 @@ =begin -= net/http.rb version 1.1.27 += net/http.rb version 1.1.28 maintained by Minero Aoki This file is derived from "http-access.rb". -This library is distributed under the terms of the Ruby license. -You can freely distribute/modify this library. +This program is free software. +You can distribute/modify this program under +the terms of the Ruby Distribute License. = class HTTP diff --git a/lib/net/pop.rb b/lib/net/pop.rb index 01b2deaa84..6e12d4064a 100644 --- a/lib/net/pop.rb +++ b/lib/net/pop.rb @@ -1,11 +1,12 @@ =begin -= net/pop.rb version 1.1.27 += net/pop.rb version 1.1.28 written by Minero Aoki -This library is distributed under the terms of the Ruby license. -You can freely distribute/modify this library. +This program is free software. +You can distribute/modify this program under +the terms of the Ruby Distribute License. == Net::POP3 diff --git a/lib/net/protocol.rb b/lib/net/protocol.rb index b351c268bd..16d6cac747 100644 --- a/lib/net/protocol.rb +++ b/lib/net/protocol.rb @@ -1,11 +1,12 @@ =begin -= net/protocol.rb version 1.1.27 += net/protocol.rb version 1.1.28 written by Minero Aoki -This library is distributed under the terms of the Ruby license. -You can freely distribute/modify this library. +This program is free software. +You can distribute/modify this program under +the terms of the Ruby Distribute License. == Net::Protocol @@ -64,7 +65,7 @@ module Net class Protocol - Version = '1.1.27' + Version = '1.1.28' class << self @@ -75,7 +76,7 @@ module Net if iterator? then instance.start( *args ) { yield instance } else - instance.start *args + instance.start( *args ) instance end end @@ -164,7 +165,7 @@ module Net begin connect - do_start *args + do_start( *args ) @active = true yield self if iterator? ensure @@ -639,10 +640,13 @@ module Net def wpend_in( src ) line = nil + pre = @writtensize each_crlf_line( src ) do |line| do_write '.' if line[0] == ?. do_write line end + + @writtensize - pre end def use_each_crlf_line diff --git a/lib/net/smtp.rb b/lib/net/smtp.rb index 0b4313c520..53bed4910b 100644 --- a/lib/net/smtp.rb +++ b/lib/net/smtp.rb @@ -1,11 +1,12 @@ =begin -= net/smtp.rb version 1.1.27 += net/smtp.rb version 1.1.28 written by Minero Aoki -This library is distributed under the terms of the Ruby license. -You can freely distribute/modify this library. +This program is free software. +You can distribute/modify this program under +the terms of the Ruby Distribute License. == Net::SMTP @@ -21,7 +22,7 @@ Net::Protocol : start( address = 'localhost', port = 25, *protoargs ) : start( address = 'localhost', port = 25, *protoargs ) {|smtp| .... } - same to Net::SMTP.new( address, port ).start( *protoargs ) + is equal to Net::SMTP.new( address, port ).start( *protoargs ) === Methods @@ -38,14 +39,14 @@ Net::Protocol If account and password are given, is trying to get authentication by using AUTH command. "authtype" is :plain (symbol) or :cram_md5. -: send_mail( mailsrc, from_addr, to_addrs ) -: sendmail( mailsrc, from_addr, to_addrs ) - This method sends 'mailsrc' as mail. SMTPSession read strings +: send_mail( mailsrc, from_addr, *to_addrs ) +: sendmail( mailsrc, from_addr, *to_addrs ) + This method sends 'mailsrc' as mail. SMTP read strings from 'mailsrc' by calling 'each' iterator, and convert them into "\r\n" terminated string when write. from_addr must be String. - to_addrs must be Array of String, or String. + to_addrs must be a String(s) or an Array of String. Exceptions which SMTP raises are: * Net::ProtoSyntaxError: syntax error (errno.500) @@ -53,6 +54,12 @@ Net::Protocol * Net::ProtoUnknownError: unknown error * Net::ProtoServerBusy: temporary error (errno.420/450) + # usage example + + Net::SMTP.start( 'localhost', 25 ) do |smtp| + smtp.send_mail mail_string, 'from-addr@foo.or.jp', 'to-addr@bar.or.jp' + end + : ready( from_addr, to_addrs ) {|adapter| .... } This method stands by the SMTP object for sending mail. In the block of this iterator, you can call ONLY 'write' method @@ -60,7 +67,7 @@ Net::Protocol # usage example - SMTP.start( 'localhost', 25 ) do |smtp| + Net::SMTP.start( 'localhost', 25 ) do |smtp| smtp.ready( from, to ) do |adapter| adapter.write str1 adapter.write str2 @@ -69,8 +76,8 @@ Net::Protocol end : finish - This method ends SMTP. - If protocol had not started, do nothind and return false. + finishes SMTP session. + If SMTP session had not started, do nothing and return false. =end @@ -92,17 +99,17 @@ module Net @esmtp = true end - attr :esmtp - def send_mail( mailsrc, from_addr, to_addrs ) - do_ready from_addr, to_addrs + def send_mail( mailsrc, from_addr, *to_addrs ) + do_ready from_addr, to_addrs.flatten @command.write_mail mailsrc, nil end + alias sendmail send_mail - def ready( from_addr, to_addrs, &block ) - do_ready from_addr, to_addrs + def ready( from_addr, *to_addrs, &block ) + do_ready from_addr, to_addrs.flatten @command.write_mail nil, block end @@ -111,7 +118,9 @@ module Net def do_ready( from_addr, to_addrs ) - to_addrs = [to_addrs] if String === to_addrs + if to_addrs.empty? then + raise ArgumentError, 'mail destination does not given' + end @command.mailfrom from_addr @command.rcpt to_addrs @command.data @@ -119,12 +128,10 @@ module Net def do_start( helodom = nil, user = nil, secret = nil, authtype = nil ) + helodom ||= ::Socket.gethostname unless helodom then - helodom = ::Socket.gethostname - unless helodom then - raise ArgumentError, - "cannot get localhost name; try 'smtp.start(local_host_name)'" - end + raise ArgumentError, + "cannot get localhost name; try 'smtp.start(local_host_name)'" end begin @@ -234,13 +241,11 @@ module Net getok 'DATA', ContinueCode end - def write_mail( mailsrc, block ) @socket.write_pendstr mailsrc, block check_reply SuccessCode end_critical end - alias sendmail write_mail def quit @@ -276,7 +281,6 @@ module Net def read_reply arr = [] - while true do str = @socket.readline break unless str[3] == ?- # ex: "210-..." @@ -284,7 +288,7 @@ module Net end arr.push str - return arr + arr end end