#!/usr/bin/env python """Scompatta un messaggio MIME in una directory di file. Uso: unpackmail [opzioni] msgfile Opzioni: -h / --help stampa questo messaggio ed esce. -d directory --directory=directory Scompatta il messaggio MIME nella directory indicata che verrā creata se non giā esistente. msgfile č il percorso del file che contiene il messaggio MIME. """ import sys import os import getopt import errno import mimetypes import email def usage(code, msg=''): print >> sys.stderr, __doc__ if msg: print >> sys.stderr, msg sys.exit(code) def main(): try: opts, args = getopt.getopt(sys.argv[1:], 'hd:', ['help', 'directory=']) except getopt.error, msg: usage(1, msg) dir = os.curdir for opt, arg in opts: if opt in ('-h', '--help'): usage(0) elif opt in ('-d', '--directory'): dir = arg try: msgfile = args[0] except IndexError: usage(1) try: os.mkdir(dir) except OSError, e: # Ignora l'errore che evidenzia l'esistenza della directory if e.errno <> errno.EEXIST: raise fp = open(msgfile) msg = email.message_from_file(fp) fp.close() counter = 1 for part in msg.walk(): # multipart/* sono semplici contenitori if part.get_content_maintype() == 'multipart': continue # Le applicazioni dovrebbero veramente controllare a fondo il #+ nome del file fornito, in modo che il messaggio di posta #+ elettronica non possa essere usato per sovrascrivere file #+ importanti filename = part.get_filename() if not filename: ext = mimetypes.guess_extension(part.get_type()) if not ext: # Use a generic bag-of-bits extension ext = '.bin' filename = 'part-%03d%s' % (counter, ext) counter += 1 fp = open(os.path.join(dir, filename), 'wb') fp.write(part.get_payload(decode=1)) fp.close() if __name__ == '__main__': main()