85 lines
2.8 KiB
Python
85 lines
2.8 KiB
Python
import logging
|
|
|
|
from extract_msg import constants
|
|
from extract_msg.properties import Properties
|
|
from extract_msg.utils import properHex
|
|
|
|
logger = logging.getLogger(__name__)
|
|
logger.addHandler(logging.NullHandler())
|
|
|
|
|
|
class Attachment(object):
|
|
"""
|
|
Developer version of the `extract_msg.attachment.Attachment` class.
|
|
"""
|
|
def __init__(self, msg, dir_):
|
|
"""
|
|
:param msg: the Message instance that the attachment belongs to.
|
|
:param dir_: the directory inside the msg file where the attachment is located.
|
|
"""
|
|
object.__init__(self)
|
|
self.__msg = msg
|
|
self.__dir = dir_
|
|
self.__props = Properties(
|
|
msg._getStream([self.__dir, '__properties_version1.0']),
|
|
constants.TYPE_ATTACHMENT)
|
|
|
|
# Get attachment data
|
|
if msg.Exists([dir_, '__substg1.0_37010102']):
|
|
self.__type = 'data'
|
|
self.__data = msg._getStream([dir_, '__substg1.0_37010102'])
|
|
elif msg.Exists([dir_, '__substg1.0_3701000D']):
|
|
if (self.__props['37050003'].value & 0x7) != 0x5:
|
|
logger.log(5, 'Printing details of NotImplementedError...')
|
|
logger.log(5, 'dir_ = {}'.format(dir_))
|
|
logger.log(5, 'Writing properties stream to output:')
|
|
logger.log(5, '--------Start-Properties-Stream--------\n' +
|
|
properHex(self.__props.stream) +
|
|
'\n---------End-Properties-Stream---------')
|
|
logger.log(5, 'Writing directory contents to output:')
|
|
logger.log(5, '--------Start-Directory-Content--------\n' +
|
|
'\n'.join([repr(x) for x in msg.listDir(True, True)]))
|
|
logger.log(5, '---------End-Directory-Content---------')
|
|
logger.log(5, 'End of NotImplementedError details')
|
|
else:
|
|
self.__prefix = msg.prefixList + [dir_, '__substg1.0_3701000D']
|
|
self.__type = 'msg'
|
|
self.__data = msg.__class__(msg.path, self.__prefix)
|
|
else:
|
|
raise TypeError('Unknown attachment type.')
|
|
|
|
@property
|
|
def data(self):
|
|
"""
|
|
Returns the attachment data.
|
|
"""
|
|
return self.__data
|
|
|
|
@property
|
|
def dir(self):
|
|
"""
|
|
Returns the directory inside the msg file where the attachment is located.
|
|
"""
|
|
return self.__dir
|
|
|
|
@property
|
|
def msg(self):
|
|
"""
|
|
Returns the Message instance the attachment belongs to.
|
|
"""
|
|
return self.__msg
|
|
|
|
@property
|
|
def props(self):
|
|
"""
|
|
Returns the Properties instance of the attachment.
|
|
"""
|
|
return self.__props
|
|
|
|
@property
|
|
def type(self):
|
|
"""
|
|
Returns the type of the data.
|
|
"""
|
|
return self.__type
|