summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorshyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-06-08 06:14:59 +0000
committershyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-06-08 06:14:59 +0000
commit0b1e93285ec4dafefb8277425e1ff58e5247715c (patch)
tree237c7f24c6d6dcb1182841947ea9961a6af75764 /lib
parent35bb464b6b698c7ad18f7abbd2d65fbce9f03371 (diff)
merge revision(s) 27374,27512:
* lib/net/smtp.rb (Net::SMTP#rcptto_list): continue when at least one RCPT is accepted. based on a patch from Kero van Gelder at [ruby-core:26190]. * lib/net/smtp.rb (Net::SMTP#rcptto_list): fixed typo. [ruby-core:29809] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@28208 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/net/smtp.rb22
1 files changed, 17 insertions, 5 deletions
diff --git a/lib/net/smtp.rb b/lib/net/smtp.rb
index 7c9d9388ef..46cba7704f 100644
--- a/lib/net/smtp.rb
+++ b/lib/net/smtp.rb
@@ -651,8 +651,7 @@ module Net
def send_message(msgstr, from_addr, *to_addrs)
raise IOError, 'closed session' unless @socket
mailfrom from_addr
- rcptto_list to_addrs
- data msgstr
+ rcptto_list(to_addrs) {data msgstr}
end
alias send_mail send_message
@@ -705,8 +704,7 @@ module Net
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)
+ rcptto_list(to_addrs) {data(&block)}
end
alias ready open_message_stream # obsolete
@@ -830,9 +828,23 @@ module Net
def rcptto_list(to_addrs)
raise ArgumentError, 'mail destination not given' if to_addrs.empty?
+ ok_users = []
+ unknown_users = []
to_addrs.flatten.each do |addr|
- rcptto addr
+ begin
+ rcptto addr
+ rescue SMTPAuthenticationError
+ unknown_users << addr.dump
+ else
+ ok_users << addr
+ end
+ end
+ raise ArgumentError, 'mail destination not given' if ok_users.empty?
+ ret = yield
+ unless unknown_users.empty?
+ raise SMTPAuthenticationError, "failed to deliver for #{unknown_users.join(', ')}"
end
+ ret
end
def rcptto(to_addr)