[Checkins] SVN: zope.sendmail/trunk/src/zope/sendmail/ close smtp connection on failed quit

Adam Groszer agroszer at gmail.com
Sat Nov 1 15:51:59 EDT 2008


Log message for revision 92747:
  close smtp connection on failed quit

Changed:
  U   zope.sendmail/trunk/src/zope/sendmail/mailer.py
  U   zope.sendmail/trunk/src/zope/sendmail/tests/test_mailer.py

-=-
Modified: zope.sendmail/trunk/src/zope/sendmail/mailer.py
===================================================================
--- zope.sendmail/trunk/src/zope/sendmail/mailer.py	2008-11-01 19:26:46 UTC (rev 92746)
+++ zope.sendmail/trunk/src/zope/sendmail/mailer.py	2008-11-01 19:51:58 UTC (rev 92747)
@@ -74,4 +74,4 @@
             connection.quit()
         except socket.sslerror:
             #something weird happened while quiting
-            pass
+            connection.close()

Modified: zope.sendmail/trunk/src/zope/sendmail/tests/test_mailer.py
===================================================================
--- zope.sendmail/trunk/src/zope/sendmail/tests/test_mailer.py	2008-11-01 19:26:46 UTC (rev 92746)
+++ zope.sendmail/trunk/src/zope/sendmail/tests/test_mailer.py	2008-11-01 19:51:58 UTC (rev 92747)
@@ -30,9 +30,13 @@
         global SMTP
         class SMTP(object):
 
+            failOnQuit = False
+
             def __init__(myself, h, p):
                 myself.hostname = h
                 myself.port = p
+                myself.quited = False
+                myself.closed = False
                 if type(p) == type(u""):
                     raise socket.error("Int or String expected")
                 self.smtp = myself
@@ -47,8 +51,14 @@
                 self.password = password
 
             def quit(self):
-                self.quit = True
+                if self.failOnQuit:
+                    raise socket.sslerror("dang")
+                self.quited = True
+                self.close()
 
+            def close(self):
+                self.closed = True
+
             def has_extn(self, ext):
                 return True
 
@@ -80,7 +90,8 @@
             self.assertEquals(self.smtp.fromaddr, fromaddr)
             self.assertEquals(self.smtp.toaddrs, toaddrs)
             self.assertEquals(self.smtp.msgtext, msgtext)
-            self.assert_(self.smtp.quit)
+            self.assert_(self.smtp.quited)
+            self.assert_(self.smtp.closed)
 
     def test_send_auth(self):
         fromaddr = 'me at example.com'
@@ -98,9 +109,25 @@
         self.assertEquals(self.smtp.fromaddr, fromaddr)
         self.assertEquals(self.smtp.toaddrs, toaddrs)
         self.assertEquals(self.smtp.msgtext, msgtext)
-        self.assert_(self.smtp.quit)
+        self.assert_(self.smtp.quited)
+        self.assert_(self.smtp.closed)
 
+    def test_send_failQuit(self):
+        self.mailer.smtp.failOnQuit = True
+        try:
+            fromaddr = 'me at example.com'
+            toaddrs = ('you at example.com', 'him at example.com')
+            msgtext = 'Headers: headers\n\nbodybodybody\n-- \nsig\n'
+            self.mailer.send(fromaddr, toaddrs, msgtext)
+            self.assertEquals(self.smtp.fromaddr, fromaddr)
+            self.assertEquals(self.smtp.toaddrs, toaddrs)
+            self.assertEquals(self.smtp.msgtext, msgtext)
+            self.assert_(not self.smtp.quited)
+            self.assert_(self.smtp.closed)
+        finally:
+            self.mailer.smtp.failOnQuit = False
 
+
 class TestSMTPMailerWithNoEHLO(TestSMTPMailer):
 
     def setUp(self, port=None):
@@ -111,6 +138,8 @@
             def __init__(myself, h, p):
                 myself.hostname = h
                 myself.port = p
+                myself.quited = False
+                myself.closed = False
                 if type(p) == type(u""):
                     raise socket.error("Int or String expected")
                 self.smtp = myself



More information about the Checkins mailing list