кодировка base64 не принимает сообщение mime - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь отправить oauth gmail, используя python, и не могу создать MimeMessages, которые согласуются с API Google.После создания примера сообщения я использую base64 для кодирования его в виде строки.Однако у меня возникает ошибка: TypeError: a bytes-like object is required, not 'str'

Строка вверху стека:

return {'raw': base64.urlsafe_b64encode(message_str)}

Я пробовал использовать разные версии кодировки (encoders.encode_base64(message),message.as_string().encode("utf-8") и т. Д.) И попытались преобразовать message.as_string () в байты (как следует из сообщения об ошибке), но меня встречают различные сообщения об ошибках от Google, в которых говорится, что кодировка не соответствует их требованиям, а именно «MIME»сообщения электронной почты, совместимые с RFC 2822 и закодированные как строки base64url. "

Вся моя функция заключается в следующем.

def create_message(sender, to, subject, message_text):

    message = MIMEText(message_text)
    message['to'] = to
    message['from'] = sender
    message['subject'] = subject
    message_str = message.as_string()
    return {'raw': base64.urlsafe_b64encode(message_str)}

Я понятия не имею, почему это не должно работать.Он скопирован из учебника.Я использую Python 3.7.2

1 Ответ

0 голосов
/ 05 февраля 2019

Для тех, у кого эта проблема возникла позже, похоже, что она работает

raw = base64.urlsafe_b64encode(message.as_bytes())
raw = raw.decode()
return {'raw': raw}
...