summaryrefslogtreecommitdiff
path: root/lib/net/smtp.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/net/smtp.rb')
-rw-r--r--lib/net/smtp.rb18
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/net/smtp.rb b/lib/net/smtp.rb
index b14d43832a..21c04812fe 100644
--- a/lib/net/smtp.rb
+++ b/lib/net/smtp.rb
@@ -331,7 +331,7 @@ module Net # :nodoc:
do_start(helo, user, secret, authtype)
return yield(self)
ensure
- finish
+ do_finish
end
else
do_start(helo, user, secret, authtype)
@@ -362,17 +362,28 @@ module Net # :nodoc:
raise
end
authenticate user, secret, authtype if user
+ @started = true
+ ensure
+ @socket.close if not @started and @socket and not @socket.closed?
end
private :do_start
# Finishes the SMTP session and closes TCP connection.
+ # Raises IOError if not started.
def finish
+ raise IOError, 'not started yet' unless started?
+ do_finish
+ end
+
+ def do_finish
quit if @socket and not @socket.closed? and not @error_occured
+ ensure
+ @started = false
+ @error_occured = false
@socket.close if @socket and not @socket.closed?
@socket = nil
- @error_occured = false
- @started = false
end
+ private :do_finish
#
# message send
@@ -623,4 +634,3 @@ module Net # :nodoc:
SMTPSession = SMTP
end # module Net
-