'Body-encode a string by converting it first to bytes.
The type of encoding (base64 or quoted-printable) will be based on
self.body_encoding.  If body_encoding is None, we assume the
output charset is a 7bit encoding, so re-encoding the decoded
string using the ascii codec produces the correct string version
of the content.'

def body_encode(self, string):

    if (not string):
        return string
    if (self.body_encoding is BASE64):
        if isinstance(string, str):
            string = string.encode(self.output_charset)
        return email.base64mime.body_encode(string)
    elif (self.body_encoding is QP):
        if isinstance(string, str):
            string = string.encode(self.output_charset)
        string = string.decode('latin1')
        return email.quoprimime.body_encode(string)
    else:
        if isinstance(string, str):
            string = string.encode(self.output_charset).decode('ascii')
        return string
