1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/imiptools/utils.py Sun Oct 01 15:06:09 2017 +0200
1.3 @@ -0,0 +1,59 @@
1.4 +#!/usr/bin/env python
1.5 +
1.6 +"""
1.7 +Mail-related utilities.
1.8 +
1.9 +Copyright (C) 2015, 2016, 2017 Paul Boddie <paul@boddie.org.uk>
1.10 +
1.11 +This program is free software; you can redistribute it and/or modify it under
1.12 +the terms of the GNU General Public License as published by the Free Software
1.13 +Foundation; either version 3 of the License, or (at your option) any later
1.14 +version.
1.15 +
1.16 +This program is distributed in the hope that it will be useful, but WITHOUT
1.17 +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
1.18 +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
1.19 +details.
1.20 +
1.21 +You should have received a copy of the GNU General Public License along with
1.22 +this program. If not, see <http://www.gnu.org/licenses/>.
1.23 +"""
1.24 +
1.25 +from email.generator import Generator
1.26 +
1.27 +try:
1.28 + from cStringIO import StringIO
1.29 +except ImportError:
1.30 + from StringIO import StringIO
1.31 +
1.32 +def message_as_string(message):
1.33 +
1.34 + """
1.35 + Return the string representation of 'message', attempting to preserve the
1.36 + precise original formatting.
1.37 + """
1.38 +
1.39 + out = StringIO()
1.40 + generator = Generator(out, False, 0) # disable reformatting measures
1.41 + generator.flatten(message)
1.42 + return out.getvalue()
1.43 +
1.44 +def decode_part(part):
1.45 +
1.46 + """
1.47 + Change the transfer encoding on 'part' and its subparts so that a plain text
1.48 + representation may be displayed.
1.49 + """
1.50 +
1.51 + payload = part.get_payload(decode=True)
1.52 + if payload:
1.53 + encoding = part.get("Content-Transfer-Encoding")
1.54 + if encoding:
1.55 + del part["Content-Transfer-Encoding"]
1.56 + part["Content-Transfer-Encoding"] = "8bit"
1.57 + part.set_payload(payload)
1.58 + else:
1.59 + for p in part.get_payload():
1.60 + decode_part(p)
1.61 +
1.62 +# vim: tabstop=4 expandtab shiftwidth=4