Exemple #1
0
 def _showIspdb(self, arguments):
     try:
         state = FAILURE
         email = None
         msg = "Wizard Loading ..."
         close = True
         for argument in arguments:
             if argument.Name == 'Close':
                 close = argument.Value
         wizard = Wizard(self._ctx, g_ispdb_page, True, self._parent)
         controller = IspdbController(self._ctx, wizard, self.DataSource,
                                      close)
         arguments = (g_ispdb_paths, controller)
         wizard.initialize(arguments)
         msg += " Done ..."
         if wizard.execute() == OK:
             state = SUCCESS
             email = controller.Model.Email
             msg += " Retrieving SMTP configuration OK..."
         controller.dispose()
         print(msg)
         logMessage(self._ctx, INFO, msg, 'SmtpDispatch', '_showIspdb()')
         return state, email
     except Exception as e:
         msg = "Error: %s - %s" % (e, traceback.print_exc())
         print(msg)
Exemple #2
0
    def __init__(self, ctx):
        try:
            print("WizardMailer.__init__() 1")
            self.ctx = ctx
            msg = "Loading ... Done"
            #component = createService(self.ctx, 'com.sun.star.frame.Desktop').CurrentComponent
            #document = component.CurrentController.Frame
            #dispatcher = createService(self.ctx, 'com.sun.star.frame.DispatchHelper')
            #dispatcher.executeDispatch(document, '.uno:NewWindow', '', 0, ())
            #package = createService(self.ctx, 'com.sun.star.deployment.ui.PackageManagerDialog')

            #wizard = createService(self.ctx, 'com.sun.star.ui.dialogs.Wizard')
            wizard = Wizard(self.ctx, g_wizard_page)
            print("WizardMailer.__init__() 2")
            controller = WizardController(self.ctx, wizard)
            #arguments = ((uno.Any('[]short', g_wizard_paths), controller), )
            print("WizardMailer.__init__() 3")
            arguments = (g_wizard_paths, controller)
            #uno.invoke(wizard, 'initialize', arguments)
            wizard.initialize(arguments)
            print("WizardMailer.__init__() 4")
            self._stringResource = getStringResource(self.ctx, g_identifier,
                                                     g_extension)
            logMessage(self.ctx, INFO, msg, 'WizardMailer', '__init__()')
            print(msg)
            #mri = createService(self.ctx, 'mytools.Mri')
            #mri.inspect(package)
            wizard.execute()
        except Exception as e:
            print("WizardMailer.__init__() ERROR: %s - %s" %
                  (e, traceback.print_exc()))
 def __init__(self, ctx):
     if isDebugMode():
         msg = getMessage(ctx, g_message, 111)
         logMessage(ctx, INFO, msg, 'MailServiceProvider', '__init__()')
     self._ctx = ctx
     if isDebugMode():
         msg = getMessage(ctx, g_message, 112)
         logMessage(ctx, INFO, msg, 'MailServiceProvider', '__init__()')
 def _clearLog(self, dialog):
     try:
         clearLogger()
         logMessage(self.ctx, INFO, "ClearingLog ... Done", 'OptionsDialog',
                    '_doClearLog()')
         url = getLoggerUrl(self.ctx)
         self._setDialogText(dialog, url)
     except Exception as e:
         msg = "Error: %s - %s" % (e, traceback.print_exc())
         logMessage(self.ctx, SEVERE, msg, "OptionsDialog", "_doClearLog()")
