On Sat, Mar 16, 2002 at 07:19:45PM -0800, Marc MERLIN wrote:
> mailman-cvs gives me:
> 
> Mar 16 19:18:23 2002 (28557) Uncaught runner exception: (111, 'Connection refused')
 (...)
>   File "/usr/lib/python2.1/smtplib.py", line 222, in connect
>     self.sock.connect((host, port))
> error: (111, 'Connection refused')
> 
> Maybe it could just log the fact that it could not connect to the SMTP server?

Ok, I  fixed that (although  my fix might need  to be tweaked  further), and
more importantly  I fixed  the non  working SMTP_MAX_SESSIONS_PER_CONNECTION
option.

Yeah, it does break the one patch, one fix rule, but it's trivial to take
the two apart.

--- mailman-cvs/Mailman/Handlers/SMTPDirect.py  Fri Mar 15 22:05:17 2002
+++ /var/local/mailman/Mailman/Handlers/SMTPDirect.py   Sat Mar 23 22:03:54 2002
@@ -50,27 +50,39 @@
 
     def __connect(self):
         self.__conn = smtplib.SMTP()
-        self.__conn.connect(mm_cfg.SMTPHOST, mm_cfg.SMTPPORT)
+       try:
+           self.__conn.connect(mm_cfg.SMTPHOST, mm_cfg.SMTPPORT)
+       except socket.error:
+           if mm_cfg.SMTPPORT:
+               syslog("error", "Fatal error: cannot connect to SMTP server %s on port 
+%d", mm_cfg.SMTPHOST, mm_cfg.SMTPPORT)
+           else:
+               syslog("error", "Fatal error: cannot connect to SMTP server %s", 
+mm_cfg.SMTPHOST)
+           raise
+
         self.__numsessions = mm_cfg.SMTP_MAX_SESSIONS_PER_CONNECTION
 
     def sendmail(self, envsender, recips, msgtext):
-        try:
-            return self.__conn.sendmail(envsender, recips, msgtext)
-        except smtplib.SMTPException:
-            # For safety, reconnect
-            self.__conn.quit()
-            self.__connect()
-            # Let exceptions percolate up
-            raise
         # Decrement the session counter, reconnecting if necessary
         self.__numsessions -= 1
         # By testing exactly for equality to 0, we automatically handle the
         # case for SMTP_MAX_SESSIONS_PER_CONNECTION <= 0 meaning never close
         # the connection.  We won't worry about wraparound <wink>.
+       # There is a really small bug where the first batch will contain one
+       # less mail as asked. That's ok though, we are simply one below the MAX
+       # value for the first batch -- Marc
         if self.__numsessions == 0:
             self.__conn.quit()
             self.__connect()
 
+        try:
+            return self.__conn.sendmail(envsender, recips, msgtext)
+        except smtplib.SMTPException:
+            # For safety, reconnect
+            self.__conn.quit()
+            self.__connect()
+            # Let exceptions percolate up
+            raise
+
     def quit(self):
         self.__conn.quit()
 
@@ -111,7 +139,6 @@
         deliveryfunc = bulkdeliver
     refused = {}
     t0 = time.time()
-    numsessions = mm_cfg.SMTP_MAX_SESSIONS_PER_CONNECTION
     # Open the initial connection
     origrecips = msgdata['recips']
     # `undelivered' is a copy of chunks that we pop from to do deliveries.
@@ -121,7 +148,11 @@
     # This means at worst, the last chunk for which delivery was attempted
     # could get duplicates but not every one, and no recips should miss the
     # message.
-    conn = Connection()
+    try:
+       conn = Connection()
+    except socket.error:
+       # There is probably a better thing to do here -- Marc
+       return
     try:
         msgdata['undelivered'] = chunks
         while chunks:
-- 
Microsoft is to operating systems & security ....
                                      .... what McDonalds is to gourmet cooking
  
Home page: http://marc.merlins.org/   |   Finger [EMAIL PROTECTED] for PGP key

_______________________________________________
Mailman-Developers mailing list
[EMAIL PROTECTED]
http://mail.python.org/mailman/listinfo/mailman-developers

Reply via email to