Помните: в Python 3 строки все Unicode. Вы фактически даете Python объект байтов, а затем сообщаете ему, что хотите получить строку в юникоде, но не указываете, какую кодировку использовать для преобразования объекта байтов в строку.
Вам нужно предоставить кодировку в качестве второго параметра для вызова set_payload()
, например:
test = email.message.Message()
test.set_payload(b'some example_data', 'latin1') # use latin-1 for no-op translation
test.as_string()
'MIME-Version: 1.0\nContent-Type: text/plain; charset="latin1"\nContent-Transfer-Encoding: base64\n\nc29tZSBleGFtcGxlIGRhdGE=\n'
Это дает сообщение типа MIME - надеюсь, это сработает для вас.