X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=mimedecode.py;h=48a6aba65ff01450825798e128319e0479d4e917;hb=b4bcf7032c5374be2c52de0dd88c16bd36d9f040;hp=da63350485e7981713b88257bbccc12bb711efd2;hpb=d7aac25395b00e62c5c79160b81dbfcb58f14bcd;p=mimedecode.git diff --git a/mimedecode.py b/mimedecode.py index da63350..48a6aba 100755 --- a/mimedecode.py +++ b/mimedecode.py @@ -1,10 +1,9 @@ #! /usr/bin/env python """Decode MIME message""" -from mimedecode_version import __version__, __author__, __copyright__, __license__ - import sys, os -import email +from mimedecode_version import __version__, \ + __author__, __copyright__, __license__ me = os.path.basename(sys.argv[0]) @@ -263,6 +262,18 @@ def totext(msg, instring): return s +mimetypes = None + +def _guess_extension(ctype): + global mimetypes + if mimetypes is None: + import mimetypes + mimetypes.init() + user_mime_type = os.path.expanduser('~/.mime.types') + if os.path.exists(user_mime_type): + mimetypes._db.read(user_mime_type) + return mimetypes.guess_extension(ctype) + def _save_message(msg, outstring, save_headers=False, save_body=False): for header, param in ( ("Content-Disposition", "filename"), @@ -270,6 +281,8 @@ def _save_message(msg, outstring, save_headers=False, save_body=False): ): fname = msg.get_param(param, header=header) if fname: + if isinstance(fname, tuple): + fname = fname[2] # Do not recode if it isn't recoded yet try: for forbidden in chr(0), '/', '\\': if forbidden in fname: @@ -282,6 +295,9 @@ def _save_message(msg, outstring, save_headers=False, save_body=False): fname = '' g.save_counter += 1 fname = str(g.save_counter) + fname + if '.' not in fname: + ext = _guess_extension(msg.get_content_type()) + if ext: fname += ext global output save_output = output @@ -305,8 +321,7 @@ def decode_part(msg): ctype = msg.get_content_type() if ctype: masks.append(ctype) - mtype = msg.get_content_maintype() - if mtype: + mtype = ctype.split('/')[0] masks.append(mtype + '/*') masks.append('*/*') @@ -581,6 +596,7 @@ if __name__ == "__main__": g.outfile = outfile output = outfile.write + import email msg = email.message_from_file(infile) for header, value in g.set_header_value: