From: David Bremner <brem...@debian.org> I find this script pretty useful when figuring out who to blame for MIME rendering problems. It currently isn't very widely known, so it seems worth distributing with notmuch. ---
I did a small amount whitespace cleanup compared to version in dkg's git repo. devel/printmimestructure | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100755 devel/printmimestructure diff --git a/devel/printmimestructure b/devel/printmimestructure new file mode 100755 index 0000000..b8084a9 --- /dev/null +++ b/devel/printmimestructure @@ -0,0 +1,54 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Author: Daniel Kahn Gillmor <dkg at fifthhorseman.net> +# License: GPLv3+ + +# Updates: git://lair.fifthhorseman.net/~dkg/printmimestructure + +# This script reads a MIME message from stdin and produces a treelike +# representation on it stdout. + +# Example: +# +# 0 dkg at alice:~$ printmimestructure < 'Maildir/cur/1269025522.M338697P12023.monkey,S=6459,W=6963:2,Sa' +# ???multipart/signed 6546 bytes +# ???text/plain inline 895 bytes +# ???application/pgp-signature inline [signature.asc] 836 bytes +# 0 dkg at alice:~$ + + +# If you want to number the parts, i suggest piping the output through +# something like "cat -n" + +import email +import sys + +def test(z, prefix=''): + fname = '' if z.get_filename() is None else ' [' + z.get_filename() + ']' + cset = '' if z.get_charset() is None else ' (' + z.get_charset() + ')' + disp = z.get_params(None, header='Content-Disposition') + if (disp is None): + disposition = '' + else: + disposition = '' + for d in disp: + if d[0] in [ 'attachment', 'inline' ]: + disposition = ' ' + d[0] + if (z.is_multipart()): + print prefix + '??' + z.get_content_type() + cset + disposition + fname, z.as_string().__len__().__str__() + ' bytes' + if prefix.endswith('?'): + prefix = prefix.rpartition('?')[0] + ' ' + if prefix.endswith('?'): + prefix = prefix.rpartition('?')[0] + '?' + parts = z.get_payload() + i = 0 + while (i < parts.__len__()-1): + test(parts[i], prefix + '?') + i += 1 + test(parts[i], prefix + '?') + # FIXME: show epilogue? + else: + print prefix + '??'+ z.get_content_type() + cset + disposition + fname, z.get_payload().__len__().__str__(), 'bytes' + +test(email.message_from_file(sys.stdin), '?') -- 1.8.2.rc2