diff options
Diffstat (limited to 'Doc/includes/email-unpack.py')
-rw-r--r-- | Doc/includes/email-unpack.py | 53 |
1 files changed, 34 insertions, 19 deletions
diff --git a/Doc/includes/email-unpack.py b/Doc/includes/email-unpack.py index c8cb0be..a8f712d 100644 --- a/Doc/includes/email-unpack.py +++ b/Doc/includes/email-unpack.py @@ -1,34 +1,48 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python """Unpack a MIME message into a directory of files.""" import os +import sys import email +import errno import mimetypes -from email.policy import default - -from argparse import ArgumentParser +from optparse import OptionParser def main(): - parser = ArgumentParser(description="""\ + parser = OptionParser(usage="""\ Unpack a MIME message into a directory of files. + +Usage: %prog [options] msgfile """) - parser.add_argument('-d', '--directory', required=True, - help="""Unpack the MIME message into the named - directory, which will be created if it doesn't already - exist.""") - parser.add_argument('msgfile') - args = parser.parse_args() + 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) - with open(args.msgfile, 'rb') as fp: - msg = email.message_from_binary_file(fp, policy=default) + try: + msgfile = args[0] + except IndexError: + parser.print_help() + sys.exit(1) try: - os.mkdir(args.directory) - except FileExistsError: - pass + os.mkdir(opts.directory) + except OSError as 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(): @@ -43,10 +57,11 @@ Unpack a MIME message into a directory of files. if not ext: # Use a generic bag-of-bits extension ext = '.bin' - filename = f'part-{counter:03d}{ext}' + filename = 'part-%03d%s' % (counter, ext) counter += 1 - with open(os.path.join(args.directory, filename), 'wb') as fp: - fp.write(part.get_payload(decode=True)) + fp = open(os.path.join(opts.directory, filename), 'wb') + fp.write(part.get_payload(decode=True)) + fp.close() if __name__ == '__main__': |