From d4dc01deb7df891c92d258ad862d22ce7a3752ce Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Mon, 15 Sep 2008 21:09:41 +0200 Subject: Attach logfile to mail --- portato/gui/templates/MailInfoWindow.glade | 24 ++++++++++++++++-- portato/gui/windows/mailinfo.py | 40 +++++++++++++++++++----------- portato/log.py | 4 ++- 3 files changed, 51 insertions(+), 17 deletions(-) (limited to 'portato') diff --git a/portato/gui/templates/MailInfoWindow.glade b/portato/gui/templates/MailInfoWindow.glade index a01f652..11ef33a 100644 --- a/portato/gui/templates/MailInfoWindow.glade +++ b/portato/gui/templates/MailInfoWindow.glade @@ -1,6 +1,6 @@ - + Send Bug Mail ... @@ -19,9 +19,12 @@ True - 4 + 5 2 10 + + + True @@ -132,6 +135,23 @@ what did you do to hit the bug? 5 + + + True + True + Attaches the logfile to the mail. This log only contains debug information. + Attach _Logfile + True + 0 + True + True + + + 4 + 5 + GTK_FILL + + 5 diff --git a/portato/gui/windows/mailinfo.py b/portato/gui/windows/mailinfo.py index 22e750a..bbcbf1f 100644 --- a/portato/gui/windows/mailinfo.py +++ b/portato/gui/windows/mailinfo.py @@ -10,16 +10,19 @@ # # Written by René 'Necoro' Neumann -from __future__ import absolute_import +from __future__ import absolute_import, with_statement import smtplib, socket import time +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText from .basic import AbstractDialog from ..utils import GtkThread from ..dialogs import mail_failure_dialog from ...helper import debug, info from ...constants import VERSION +from ...log import LOGFILE class MailInfoWindow (AbstractDialog): TO = "bugs@portato.necoro.net" @@ -32,17 +35,23 @@ class MailInfoWindow (AbstractDialog): self.window.show_all() def set_data (self): + self.message = MIMEMultipart() + self.message["Subject"] = "[Bug Report] Bug in Portato %s" % VERSION + self.message["To"] = self.TO + + # TO and FROM name = self.tree.get_widget("nameEntry").get_text() - addr = self.tree.get_widget("mailEntry").get_text() + self.addr = self.tree.get_widget("mailEntry").get_text() - if not addr: - addr = self.TO + if not self.addr: + self.addr = self.TO if name: - fro = "%s <%s>" % (name, addr) + self.message["From"] = "%s <%s>" % (name, self.addr) else: - fro = addr + self.message["From"] = self.addr + # text commentBuffer = self.tree.get_widget("commentEntry").get_buffer() text = commentBuffer.get_text(*commentBuffer.get_bounds()) @@ -51,13 +60,16 @@ class MailInfoWindow (AbstractDialog): text += self.tb - message = """From: %s -To: %s -Subject: %s -%s""" % ( fro, self.TO, ("[Bug Report] Bug in Portato %s" % VERSION), text) + txtmsg = MIMEText(text, "plain", "utf-8") + self.message.attach(txtmsg) + + # log + if self.tree.get_widget("logCheck").get_active(): + with open(LOGFILE, "r") as f: + log = MIMEText(f.read(), "plain", "utf-8") + log.add_header('Content-Disposition', 'attachment', filename='portato.log') - self.addr = addr - self.message = message + self.message.attach(log) def send (self): try: @@ -66,12 +78,12 @@ Subject: %s debug("Sending mail") try: try: - server.sendmail(self.addr, self.TO, self.message) + server.sendmail(self.addr, self.TO, self.message.as_string()) except smtplib.SMTPRecipientsRefused, e: info(_("An error occurred while sending. I think we were greylisted. The error: %s") % e) info(_("Retrying after waiting 60 seconds.")) time.sleep(60) - server.sendmail(self.addr, self.TO, self.message) + server.sendmail(self.addr, self.TO, self.message.as_string()) debug("Sent") finally: server.quit() diff --git a/portato/log.py b/portato/log.py index 971dddf..9c5ebd2 100644 --- a/portato/log.py +++ b/portato/log.py @@ -22,6 +22,8 @@ from .constants import SESSION_DIR started = S_NOT +LOGFILE = os.path.join(SESSION_DIR, "portato.log") + class OutputFormatter (logging.Formatter): colors = { @@ -66,7 +68,7 @@ def start(file = True): os.mkdir(SESSION_DIR) formatter = logging.Formatter("%(levelname)-8s: %(message)s (%(filename)s:%(lineno)s)") - handler = logging.FileHandler(os.path.join(SESSION_DIR, "portato.log"), "w") + handler = logging.FileHandler(LOGFILE, "w") handler.setFormatter(formatter) logging.getLogger("portatoLogger").addHandler(handler) -- cgit v1.2.3-54-g00ecf