output("\n") # End of headers
-def recode(s, charset):
- return unicode(s, charset, "replace").encode(g.default_encoding, "replace")
-
def recode_if_needed(s, charset):
if charset and charset.lower() <> g.default_encoding:
- s = recode(s, charset)
+ s = unicode(s, charset, "replace").encode(g.default_encoding, "replace")
return s
set_header(msg, header, new_value)
-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"
value = msg.get_param(param, header=header)
if value:
if isinstance(value, tuple):
- new_value = _decode_header_param(value)
+ new_value = recode_if_needed(value[2], value[0])
else:
new_value = _decode_header(value)
if new_value <> value: # do not bother to touch msg if not changed
global output
save_output = output
- outfile = open(os.path.join(g.destination_dir, fname), 'w')
+ outfile = open_output_file(fname)
output = outfile.write
if save_headers:
output_headers(msg)
output(msg.as_string())
+def open_output_file(filename):
+ fullpath = os.path.abspath(os.path.join(g.destination_dir, filename))
+ full_dir = os.path.dirname(fullpath)
+ create = not os.path.isdir(full_dir)
+ if create:
+ os.makedirs(full_dir)
+ try:
+ return open(fullpath, 'w')
+ except:
+ if create:
+ os.removedirs(full_dir)
+
+
class GlobalOptions:
from m_lib.defenc import default_encoding
recode_charset = 1 # recode charset of message body
g.input_filename = '-'
infile = sys.stdin
if g.output_filename:
- outfile = open(os.path.join(g.destination_dir, g.output_filename), 'w')
+ outfile = open_output_file(g.output_filename)
else:
g.output_filename = '-'
outfile = sys.stdout
infile = open(arguments[0], 'r')
if la == 1:
if g.output_filename:
- outfile = open(os.path.join(g.destination_dir, g.output_filename), 'w')
+ outfile = open_output_file(g.output_filename)
else:
g.output_filename = '-'
outfile = sys.stdout
outfile = sys.stdout
else:
g.output_filename = arguments[1]
- outfile = open(os.path.join(g.destination_dir, g.output_filename), 'w')
+ outfile = open_output_file(g.output_filename)
else:
usage(1, 'Too many arguments')
msg = email.message_from_file(infile)
for header, value in g.set_header_value:
- msg[header] = value
+ set_header(msg, header, value)
for header, param, value in g.set_header_param:
if header in msg: