def validate(msg): validation_dict = { 'input': { 'class': get_full_class_name(msg), # Get the full name of the class 'has_len': has_len(msg), # Does the input have a __len__ attribute? 'len': len(msg) if has_len(msg) else None, # If input has __len__, put the value here }, 'olefile': { 'valid': olefile.isOleFile(msg), }, } if validation_dict['olefile']['valid']: validation_dict['message'] = { 'initializes': False, } try: msg_instance = Message(msg) except NotImplementedError: # Should we have a special procedure for handling it if we get "not implemented"? pass except: pass else: validation_dict['message']['initializes'] = True validation_dict['message']['msg'] = validate_msg(msg_instance) return validation_dict
def __init__(self, path, prefix=''): """ :param path: path to the msg file in the system or is the raw msg file. :param prefix: used for extracting embedded msg files inside the main one. Do not set manually unless you know what you are doing. """ logger.log(5, 'prefix: {}'.format(prefix)) self.__path = path olefile.OleFileIO.__init__(self, path) prefixl = [] if prefix != '': if not isinstance(prefix, stri): try: prefix = '/'.join(prefix) except: raise TypeError( 'Invalid prefix type: ' + str(type(prefix)) + '\n(This was probably caused by you setting it manually).' ) prefix = prefix.replace('\\', '/') g = prefix.split("/") if g[-1] == '': g.pop() prefixl = g if prefix[-1] != '/': prefix += '/' filename = self._getStringStream(prefixl[:-1] + ['__substg1.0_3001'], prefix=False) self.__prefix = prefix self.__prefixList = prefixl logger.log( 5, ':param path: has __len__ attribute?: {}'.format(has_len(path))) if has_len(path): if len(path) < 1536: self.filename = path logger.log( 5, ':param path: length is {}; Using :param path: as file path' .format(len(path))) else: logger.log( 5, ':param path: length is {}; Using :param path: as raw msg stream' .format(len(path))) self.filename = None self.mainProperties recipientDirs = [] for dir_ in self.listDir(): if dir_[len(self.__prefixList)].startswith('__recip') and\ dir_[len(self.__prefixList)] not in recipientDirs: recipientDirs.append(dir_[len(self.__prefixList)]) self.recipients self.attachments self.date
def __init__(self, path, prefix=''): """ :param path: path to the msg file in the system or is the raw msg file. :param prefix: used for extracting embedded msg files inside the main one. Do not set manually unless you know what you are doing. """ logger.log(5, 'prefix: {}'.format(prefix)) self.__path = path olefile.OleFileIO.__init__(self, path) prefixl = [] if prefix != '': if not isinstance(prefix, stri): try: prefix = '/'.join(prefix) except: raise TypeError('Invalid prefix type: ' + str(type(prefix)) + '\n(This was probably caused by you setting it manually).') prefix = prefix.replace('\\', '/') g = prefix.split("/") if g[-1] == '': g.pop() prefixl = g if prefix[-1] != '/': prefix += '/' filename = self._getStringStream(prefixl[:-1] + ['__substg1.0_3001'], prefix=False) self.__prefix = prefix self.__prefixList = prefixl logger.log(5, ':param path: has __len__ attribute?: {}'.format(has_len(path))) if has_len(path): if len(path) < 1536: self.filename = path logger.log(5, ':param path: length is {}; Using :param path: as file path'.format(len(path))) else: logger.log(5, ':param path: length is {}; Using :param path: as raw msg stream'.format(len(path))) self.filename = None self.mainProperties recipientDirs = [] for dir_ in self.listDir(): if dir_[len(self.__prefixList)].startswith('__recip') and\ dir_[len(self.__prefixList)] not in recipientDirs: recipientDirs.append(dir_[len(self.__prefixList)]) self.recipients self.attachments self.date
def __init__(self, path, prefix='', attachmentClass=Attachment, filename=None): """ :param path: path to the msg file in the system or is the raw msg file. :param prefix: used for extracting embeded msg files inside the main one. Do not set manually unless you know what you are doing. :param attachmentClass: optional, the class the Message object will use for attachments. You probably should not change this value unless you know what you are doing. :param filename: optional, the filename to be used by default when saving. """ # WARNING DO NOT MANUALLY MODIFY PREFIX. Let the program set it. if debug: # DEBUG print('DEBUG: prefix: {}'.format(prefix)) self.__path = path self.__attachmentClass = attachmentClass olefile.OleFileIO.__init__(self, path) prefixl = [] if prefix != '': if not isinstance(prefix, stri): try: prefix = '/'.join(prefix) except: raise TypeError('Invalid prefix type: ' + str(type(prefix)) + '\n(This was probably caused by you setting it manually).') prefix = prefix.replace('\\', '/') g = prefix.split("/") if g[-1] == '': g.pop() prefixl = g if prefix[-1] != '/': prefix += '/' filename = self._getStringStream(prefixl[:-1] + ['__substg1.0_3001'], prefix=False) self.__prefix = prefix self.__prefixList = prefixl if filename != None: self.filename = filename elif has_len(path): if len(path) < 1536: self.filename = path else: self.filename = None else: self.filename = None # Initialize properties in the order that is least likely to cause bugs. # TODO have each function check for initialization of needed data so these # lines will be unnecessary. self.mainProperties self.header self.recipients self.attachments self.to self.cc self.sender self.date self.__crlf = '\n' # This variable keeps track of what the new line character should be self.body
def __init__(self, path, prefix='', attachmentClass=Attachment, filename=None, overrideEncoding=None): """ :param path: path to the msg file in the system or is the raw msg file. :param prefix: used for extracting embeded msg files inside the main one. Do not set manually unless you know what you are doing. :param attachmentClass: optional, the class the MSGFile object will use for attachments. You probably should not change this value unless you know what you are doing. :param filename: optional, the filename to be used by default when saving. :param overrideEncoding: optional, an encoding to use instead of the one specified by the msg file. Do not report encoding errors caused by this. """ # WARNING DO NOT MANUALLY MODIFY PREFIX. Let the program set it. self.__path = path self.__attachmentClass = attachmentClass if overrideEncoding is not None: codecs.lookup(overrideEncoding) logger.warning( 'You have chosen to override the string encoding. Do not report encoding erros caused by this.' ) self.__stringEncoding = overrideEncoding self.__overrideEncoding = overrideEncoding try: olefile.OleFileIO.__init__(self, path) except IOError as e: # py2 and py3 compatible logger.error(e) if str(e) == 'not an OLE2 structured storage file': raise InvalidFileFormat(e) else: raise prefixl = [] tmp_condition = prefix != '' if tmp_condition: try: prefix = inputToString(prefix, 'utf-8') except: try: prefix = '/'.join(prefix) except: raise TypeError( 'Invalid prefix type: ' + str(type(prefix)) + '\n(This was probably caused by you setting it manually).' ) prefix = prefix.replace('\\', '/') g = prefix.split('/') if g[-1] == '': g.pop() prefixl = g if prefix[-1] != '/': prefix += '/' self.__prefix = prefix self.__prefixList = prefixl if tmp_condition: filename = self._getStringStream(prefixl[:-1] + ['__substg1.0_3001'], prefix=False) if filename is not None: self.filename = filename elif has_len(path): if len(path) < 1536: self.filename = path else: self.filename = None else: self.filename = None
def __init__(self, path, prefix='', attachmentClass=Attachment, filename=None): """ :param path: path to the msg file in the system or is the raw msg file. :param prefix: used for extracting embeded msg files inside the main one. Do not set manually unless you know what you are doing. :param attachmentClass: optional, the class the Message object will use for attachments. You probably should not change this value unless you know what you are doing. :param filename: optional, the filename to be used by default when saving. """ # WARNING DO NOT MANUALLY MODIFY PREFIX. Let the program set it. self.__path = path self.__attachmentClass = attachmentClass try: olefile.OleFileIO.__init__(self, path) except IOError as e: # py2 and py3 compatible logger.error(e) if e.message == 'not an OLE2 structured storage file': raise InvalidFileFormat(e) else: raise prefixl = [] tmp_condition = prefix != '' if tmp_condition: if not isinstance(prefix, stri): try: prefix = '/'.join(prefix) except: raise TypeError('Invalid prefix type: ' + str(type(prefix)) + '\n(This was probably caused by you setting it manually).') prefix = prefix.replace('\\', '/') g = prefix.split("/") if g[-1] == '': g.pop() prefixl = g if prefix[-1] != '/': prefix += '/' self.__prefix = prefix self.__prefixList = prefixl if tmp_condition: filename = self._getStringStream(prefixl[:-1] + ['__substg1.0_3001'], prefix=False) if filename is not None: self.filename = filename elif has_len(path): if len(path) < 1536: self.filename = path else: self.filename = None else: self.filename = None # Initialize properties in the order that is least likely to cause bugs. # TODO have each function check for initialization of needed data so these # lines will be unnecessary. self.mainProperties self.header self.recipients self.attachments self.to self.cc self.sender self.date self.__crlf = '\n' # This variable keeps track of what the new line character should be self.body