X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;ds=sidebyside;f=mimedecode.py;h=78783ae6e2e7ffe930d5db226d54851e2433f7fe;hb=75fa3299ddbda6c432999a26d16fccf7bccfb34d;hp=b1b18e3beab25ac36a34edf139097b1898400cfb;hpb=554b3f06f7f69d0f570ebac18b1d9161ac7ddf5f;p=mimedecode.git diff --git a/mimedecode.py b/mimedecode.py index b1b18e3..78783ae 100755 --- a/mimedecode.py +++ b/mimedecode.py @@ -30,9 +30,6 @@ Usage: %s [-h|--help] [-V|--version] [-cCDP] [-H|--host=hostname] [-f charset] [ sys.exit(code) -def output(s): - gopts.outfile.write(s) - def output_headers(msg): unix_from = msg.get_unixfrom() if unix_from: @@ -45,7 +42,6 @@ def output_headers(msg): def recode(s, charset): return unicode(s, charset, "replace").encode(gopts.default_encoding, "replace") - def recode_if_needed(s, charset): if charset and charset.lower() <> gopts.default_encoding: s = recode(s, charset) @@ -77,7 +73,6 @@ def _decode_header(s): # together into the final string. return ''.join(rtn) - def decode_header(msg, header): "Decode mail header (if exists) and put it back, if it was encoded" @@ -91,7 +86,6 @@ def decode_header(msg, header): def _decode_header_param(s): return recode_if_needed(s[2], s[0]) - def decode_header_param(msg, header, param): "Decode mail header's parameter (if exists) and put it back, if it was encoded" @@ -133,7 +127,6 @@ def set_content_type(msg, newtype, charset=None): msg.set_param("charset", charset, "Content-Type") - caps = None # Globally stored mailcap database; initialized only if needed def decode_body(msg, s): @@ -193,7 +186,7 @@ def totext(msg, instring): "Convert instring content to text" if msg.is_multipart(): # Recursively decode all parts of the multipart message - newfile = StringIO(str(msg)) + newfile = StringIO(msg.as_string()) newfile.seek(0) decode_file(newfile) return @@ -276,7 +269,7 @@ def decode_file(infile): decode_part(msg) else: # Not a message, just text - copy it literally - output(str(msg)) + output(msg.as_string()) class GlobalOptions: @@ -354,9 +347,12 @@ if __name__ == "__main__": la = len(arguments) if la == 0: gopts.input_filename = '-' - gopts.output_filename = '-' infile = sys.stdin - outfile = sys.stdout + if gopts.output_filename: + outfile = open(gopts.output_filename, 'w') + else: + gopts.output_filename = '-' + outfile = sys.stdout elif la in (1, 2): if (arguments[0] == '-'): gopts.input_filename = '-' @@ -382,15 +378,18 @@ if __name__ == "__main__": else: usage(1, 'Too many arguments') - if (infile is sys.stdin) and (outfile is sys.stdout) and \ - sys.stdin.isatty() and sys.stdout.isatty(): - usage(1, 'Filtering from console to console is forbidden') + if (infile is sys.stdin) and sys.stdin.isatty(): + if (outfile is sys.stdout) and sys.stdout.isatty(): + usage() + usage(1, 'Filtering from console is forbidden') if not gopts.host_name: import socket gopts.host_name = socket.gethostname() gopts.outfile = outfile + output = outfile.write + decode_file(infile) infile.close()