move write-mime-multipart into cloud-utils package
This commit is contained in:
@@ -1,108 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
# largely taken from python examples
|
|
||||||
# http://docs.python.org/library/email-examples.html
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import smtplib
|
|
||||||
# For guessing MIME type based on file name extension
|
|
||||||
import mimetypes
|
|
||||||
|
|
||||||
from email import encoders
|
|
||||||
from email.message import Message
|
|
||||||
from email.mime.base import MIMEBase
|
|
||||||
from email.mime.multipart import MIMEMultipart
|
|
||||||
from email.mime.text import MIMEText
|
|
||||||
from optparse import OptionParser
|
|
||||||
import gzip
|
|
||||||
|
|
||||||
COMMASPACE = ', '
|
|
||||||
|
|
||||||
starts_with_mappings={
|
|
||||||
'#include' : 'text/x-include-url',
|
|
||||||
'#!' : 'text/x-shellscript',
|
|
||||||
'#cloud-config' : 'text/cloud-config',
|
|
||||||
'#upstart-job' : 'text/upstart-job',
|
|
||||||
'#part-handler' : 'text/part-handler',
|
|
||||||
'#cloud-boothook' : 'text/cloud-boothook'
|
|
||||||
}
|
|
||||||
|
|
||||||
def get_type(fname,deftype):
|
|
||||||
f = file(fname,"rb")
|
|
||||||
line = f.readline()
|
|
||||||
f.close()
|
|
||||||
rtype = deftype
|
|
||||||
for str,mtype in starts_with_mappings.items():
|
|
||||||
if line.startswith(str):
|
|
||||||
rtype = mtype
|
|
||||||
break
|
|
||||||
return(rtype)
|
|
||||||
|
|
||||||
def main():
|
|
||||||
outer = MIMEMultipart()
|
|
||||||
#outer['Subject'] = 'Contents of directory %s' % os.path.abspath(directory)
|
|
||||||
#outer['To'] = COMMASPACE.join(opts.recipients)
|
|
||||||
#outer['From'] = opts.sender
|
|
||||||
#outer.preamble = 'You will not see this in a MIME-aware mail reader.\n'
|
|
||||||
|
|
||||||
parser = OptionParser()
|
|
||||||
|
|
||||||
parser.add_option("-o", "--output", dest="output",
|
|
||||||
help="write output to FILE [default %default]", metavar="FILE",
|
|
||||||
default="-")
|
|
||||||
parser.add_option("-z", "--gzip", dest="compress", action="store_true",
|
|
||||||
help="compress output", default=False)
|
|
||||||
parser.add_option("-d", "--default", dest="deftype",
|
|
||||||
help="default mime type [default %default]", default="text/plain")
|
|
||||||
parser.add_option("--delim", dest="delim",
|
|
||||||
help="delimiter [default %default]", default=":")
|
|
||||||
|
|
||||||
(options, args) = parser.parse_args()
|
|
||||||
|
|
||||||
if (len(args)) < 1:
|
|
||||||
parser.error("Must give file list see '--help'")
|
|
||||||
|
|
||||||
for arg in args:
|
|
||||||
t = arg.split(options.delim, 1)
|
|
||||||
path=t[0]
|
|
||||||
if len(t) > 1:
|
|
||||||
mtype = t[1]
|
|
||||||
else:
|
|
||||||
mtype = get_type(path,options.deftype)
|
|
||||||
|
|
||||||
maintype, subtype = mtype.split('/', 1)
|
|
||||||
if maintype == 'text':
|
|
||||||
fp = open(path)
|
|
||||||
# Note: we should handle calculating the charset
|
|
||||||
msg = MIMEText(fp.read(), _subtype=subtype)
|
|
||||||
fp.close()
|
|
||||||
else:
|
|
||||||
fp = open(path, 'rb')
|
|
||||||
msg = MIMEBase(maintype, subtype)
|
|
||||||
msg.set_payload(fp.read())
|
|
||||||
fp.close()
|
|
||||||
# Encode the payload using Base64
|
|
||||||
encoders.encode_base64(msg)
|
|
||||||
|
|
||||||
# Set the filename parameter
|
|
||||||
msg.add_header('Content-Disposition', 'attachment',
|
|
||||||
filename=os.path.basename(path))
|
|
||||||
|
|
||||||
outer.attach(msg)
|
|
||||||
|
|
||||||
if options.output is "-":
|
|
||||||
ofile = sys.stdout
|
|
||||||
else:
|
|
||||||
ofile = file(options.output,"wb")
|
|
||||||
|
|
||||||
if options.compress:
|
|
||||||
gfile = gzip.GzipFile(fileobj=ofile, filename = options.output )
|
|
||||||
gfile.write(outer.as_string())
|
|
||||||
gfile.close()
|
|
||||||
else:
|
|
||||||
ofile.write(outer.as_string())
|
|
||||||
|
|
||||||
ofile.close()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
Reference in New Issue
Block a user