1 #!/usr/bin/env python 2 3 from email import message_from_string 4 from email.generator import Generator 5 import sys 6 7 try: 8 from cStringIO import StringIO 9 except ImportError: 10 from StringIO import StringIO 11 12 def until_from(f, skip=0): 13 number = 0 14 while number <= skip: 15 l = [] 16 s = f.readline() 17 while s: 18 l.append(s) 19 s = f.readline() 20 if s.startswith("From "): 21 number += 1 22 break 23 else: 24 number += 1 25 break 26 if number > skip: 27 return "".join(l) 28 else: 29 return "" 30 31 def as_string(message): 32 33 """ 34 Return the string representation of 'message', attempting to preserve the 35 precise original formatting. 36 """ 37 38 out = StringIO() 39 generator = Generator(out, False, 0) # disable reformatting measures 40 generator.flatten(message) 41 return out.getvalue() 42 43 def decode(part): 44 45 """ 46 Change the transfer encoding on 'part' and its subparts so that a plain text 47 representation may be displayed. 48 """ 49 50 payload = part.get_payload(decode=True) 51 if payload: 52 encoding = part.get("Content-Transfer-Encoding") 53 if encoding: 54 del part["Content-Transfer-Encoding"] 55 part["Content-Transfer-Encoding"] = "8bit" 56 part.set_payload(payload) 57 else: 58 for p in part.get_payload(): 59 decode(p) 60 61 # Main program. 62 63 if __name__ == "__main__": 64 skip = int((sys.argv[1:] or [0])[0]) 65 message = message_from_string(until_from(sys.stdin, skip)) 66 decode(message) 67 print as_string(message) 68 69 # vim: tabstop=4 expandtab shiftwidth=4