68 lines · 1.8 KB · Python
RawDownload
#!/usr/bin/env python """Unpack a MIME message into a directory of files.""" import osimport sysimport emailimport errnoimport mimetypes from optparse import OptionParser  def main():    parser = OptionParser(usage="""\Unpack a MIME message into a directory of files. Usage: %prog [options] msgfile""")    parser.add_option('-d', '--directory',                      type='string', action='store',                      help="""Unpack the MIME message into the named                      directory, which will be created if it doesn't already                      exist.""")    opts, args = parser.parse_args()    if not opts.directory:        parser.print_help()        sys.exit(1)     try:        msgfile = args[0]    except IndexError:        parser.print_help()        sys.exit(1)     try:        os.mkdir(opts.directory)    except OSError, e:        # Ignore directory exists error        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/* are just containers        if part.get_content_maintype() == 'multipart':            continue        # Applications should really sanitize the given filename so that an        # email message can't be used to overwrite important files        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(opts.directory, filename), 'wb')        fp.write(part.get_payload(decode=True))        fp.close()  if __name__ == '__main__':    main()