Exemple #5
0
 def onActivatePage(self, pageid):
     msg = "PageId: %s..." % pageid
     title = self._model.getPageTitle(pageid)
     self._wizard.setTitle(title)
     backward = uno.getConstantByName(
         'com.sun.star.ui.dialogs.WizardButton.PREVIOUS')
     forward = uno.getConstantByName(
         'com.sun.star.ui.dialogs.WizardButton.NEXT')
     finish = uno.getConstantByName(
         'com.sun.star.ui.dialogs.WizardButton.FINISH')
     msg += " Done"
     logMessage(self._ctx, INFO, msg, 'WizardController',
                'onActivatePage()')
 def disconnect(self):
     if self.isConnected():
         if isDebugMode():
             msg = getMessage(self._ctx, g_message, 361)
             logMessage(self._ctx, INFO, msg, 'ImapService', 'disconnect()')
         self._server.logout()
         self._server = None
         self._context = None
         for listener in self._listeners:
             listener.disconnected(self._notify)
         if isDebugMode():
             msg = getMessage(self._ctx, g_message, 362)
             logMessage(self._ctx, INFO, msg, 'ImapService', 'disconnect()')
 def connect(self, context, authenticator):
     if isDebugMode():
         msg = getMessage(self._ctx, g_message, 221)
         logMessage(self._ctx, INFO, msg, 'SmtpService', 'connect()')
     if self.isConnected():
         raise AlreadyConnectedException()
     if not hasInterface(context, 'com.sun.star.uno.XCurrentContext'):
         raise IllegalArgumentException()
     if not hasInterface(authenticator, 'com.sun.star.mail.XAuthenticator'):
         raise IllegalArgumentException()
     server = context.getValueByName('ServerName')
     error = self._setServer(context, server)
     if error is not None:
         if isDebugMode():
             msg = getMessage(self._ctx, g_message, 222, error.Message)
             logMessage(self._ctx, SEVERE, msg, 'SmtpService', 'connect()')
         raise error
     authentication = context.getValueByName('AuthenticationType').title()
     if authentication != 'None':
         error = self._doLogin(authentication, authenticator, server)
         if error is not None:
             if isDebugMode():
                 msg = getMessage(self._ctx, g_message, 223, error.Message)
                 logMessage(self._ctx, SEVERE, msg, 'SmtpService',
                            'connect()')
             raise error
     self._context = context
     for listener in self._listeners:
         listener.connected(self._notify)
     if isDebugMode():
         msg = getMessage(self._ctx, g_message, 224)
         logMessage(self._ctx, INFO, msg, 'SmtpService', 'connect()')
 def __init__(self, ctx):
     if isDebugMode():
         msg = getMessage(ctx, g_message, 311)
         logMessage(ctx, INFO, msg, 'ImapService', '__init__()')
     self._ctx = ctx
     self._listeners = []
     self._supportedconnection = ('Insecure', 'Ssl', 'Tls')
     self._supportedauthentication = ('None', 'Login', 'OAuth2')
     self._server = None
     self._context = None
     self._notify = EventObject(self)
     if isDebugMode():
         msg = getMessage(ctx, g_message, 312)
         logMessage(ctx, INFO, msg, 'ImapService', '__init__()')
