@@ -74,7 +74,7 @@ class node. Any parts of other types are each stored in separate files
7474an exception, the original message is bounced back to the sender with the
7575explanatory message given in the exception.
7676
77- $Id: mailgw.py,v 1.150 2004-05-25 00:43:01 richard Exp $
77+ $Id: mailgw.py,v 1.151 2004-07-14 01:12:25 richard Exp $
7878"""
7979__docformat__ = 'restructuredtext'
8080
@@ -318,6 +318,7 @@ def __init__(self, instance, db, arguments={}):
318318 self .db = db
319319 self .arguments = arguments
320320 self .mailer = Mailer (instance .config )
321+ self .logger = instance .config .logging .getLogger ('mailgw' )
321322
322323 # should we trap exceptions (normal usage) or pass them through
323324 # (for testing)
@@ -386,25 +387,19 @@ def do_imap(self, server, user='', password='', mailbox='', ssl=0):
386387 # open a connection to the server and retrieve all messages
387388 try :
388389 if ssl :
389- print 'Trying server "%s" with ssl' % server
390+ self . logger . debug ( 'Trying server %r with ssl' % server )
390391 server = imaplib .IMAP4_SSL (server )
391392 else :
392- print 'Trying server %s without ssl' % server
393+ self . logger . debug ( 'Trying server %r without ssl' % server )
393394 server = imaplib .IMAP4 (server )
394- except imaplib .IMAP4 .error , e :
395- print 'IMAP server error:' , e
396- return 1
397- except socket .error , e :
398- print 'SOCKET error:' , e
399- return 1
400- except socket .sslerror , e :
401- print 'SOCKET ssl error:' , e
395+ except (imaplib .IMAP4 .error , socket .error , socket .sslerror ):
396+ self .logger .exception ('IMAP server error' )
402397 return 1
403398
404399 try :
405400 server .login (user , password )
406401 except imaplib .IMAP4 .error , e :
407- print 'Login failure:' , e
402+ self . logger . exception ( 'IMAP login failure' )
408403 return 1
409404
410405 try :
@@ -413,12 +408,14 @@ def do_imap(self, server, user='', password='', mailbox='', ssl=0):
413408 else :
414409 (typ , data ) = server .select (mailbox = mailbox )
415410 if typ != 'OK' :
416- print 'Failed to get mailbox "%s": %s' % (mailbox , data )
411+ self .logger .error ('Failed to get mailbox %r: %s' % (mailbox ,
412+ data ))
417413 return 1
418414 try :
419415 numMessages = int (data [0 ])
420416 except ValueError , value :
421- print 'Invalid message count from mailbox %r' % data [0 ]
417+ self .logger .error ('Invalid message count from mailbox %r' %
418+ data [0 ])
422419 return 1
423420 for i in range (1 , numMessages + 1 ):
424421 (typ , data ) = server .fetch (str (i ), '(RFC822)' )
@@ -463,8 +460,8 @@ def do_pop(self, server, user='', password='', apop=0):
463460 # open a connection to the server and retrieve all messages
464461 try :
465462 server = poplib .POP3 (server )
466- except socket .error , message :
467- print " POP server error:" , message
463+ except socket .error :
464+ self . logger . exception ( ' POP server error' )
468465 return 1
469466 if apop :
470467 server .apop (user , password )
@@ -510,23 +507,22 @@ def handle_Message(self, message):
510507 sendto = message .getaddrlist ('from' )
511508 if not sendto :
512509 # very bad-looking message - we don't even know who sent it
513- # XXX we should use a log file here...
514-
515- sendto = [self .instance .config .ADMIN_EMAIL ]
516-
517- m = ['Subject: badly formed message from mail gateway' ]
518- m .append ('' )
519- m .append ('The mail gateway retrieved a message which has no From:' )
520- m .append ('line, indicating that it is corrupt. Please check your' )
521- m .append ('mail gateway source. Failed message is attached.' )
522- m .append ('' )
523- self .mailer .bounce_message (message , sendto , m ,
524- subject = 'Badly formed message from mail gateway' )
510+ msg = ['Badly formed message from mail gateway. Headers:' ]
511+ msg .extend (message .headers )
512+ msg = '\n ' .join (map (str , msg ))
513+ self .logger .error (msg )
525514 return
526515
516+ msg = 'Handling message'
517+ if message .getheader ('message-id' ):
518+ msg += ' (Message-id=%r)' % message .getheader ('message-id' )
519+ self .logger .info (msg )
520+
527521 # try normal message-handling
528522 if not self .trapExceptions :
529523 return self .handle_message (message )
524+
525+ # no, we want to trap exceptions
530526 try :
531527 return self .handle_message (message )
532528 except MailUsageHelp :
@@ -551,24 +547,26 @@ def handle_Message(self, message):
551547 m .append (str (value ))
552548 self .mailer .bounce_message (message , [sendto [0 ][1 ]], m )
553549 except IgnoreMessage :
554- # XXX we should use a log file here...
555550 # do not take any action
556551 # this exception is thrown when email should be ignored
552+ msg = 'IgnoreMessage raised'
553+ if message .getheader ('message-id' ):
554+ msg += ' (Message-id=%r)' % message .getheader ('message-id' )
555+ self .logger .info (msg )
557556 return
558557 except :
558+ msg = 'Exception handling message'
559+ if message .getheader ('message-id' ):
560+ msg += ' (Message-id=%r)' % message .getheader ('message-id' )
561+ self .logger .exception (msg )
562+
559563 # bounce the message back to the sender with the error message
560- # XXX we should use a log file here...
561564 # let the admin know that something very bad is happening
562565 sendto = [sendto [0 ][1 ], self .instance .config .ADMIN_EMAIL ]
563566 m = ['' ]
564567 m .append ('An unexpected error occurred during the processing' )
565568 m .append ('of your message. The tracker administrator is being' )
566569 m .append ('notified.\n ' )
567- m .append ('---- traceback of failure ----' )
568- s = cStringIO .StringIO ()
569- import traceback
570- traceback .print_exc (None , s )
571- m .append (s .getvalue ())
572570 self .mailer .bounce_message (message , sendto , m )
573571
574572 def handle_message (self , message ):
@@ -868,7 +866,7 @@ def handle_message(self, message):
868866 'no' ) == 'yes'
869867
870868 # parse the body of the message, stripping out bits as appropriate
871- summary , content = parseContent (content , keep_citations ,
869+ summary , content = parseContent (content , keep_citations ,
872870 keep_body )
873871 content = content .strip ()
874872
@@ -1124,4 +1122,4 @@ def parseContent(content, keep_citations, keep_body,
11241122
11251123 return summary , content
11261124
1127- # vim: set filetype=python ts =4 sw=4 et si
1125+ # vim: set filetype=python sts =4 sw=4 et si
0 commit comments