]> granicus.if.org Git - python/commitdiff
Patch by Piers Lauder: make exceptions classes.
authorGuido van Rossum <guido@python.org>
Fri, 15 Jan 1999 03:23:55 +0000 (03:23 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 15 Jan 1999 03:23:55 +0000 (03:23 +0000)
Take opportunity to add more explanatory messages to exceptions.

Lib/smtplib.py

index ebaf7f216f5d754b9f6f049d48241b0e974977de..47e1fafbb3d9570f12b6a8d4acfe20a249605248 100755 (executable)
@@ -37,10 +37,6 @@ Example:
   >>> s.getreply()
   (250, "Somebody OverHere <somebody@here.my.org>")
   >>> s.quit()
-
-Bugs/TODO:
-    - Exceptions should be classes
-
 '''
 
 import socket
@@ -53,10 +49,11 @@ SMTP_PORT = 25
 CRLF="\r\n"
 
 # used for exceptions 
-SMTPServerDisconnected="Server not connected"
-SMTPSenderRefused="Sender address refused"
-SMTPRecipientsRefused="All Recipients refused"
-SMTPDataError="Error transmitting message data"
+class SMTPException(Exception): pass
+class SMTPServerDisconnected(SMTPException): pass
+class SMTPSenderRefused(SMTPException): pass
+class SMTPRecipientsRefused(SMTPException): pass
+class SMTPDataError(SMTPException): pass
 
 def quoteaddr(addr):
     """Quote a subset of the email addresses defined by RFC 821.
@@ -171,9 +168,9 @@ class SMTP:
             try:
                 self.sock.send(str)
             except socket.error:
-                raise SMTPServerDisconnected
+                raise SMTPServerDisconnected('Server not connected')
         else:
-            raise SMTPServerDisconnected
+            raise SMTPServerDisconnected('please run connect() first')
  
     def putcmd(self, cmd, args=""):
         """Send a command to the server."""
@@ -245,7 +242,7 @@ class SMTP:
         # MTA's will disconnect on an ehlo. Toss an exception if 
         # that happens -ddm
         if code == -1 and len(msg) == 0:
-            raise SMTPServerDisconnected
+            raise SMTPServerDisconnected("Server not connected")
         self.ehlo_resp=msg
         if code<>250:
             return code
@@ -388,7 +385,7 @@ class SMTP:
         (code,resp) = self.mail(from_addr, esmtp_opts)
         if code <> 250:
             self.rset()
-            raise SMTPSenderRefused
+            raise SMTPSenderRefused('%s: %s' % (from_addr, resp))
         senderrs={}
         if type(to_addrs) == types.StringType:
             to_addrs = [to_addrs]
@@ -399,11 +396,13 @@ class SMTP:
         if len(senderrs)==len(to_addrs):
             # the server refused all our recipients
             self.rset()
-            raise SMTPRecipientsRefused
+            raise SMTPRecipientsRefused(string.join(
+               map(lambda x:"%s: %s" % (x[0], x[1][1]), senderrs.items()),
+                                       '; '))
         code=self.data(msg)
         if code <>250 :
             self.rset()
-            raise SMTPDataError
+            raise SMTPDataError('data transmission error: %s' % code)
         #if we got here then somebody got our mail
         return senderrs