sys.exit(code)
-def output(s):
- gopts.outfile.write(s)
-
def output_headers(msg):
unix_from = msg.get_unixfrom()
if unix_from:
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)
# 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"
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"
msg.set_param("charset", charset, "Content-Type")
-
caps = None # Globally stored mailcap database; initialized only if needed
def decode_body(msg, s):
"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
decode_part(msg)
else: # Not a message, just text - copy it literally
- output(str(msg))
+ output(msg.as_string())
class GlobalOptions:
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 = '-'
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
- decode_file(infile)
+ output = outfile.write
- infile.close()
- outfile.close()
+ try:
+ decode_file(infile)
+ finally:
+ infile.close()
+ outfile.close()