From fcd88477de3b0fddb695693f3580c9a243d02296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20=27Necoro=27=20Neumann?= Date: Sun, 22 Jun 2008 23:40:10 +0200 Subject: Implemented the mail sending --- portato/gui/exception_handling.py | 7 +++-- portato/gui/windows/mailinfo.py | 59 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 63 insertions(+), 3 deletions(-) (limited to 'portato') diff --git a/portato/gui/exception_handling.py b/portato/gui/exception_handling.py index 5d5eb17..9a593c1 100644 --- a/portato/gui/exception_handling.py +++ b/portato/gui/exception_handling.py @@ -21,7 +21,6 @@ from StringIO import StringIO from ..helper import debug, error from .dialogs import file_chooser_dialog, io_ex_dialog -from .windows.mailinfo import MailInfoWindow # for the i18n from ..constants import LOCALE_DIR, APP @@ -44,6 +43,8 @@ class GtkThread (Thread): finally: del type, val, tb +from .windows.mailinfo import MailInfoWindow + class UncaughtExceptionDialog(gtk.MessageDialog): """Original idea by Gustavo Carneiro - original code: http://www.daa.com.au/pipermail/pygtk/attachments/20030828/2d304204/gtkexcepthook.py.""" @@ -107,7 +108,9 @@ class UncaughtExceptionDialog(gtk.MessageDialog): debug("Nothing to save") elif resp == 3: debug("Send bug per mail") - MailInfoWindow(self, self.text) + self.destroy() + MailInfoWindow(None, self.text) + return else: break self.destroy() diff --git a/portato/gui/windows/mailinfo.py b/portato/gui/windows/mailinfo.py index 45b4273..ebecf35 100644 --- a/portato/gui/windows/mailinfo.py +++ b/portato/gui/windows/mailinfo.py @@ -13,18 +13,75 @@ from __future__ import absolute_import import gtk +import smtplib +import time from .basic import AbstractDialog +from ..exception_handling import GtkThread from ...helper import debug +from ...constants import VERSION class MailInfoWindow (AbstractDialog): + TO = "bugs@portato.necoro.net" def __init__ (self, parent, tb): AbstractDialog.__init__(self, parent) + + self.tb = tb self.window.show_all() - def cb_cancel_clicked (self): + def set_data (self): + name = self.tree.get_widget("nameEntry").get_text() + addr = self.tree.get_widget("mailEntry").get_text() + if not addr: + addr = self.TO + + if name: + fro = "%s <%s>" % (name, addr) + else: + fro = addr + + commentBuffer = self.tree.get_widget("commentEntry").get_buffer() + text = commentBuffer.get_text(*commentBuffer.get_bounds()) + + if text: + text += "\n\n===========\n" + + text += self.tb + + message = """From: %s +To: %s +Subject: %s +%s""" % ( fro, self.TO, ("[Bug Report] Bug in Portato %s" % VERSION), text) + + self.addr = addr + self.message = message + + def send (self): + debug("Connecting to server") + server = smtplib.SMTP("mail.necoro.eu") + debug("Sending mail") + try: + try: + server.sendmail(self.addr, self.TO, self.message) + except smtplib.SMTPRecipientsRefused, e: + info(_("An error occurred while sending. I think we where greylisted. The error: %s") % e) + info(_("Wait 60 seconds and try again.")) + time.sleep(60) + server.sendmail(self.addr, self.TO, self.message) + debug("Sent") + finally: + server.quit() + + def cb_cancel_clicked (self, *args): + + self.close() + return True + + def cb_send_clicked (self, *args): + self.set_data() + GtkThread(target = self.send, name = "Mail Send Thread").start() self.close() return True -- cgit v1.2.3