X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=mimedecode%2Fmimedecode.py;h=c23a88fccbda20d2520a11c3d61e4d59a608a52d;hb=HEAD;hp=4ca2f25d2d061dba16294d67ab8018ea00be2b37;hpb=8d2e459bcceaea1530857ab58411e2e2426743a1;p=mimedecode.git diff --git a/mimedecode/mimedecode.py b/mimedecode/mimedecode.py index 4ca2f25..c23a88f 100644 --- a/mimedecode/mimedecode.py +++ b/mimedecode/mimedecode.py @@ -1,6 +1,7 @@ """Decode MIME message""" import os +import shutil import subprocess import sys @@ -227,29 +228,28 @@ def decode_body(msg, s): charset = msg.get_content_charset() else: charset = None - filename = tempfile.mktemp() + tmpfile = tempfile.NamedTemporaryFile() command = None entries = mailcap.lookup(caps, content_type, "view") for entry in entries: if 'copiousoutput' in entry: if 'test' in entry: - test = mailcap.subst(entry['test'], content_type, filename) + test = mailcap.subst(entry['test'], content_type, tmpfile.name) if test and os.system(test) != 0: continue - command = mailcap.subst(entry["view"], content_type, filename) + command = mailcap.subst(entry["view"], content_type, tmpfile.name) break if not command: return s - outfile = open(filename, 'wb') if charset and bytes is not str and isinstance(s, bytes): # Python3 s = s.decode(charset, "replace") if not isinstance(s, bytes): s = s.encode(g.default_encoding, "replace") - outfile.write(s) - outfile.close() + tmpfile.write(s) + tmpfile.flush() pipe = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) new_s = pipe.stdout.read() @@ -268,7 +268,7 @@ def decode_body(msg, s): msg["X-MIME-Autoconverted"] = \ "failed conversion from %s to text/plain by %s id %s" \ % (content_type, g.host_name, command.split()[0]) - os.remove(filename) + tmpfile.close() # Will be removed on close return s @@ -529,4 +529,5 @@ def open_output_file(filename): return open(fullpath, 'wb') except Exception: if create: - os.removedirs(full_dir) + shutil.rmtree(full_dir) + raise