mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	 fcc31b44d2
			
		
	
	
		fcc31b44d2
		
	
	
	
	
		
			
			\verbatiminput instead of the verbatim environment -- this does the "right thing" regarding page breaks in long examples for the typeset formats, and has nice benefits for the HTML version as well.
		
			
				
	
	
		
			83 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python
 | |
| 
 | |
| """Unpack a MIME message into a directory of files.
 | |
| 
 | |
| Usage: unpackmail [options] msgfile
 | |
| 
 | |
| Options:
 | |
|     -h / --help
 | |
|         Print this message and exit.
 | |
| 
 | |
|     -d directory
 | |
|     --directory=directory
 | |
|         Unpack the MIME message into the named directory, which will be
 | |
|         created if it doesn't already exist.
 | |
| 
 | |
| msgfile is the path to the file containing the MIME message.
 | |
| """
 | |
| 
 | |
| 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:
 | |
|         # 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(dir, filename), 'wb')
 | |
|         fp.write(part.get_payload(decode=1))
 | |
|         fp.close()
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     main()
 |