En Mon, 30 Apr 2007 21:08:34 -0300, <[EMAIL PROTECTED]> escribió: > I'm new to Python, but I've been thrown into coding a pretty > complicated regression testing script. I need to email the log of the > daily test to the code owners. I thought I could use SMTPHandler for > this, but our email system requires authentication. I have not been > able to figure out how to log in using SMTPHandler. I found the > following post on comp.lang.python: > > http://groups.google.com/group/comp.lang.python/browse_frm/thread/ef873c79157b8624/cdb67687e507c974?lnk=gst&q=SMTPHandler+authentication&rnum=1#cdb67687e507c974 > > However, I haven't been able to translate this to anything I can use. > I've also looked at the source code for the SMTPHandler, but I don't > want to edit that.
Unfortunately -and despite what's said on that post- SMTPHandler does *not* provide any hook to customize the way it sends the message. The SMTP instance used internally is not available so you can't call its login() method from the outside. If you don't want to edit the sources, you could inherit from SMTPHandler, copy the emit() implementation and add the missing login() call: --- begin code --- import logging, logging.handlers, string class SMTPHandlerWithAuth(logging.handlers.SMTPHandler): def emit(self, record): """ Emit a record. Format the record and send it to the specified addressees. """ try: import smtplib try: from email.Utils import formatdate except: formatdate = self.date_time port = self.mailport if not port: port = smtplib.SMTP_PORT smtp = smtplib.SMTP(self.mailhost, port) msg = self.format(record) msg = "From: %s\r\nTo: %s\r\nSubject: %s\r\nDate: %s\r\n\r\n%s" % ( self.fromaddr, string.join(self.toaddrs, ","), self.getSubject(record), formatdate(), msg) # ADD THE FOLLOWING LINE: smtp.login(username, password) smtp.sendmail(self.fromaddr, self.toaddrs, msg) smtp.quit() except (KeyboardInterrupt, SystemExit): raise except: self.handleError(record) rootLogger = logging.getLogger('') smtpHandler = SMTPHandlerWithAuth(('localhost',587), '[EMAIL PROTECTED]', '[EMAIL PROTECTED]', "Error subject") rootLogger.addHandler(smtpHandler) logging.error('This is an error message that should be sent by mail.') --- end code --- -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list