diff options
Diffstat (limited to 'portato/gui/windows')
-rw-r--r-- | portato/gui/windows/mailinfo.py | 59 |
1 files changed, 58 insertions, 1 deletions
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 |