61 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/python
 | 
						|
 | 
						|
import argparse
 | 
						|
import sys
 | 
						|
 | 
						|
from email.mime.multipart import MIMEMultipart
 | 
						|
from email.mime.text import MIMEText
 | 
						|
 | 
						|
KNOWN_CONTENT_TYPES = [
 | 
						|
    'text/x-include-once-url',
 | 
						|
    'text/x-include-url',
 | 
						|
    'text/cloud-config-archive',
 | 
						|
    'text/upstart-job',
 | 
						|
    'text/cloud-config',
 | 
						|
    'text/part-handler',
 | 
						|
    'text/x-shellscript',
 | 
						|
    'text/cloud-boothook',
 | 
						|
]
 | 
						|
 | 
						|
 | 
						|
def file_content_type(text):
 | 
						|
    try:
 | 
						|
        filename, content_type = text.split(":", 1)
 | 
						|
        return (open(filename, 'r'), filename, content_type.strip())
 | 
						|
    except:
 | 
						|
        raise argparse.ArgumentError("Invalid value for %r" % (text))
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
    parser = argparse.ArgumentParser()
 | 
						|
    parser.add_argument("-a", "--attach",
 | 
						|
                        dest="files",
 | 
						|
                        type=file_content_type,
 | 
						|
                        action='append',
 | 
						|
                        default=[],
 | 
						|
                        required=True,
 | 
						|
                        metavar="<file>:<content-type>",
 | 
						|
                        help="attach the given file in the specified "
 | 
						|
                             "content type")
 | 
						|
    args = parser.parse_args()
 | 
						|
    sub_messages = []
 | 
						|
    for i, (fh, filename, format_type) in enumerate(args.files):
 | 
						|
        contents = fh.read()
 | 
						|
        sub_message = MIMEText(contents, format_type, sys.getdefaultencoding())
 | 
						|
        sub_message.add_header('Content-Disposition',
 | 
						|
                               'attachment; filename="%s"' % (filename))
 | 
						|
        content_type = sub_message.get_content_type().lower()
 | 
						|
        if content_type not in KNOWN_CONTENT_TYPES:
 | 
						|
            sys.stderr.write(("WARNING: content type %r for attachment %s "
 | 
						|
                             "may be incorrect!\n") % (content_type, i + 1))
 | 
						|
        sub_messages.append(sub_message)
 | 
						|
    combined_message = MIMEMultipart()
 | 
						|
    for msg in sub_messages:
 | 
						|
        combined_message.attach(msg)
 | 
						|
    print(combined_message)
 | 
						|
    return 0
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    sys.exit(main())
 |