X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=mimedecode.py;h=8c18c6ae0cbc1ff752092c07f24ae6759ce57949;hb=85d70ec62cddedc9c2d48bf44d280af266ac0c7f;hp=8d50b7d0d56453ab0d148cc0d66311c2d6b13081;hpb=bc6318c1a631d838dfe6bfe1c94638c59ea626bf;p=mimedecode.git diff --git a/mimedecode.py b/mimedecode.py index 8d50b7d..8c18c6a 100755 --- a/mimedecode.py +++ b/mimedecode.py @@ -34,7 +34,7 @@ def output_headers(msg): def recode_if_needed(s, charset): - if charset and charset.lower() <> g.default_encoding: + if charset and charset.lower() != g.default_encoding: s = unicode(s, charset, "replace").encode(g.default_encoding, "replace") return s @@ -69,7 +69,7 @@ def decode_header(msg, header): if msg.has_key(header): value = msg[header] new_value = _decode_header(value) - if new_value <> value: # do not bother to touch msg if not changed + if new_value != value: # do not bother to touch msg if not changed set_header(msg, header, new_value) @@ -83,7 +83,7 @@ def decode_header_param(msg, header, param): 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 + if new_value != value: # do not bother to touch msg if not changed msg.set_param(param, new_value, header) @@ -241,7 +241,7 @@ def recode_charset(msg, s): "Recode charset of the message to the default charset" save_charset = charset = msg.get_content_charset() - if charset and charset.lower() <> g.default_encoding: + if charset and charset.lower() != g.default_encoding: s = recode_if_needed(s, charset) content_type = msg.get_content_type() set_content_type(msg, content_type, g.default_encoding) @@ -373,7 +373,7 @@ def decode_part(msg): for content_type in masks: if content_type in g.error_mask: - raise ValueError, "content type %s prohibited" % ctype + raise ValueError("content type %s prohibited" % ctype) def decode_multipart(msg): "Decode multipart" @@ -398,8 +398,36 @@ def decode_multipart(msg): if boundary: output("%s--%s--%s" % (os.linesep, boundary, os.linesep)) return - elif content_type in g.error_mask: - raise ValueError, "content type %s prohibited" % ctype + + for content_type in masks: + if content_type in g.save_body_mask or \ + content_type in g.save_message_mask: + _out_l = [] + first_subpart = True + for subpart in msg.get_payload(): + if first_subpart: + first_subpart = False + else: + _out_l.append(os.linesep) + _out_l.append("--%s%s" % (boundary, os.linesep)) + _out_l.append(subpart.as_string()) + _out_l.append("%s--%s--%s" % (os.linesep, boundary, os.linesep)) + outstring = ''.join(_out_l) + break + else: + outstring = None + + for content_type in masks: + if content_type in g.save_headers_mask: + _save_message(msg, outstring, save_headers=True, save_body=False) + if content_type in g.save_body_mask: + _save_message(msg, outstring, save_headers=False, save_body=True) + if content_type in g.save_message_mask: + _save_message(msg, outstring, save_headers=True, save_body=True) + + for content_type in masks: + if content_type in g.error_mask: + raise ValueError("content type %s prohibited" % ctype) output_headers(msg)