Exemple #9
0
 def _showMerger(self):
     try:
         msg = "Wizard Loading ..."
         wizard = Wizard(self._ctx, g_merger_page, True, self._parent)
         controller = MergerController(self._ctx, wizard, self.DataSource)
         arguments = (g_merger_paths, controller)
         wizard.initialize(arguments)
         msg += " Done ..."
         if wizard.execute() == OK:
             controller.saveGrids()
             msg += " Merging SMTP email OK..."
         controller.dispose()
         print(msg)
         logMessage(self._ctx, INFO, msg, 'SmtpDispatch', '_showMerger()')
     except Exception as e:
         msg = "Error: %s - %s" % (e, traceback.print_exc())
         print(msg)
 def connect(self, context, authenticator):
     if isDebugMode():
         msg = getMessage(self._ctx, g_message, 321)
         logMessage(self._ctx, INFO, msg, 'ImapService', 'connect()')
     if self.isConnected():
         raise AlreadyConnectedException()
     if not hasInterface(context, 'com.sun.star.uno.XCurrentContext'):
         raise IllegalArgumentException()
     if not hasInterface(authenticator, 'com.sun.star.mail.XAuthenticator'):
         raise IllegalArgumentException()
     self._context = context
     server = context.getValueByName('ServerName')
     port = context.getValueByName('Port')
     timeout = context.getValueByName('Timeout')
     connection = context.getValueByName('ConnectionType').title()
     authentication = context.getValueByName('AuthenticationType').title()
     if connection == 'Ssl':
         self._server = imapclient.IMAPClient(server,
                                              port=port,
                                              ssl=True,
                                              timeout=timeout)
     else:
         self._server = imapclient.IMAPClient(server,
                                              port=port,
                                              ssl=False,
                                              timeout=timeout)
     if connection == 'Tls':
         self._server.starttls()
     if authentication == 'Login':
         user = authenticator.getUserName()
         password = authenticator.getPassword()
         code = self._server.login(user, password)
         print("ImapService.connect() 1: %s" % code)
     elif authentication == 'Oauth2':
         user = authenticator.getUserName()
         token = getOAuth2Token(self._ctx, self, server, user)
         code = self._server.oauth2_login(user, token)
         print("ImapService.connect() 2: %s" % code)
     for listener in self._listeners:
         listener.connected(self._notify)
     if isDebugMode():
         msg = getMessage(self._ctx, g_message, 324)
         logMessage(self._ctx, INFO, msg, 'ImapService', 'connect()')
 def createPage(self, parent, pageid):
     try:
         msg = "PageId: %s ..." % pageid
         if pageid == 1:
             page = WizardPage1(self._ctx, self._wizard, self._model,
                                pageid, parent)
         elif pageid == 2:
             page = WizardPage2(self._ctx, self._wizard, self._model,
                                pageid, parent)
         elif pageid == 3:
             page = WizardPage3(self._ctx, self._wizard, self._model,
                                pageid, parent)
         msg += " Done"
         logMessage(self._ctx, INFO, msg, 'WizardController',
                    'createPage()')
         return page
     except Exception as e:
         msg = "Error: %s - %s" % (e, traceback.print_exc())
         print(msg)
 def _doLogin(self, authentication, authenticator, server):
     error = None
     user = authenticator.getUserName()
     if isDebugMode():
         msg = getMessage(self._ctx, g_message, 241, authentication)
         logMessage(self._ctx, INFO, msg, 'SmtpService', '_doLogin()')
     try:
         if authentication == 'Login':
             password = authenticator.getPassword()
             if sys.version < '3':  # fdo#59249 i#105669 Python 2 needs "ascii"
                 user = user.encode('ascii')
                 password = password.encode('ascii')
             code, reply = _getReply(*self._server.login(user, password))
             if isDebugMode():
                 pwd = '*' * len(password)
                 msg = getMessage(self._ctx, g_message, 242,
                                  (user, pwd, code, reply))
                 logMessage(self._ctx, INFO, msg, 'SmtpService',
                            '_doLogin()')
         elif authentication == 'Oauth2':
             token = _getToken(self._ctx, self, server, user, True)
             self._server.ehlo_or_helo_if_needed()
             code, reply = _getReply(
                 *self._server.docmd('AUTH', 'XOAUTH2 %s' % token))
             if code != 235:
                 msg = getMessage(self._ctx, g_message, 244, reply)
                 error = AuthenticationFailedException(msg, self)
             if isDebugMode():
                 msg = getMessage(self._ctx, g_message, 243, (code, reply))
                 logMessage(self._ctx, INFO, msg, 'SmtpService',
                            '_doLogin()')
     except Exception as e:
         msg = getMessage(self._ctx, g_message, 244, getExceptionMessage(e))
         error = AuthenticationFailedException(msg, self)
     if isDebugMode() and error is None:
         msg = getMessage(self._ctx, g_message, 245,
                          (authentication, reply))
         logMessage(self._ctx, INFO, msg, 'SmtpService', '_doLogin()')
     return error
 def create(self, mailtype):
     if isDebugMode():
         msg = getMessage(self._ctx, g_message, 121, mailtype.value)
         logMessage(self._ctx, INFO, msg, 'MailServiceProvider', 'create()')
     if mailtype == SMTP:
         service = SmtpService(self._ctx)
     elif mailtype == POP3:
         service = Pop3Service(self._ctx)
     elif mailtype == IMAP:
         service = ImapService(self._ctx)
     else:
         e = self._getNoMailServiceProviderException(123, mailtype)
         logMessage(self._ctx, SEVERE, e.Message, 'MailServiceProvider',
                    'create()')
         raise e
     if isDebugMode():
         msg = getMessage(self._ctx, g_message, 122, mailtype.value)
         logMessage(self._ctx, INFO, msg, 'MailServiceProvider', 'create()')
     return service
 def sendMailMessage(self, message):
     msg = _getMessage(self._ctx, message)
     recipients = _getRecipients(message)
     error = None
     try:
         refused = self._server.sendmail(message.SenderAddress, recipients,
                                         msg.as_string())
     except smtplib.SMTPSenderRefused as e:
         msg = getMessage(self._ctx, g_message, 252,
                          (message.Subject, getExceptionMessage(e)))
         error = MailException(msg, self)
     except smtplib.SMTPRecipientsRefused as e:
         msg = getMessage(self._ctx, g_message, 253,
                          (message.Subject, getExceptionMessage(e)))
         # TODO: return SendMailMessageFailedException in place of MailException
         # TODO: error = SendMailMessageFailedException(msg, self)
         error = MailException(msg, self)
     except smtplib.SMTPDataError as e:
         msg = getMessage(self._ctx, g_message, 253,
                          (message.Subject, getExceptionMessage(e)))
         error = MailException(msg, self)
     except Exception as e:
         msg = getMessage(self._ctx, g_message, 253,
                          (message.Subject, getExceptionMessage(e)))
         error = MailException(msg, self)
     else:
         if len(refused) > 0:
             for address, result in refused.items():
                 code, reply = _getReply(*result)
                 msg = getMessage(self._ctx, g_message, 254,
                                  (message.Subject, address, code, reply))
                 logMessage(self._ctx, SEVERE, msg, 'SmtpService',
                            'sendMailMessage()')
         elif isDebugMode():
             msg = getMessage(self._ctx, g_message, 255, message.Subject)
             logMessage(self._ctx, INFO, msg, 'SmtpService',
                        'sendMailMessage()')
     if error is not None:
         logMessage(self._ctx, SEVERE, error.Message, 'SmtpService',
                    'sendMailMessage()')
         raise error
Exemple #15
0
 def __init__(self, ctx):
     self._ctx = ctx
     self._frame = None
     logMessage(self._ctx, INFO, "Loading ... Done", 'SmtpDispatcher',
                '__init__()')
 def _setServer(self, context, host):
     error = None
     port = context.getValueByName('Port')
     timeout = context.getValueByName('Timeout')
     connection = context.getValueByName('ConnectionType').title()
     if isDebugMode():
         msg = getMessage(self._ctx, g_message, 231, connection)
         logMessage(self._ctx, INFO, msg, 'SmtpService', '_setServer()')
     try:
         if connection == 'Ssl':
             if isDebugMode():
                 msg = getMessage(self._ctx, g_message, 232, timeout)
                 logMessage(self._ctx, INFO, msg, 'SmtpService',
                            '_setServer()')
             server = smtplib.SMTP_SSL(timeout=timeout)
         else:
             if isDebugMode():
                 msg = getMessage(self._ctx, g_message, 233, timeout)
                 logMessage(self._ctx, INFO, msg, 'SmtpService',
                            '_setServer()')
             server = smtplib.SMTP(timeout=timeout)
         if isDebugMode():
             server.set_debuglevel(1)
         code, reply = _getReply(*server.connect(host=host, port=port))
         if isDebugMode():
             msg = getMessage(self._ctx, g_message, 234,
                              (host, port, code, reply))
             logMessage(self._ctx, INFO, msg, 'SmtpService', '_setServer()')
         if code != 220:
             msg = getMessage(self._ctx, g_message, 236, reply)
             error = ConnectException(msg, self)
         elif connection == 'Tls':
             code, reply = _getReply(*server.starttls())
             if isDebugMode():
                 msg = getMessage(self._ctx, g_message, 235, (code, reply))
                 logMessage(self._ctx, INFO, msg, 'SmtpService',
                            '_setServer()')
             if code != 220:
                 msg = getMessage(self._ctx, g_message, 236, reply)
                 error = ConnectException(msg, self)
     except smtplib.SMTPConnectError as e:
         msg = getMessage(self._ctx, g_message, 236, getExceptionMessage(e))
         error = ConnectException(msg, self)
     except smtplib.SMTPException as e:
         msg = getMessage(self._ctx, g_message, 236, getExceptionMessage(e))
         error = UnknownHostException(msg, self)
     except Exception as e:
         msg = getMessage(self._ctx, g_message, 236, getExceptionMessage(e))
         error = MailException(msg, self)
     else:
         self._server = server
     if isDebugMode() and error is None:
         msg = getMessage(self._ctx, g_message, 237, (connection, reply))
         logMessage(self._ctx, INFO, msg, 'SmtpService', '_setServer()')
     return error
