From 510f209036c8384daaff08fab4d1a1b8b6f0275f Mon Sep 17 00:00:00 2001 From: nanotube Date: Tue, 9 Jan 2007 07:53:59 +0000 Subject: [PATCH] - change the password obfuscation from zlip.compress to base64.b64encode: the zlib compression was not playing nice with the config reader due to weird nonprintable characters. - change email library imports to reflect the new python 2.5 structure - add TLS email functionality (now works with gmail) --- logwriter.py | 53 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/logwriter.py b/logwriter.py index ce6ce2c..6752146 100644 --- a/logwriter.py +++ b/logwriter.py @@ -13,11 +13,28 @@ import zlib # the following are needed for automatic emailing import smtplib -from email.MIMEMultipart import MIMEMultipart -from email.MIMEBase import MIMEBase -from email.MIMEText import MIMEText -from email.Utils import COMMASPACE, formatdate -from email import Encoders + +# needed for de-obfuscating passwords +import base64 + +from email.mime.multipart import MIMEMultipart +from email.mime.base import MIMEBase +from email.mime.text import MIMEText +from email.utils import COMMASPACE, formatdate +import email.encoders + +#need these to workaround py2exe +import email.generator +import email.iterators +import email.utils +import email.base64mime + +# these are for python 2.4 - they don't play nice with python 2.5 + py2exe. +#~ from email.MIMEMultipart import MIMEMultipart +#~ from email.MIMEBase import MIMEBase +#~ from email.MIMEText import MIMEText +#~ from email.Utils import COMMASPACE, formatdate +#~ from email import Encoders class LogWriter: '''Manages the writing of log files and logfile maintenance activities. @@ -282,21 +299,39 @@ class LogWriter: for file in zipFileList: part = MIMEBase('application', "octet-stream") part.set_payload( open(os.path.join(self.settings['General']['Log Directory'], file),"rb").read() ) - Encoders.encode_base64(part) + email.encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file)) msg.attach(part) # set up the server and send the message - mysmtp = smtplib.SMTP(self.settings['E-mail']['SMTP Server']) + mysmtp = smtplib.SMTP(self.settings['E-mail']['SMTP Server'], self.settings['E-mail']['SMTP Port']) if self.cmdoptions.debug: mysmtp.set_debuglevel(1) + if self.settings['E-mail']['SMTP Use TLS'] == True: + # we find that we need to use two ehlos (one before and one after starttls) + # otherwise we get "SMTPException: SMTP AUTH extension not supported by server" + # thanks for this solution go to http://forums.belution.com/en/python/000/009/17.shtml + mysmtp.ehlo() + mysmtp.starttls() + mysmtp.ehlo() if self.settings['E-mail']['SMTP Needs Login'] == True: - mysmtp.login(self.settings['E-mail']['SMTP Username'],zlib.decompress(self.settings['E-mail']['SMTP Password'])) + mysmtp.login(self.settings['E-mail']['SMTP Username'], base64.b64decode(self.settings['E-mail']['SMTP Password'])) sendingresults = mysmtp.sendmail(self.settings['E-mail']['SMTP From'], self.settings['E-mail']['SMTP To'].split(";"), msg.as_string()) self.PrintDebug("Email sending errors (if any): " + str(sendingresults) + "\n") - mysmtp.quit() + + # need to put the quit in a try, since TLS connections may error out due to bad implementation with + # socket.sslerror: (8, 'EOF occurred in violation of protocol') + # Most SSL servers and clients (primarily HTTP, but some SMTP as well) are broken in this regard: + # they do not properly negotiate TLS connection shutdown. This error is otherwise harmless. + # reference URLs: + # http://groups.google.de/group/comp.lang.python/msg/252b421a7d9ff037 + # http://mail.python.org/pipermail/python-list/2005-August/338280.html + try: + mysmtp.quit() + except: + pass # write the latest emailed zip to log for the future if len(zipFileList) > 0: -- 2.45.1