Esempio n. 1
0
def _parse_attachment(message_part):
    content_disposition = message_part.get("Content-Disposition", None)
    if content_disposition:
        dispositions = content_disposition.strip().split(";")
        if content_disposition and dispositions[0].lower() == "attachment":
            file_data = message_part.get_payload(decode=True)
            attachment = BytesIO(file_data)
            attachment.content_type = message_part.get_content_type()
            attachment.size = len(file_data)
            attachment.name = None
            attachment.create_date = None
            attachment.mod_date = None
            attachment.read_date = None

            for param in dispositions[1:]:
                name, value = param.strip().split("=")
                name = name.lower()

                if name == "filename":
                    attachment.name = value
                elif name == "create-date":
                    attachment.create_date = value  # FIXME: datetime
                elif name == "modification-date":
                    attachment.mod_date = value  # FIXME: datetime
                elif name == "read-date":
                    attachment.read_date = value  # FIXME: datetime

            attachment.checksum = _md5(attachment)

            return attachment

    return None