def _getMessage(ctx, message):
    COMMASPACE = ', '
    sendermail = message.SenderAddress
    sendername = message.SenderName
    subject = message.Subject
    if isDebugMode():
        msg = getMessage(ctx, g_message, 251, subject)
        logMessage(ctx, INFO, msg, 'SmtpService', 'sendMailMessage()')
    textmsg = Message()
    content = message.Body
    flavors = content.getTransferDataFlavors()
    #Use first flavor that's sane for an email body
    for flavor in flavors:
        if flavor.MimeType.find('text/html') != -1 or flavor.MimeType.find(
                'text/plain') != -1:
            textbody = content.getTransferData(flavor)
            if len(textbody):
                mimeEncoding = re.sub('charset=.*', 'charset=UTF-8',
                                      flavor.MimeType)
                if mimeEncoding.find('charset=UTF-8') == -1:
                    mimeEncoding = mimeEncoding + '; charset=UTF-8'
                textmsg['Content-Type'] = mimeEncoding
                textmsg['MIME-Version'] = '1.0'
                try:
                    #it's a string, get it as utf-8 bytes
                    textbody = textbody.encode('utf-8')
                except:
                    #it's a bytesequence, get raw bytes
                    textbody = textbody.value
                if sys.version >= '3':
                    if sys.version_info.minor < 3 or (
                            sys.version_info.minor == 3
                            and sys.version_info.micro <= 1):
                        #http://stackoverflow.com/questions/9403265/how-do-i-use-python-3-2-email-module-to-send-unicode-messages-encoded-in-utf-8-w
                        #see http://bugs.python.org/16564, etc. basically it now *seems* to be all ok
                        #in python 3.3.2 onwards, but a little busted in 3.3.0
                        textbody = textbody.decode('iso8859-1')
                    else:
                        textbody = textbody.decode('utf-8')
                    c = Charset('utf-8')
                    c.body_encoding = QP
                    textmsg.set_payload(textbody, c)
                else:
                    textmsg.set_payload(textbody)
            break
    if message.hasAttachments():
        msg = MIMEMultipart()
        msg.epilogue = ''
        msg.attach(textmsg)
    else:
        msg = textmsg
    header = Header(sendername, 'utf-8')
    header.append('<' + sendermail + '>', 'us-ascii')
    msg['Subject'] = subject
    msg['From'] = header
    msg['To'] = COMMASPACE.join(message.getRecipients())
    msg['Message-ID'] = message.MessageId
    if message.ThreadId:
        msg['References'] = message.ThreadId
    if message.hasCcRecipients():
        msg['Cc'] = COMMASPACE.join(message.getCcRecipients())
    if message.ReplyToAddress != '':
        msg['Reply-To'] = message.ReplyToAddress
    xmailer = "LibreOffice / OpenOffice via smtpMailerOOo extention"
    try:
        configuration = getConfiguration(ctx, '/org.openoffice.Setup/Product')
        name = configuration.getByName('ooName')
        version = configuration.getByName('ooSetupVersion')
        xmailer = "%s %s via smtpMailerOOo extention" % (name, version)
    except:
        pass
    msg['X-Mailer'] = xmailer
    msg['Date'] = formatdate(localtime=True)
    for attachment in message.getAttachments():
        content = attachment.Data
        flavors = content.getTransferDataFlavors()
        flavor = flavors[0]
        ctype = flavor.MimeType
        maintype, subtype = ctype.split('/', 1)
        msgattachment = MIMEBase(maintype, subtype)
        data = content.getTransferData(flavor)
        msgattachment.set_payload(data.value)
        encode_base64(msgattachment)
        fname = attachment.ReadableName
        try:
            msgattachment.add_header('Content-Disposition', 'attachment', \
                filename=fname)
        except:
            msgattachment.add_header('Content-Disposition', 'attachment', \
                filename=('utf-8','',fname))
        msg.attach(msgattachment)
    return msg
Exemple #18
0
 def queryClosing(self, source, ownership):
     self.DataBase.shutdownDataBase()
     msg = "DataBase  '%s' closing ... Done" % self._dbname
     logMessage(self._ctx, INFO, msg, 'DataSource', 'queryClosing()')
     print(msg)
Exemple #19
0
 def __init__(self, ctx):
     self.ctx = ctx
     self.stringResource = getStringResource(self.ctx, g_identifier,
                                             g_extension, 'OptionsDialog')
     logMessage(self.ctx, INFO, "Loading ... Done", 'OptionsDialog',
                '__init__()')