'Return a reference to the payload.
The payload will either be a list object or a string.  If you mutate
the list object, you modify the message\'s payload in place.  Optional
i returns that index into the payload.
Optional decode is a flag indicating whether the payload should be
decoded or not, according to the Content-Transfer-Encoding header
(default is False).
When True and the message is not a multipart, the payload will be
decoded if this header\'s value is `quoted-printable\' or `base64\'.  If
some other encoding is used, or the header is missing, or if the
payload has bogus data (i.e. bogus base64 or uuencoded data), the
payload is returned as-is.
If the message is a multipart and the decode flag is True, then None
is returned.'

def get_payload(self, i=None, decode=False):

    if (i is None):
        payload = self._payload
    elif (not isinstance(self._payload, list)):
        raise TypeError(('Expected    list,    got    %s' % type(self._payload)))
    else:
        payload = self._payload[i]
    if decode:
        if self.is_multipart():
            return None
        cte = self.get('content-transfer-encoding', '').lower()
        if (cte == 'quoted-printable'):
            return utils._qdecode(payload)
        elif (cte == 'base64'):
            try:
                return utils._bdecode(payload)
            except binascii.Error:
                return payload
        elif (cte in ('x-uuencode', 'uuencode', 'uue', 'x-uue')):
            sfp = StringIO()
            try:
                uu.decode(StringIO((payload + '\n')), sfp, quiet=True)
                payload = sfp.getvalue()
            except uu.Error:
                return payload
    return payload
