+ 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"),
+ ("Content-Type", "name"),
+ ):
+ 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:
+ raise ValueError
+ except ValueError:
+ continue
+ fname = '-' + fname
+ break
+ else:
+ 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
+ outfile = open_output_file(fname)
+ output = outfile.write
+ if save_headers:
+ output_headers(msg)
+ if save_body:
+ output(outstring)
+ outfile.close()
+ output = save_output