API Google Gmail: для base64 нужны байты, но для тела URL-адреса нужна строкаPython

Программы на Python
Anonymous
API Google Gmail: для base64 нужны байты, но для тела URL-адреса нужна строка

Сообщение Anonymous »

Я работаю над этим руководством по API Google Gmail (на самом деле я просматриваю его, чтобы отправить электронное письмо).
Тело моего электронного письма должно быть закодировано MIMEText и base64, но содержимое свойства 'raw' в формате JSON полезная нагрузка должна быть строкой. Это приводит меня к «камню на наковальне» с двумя ошибками. Вот код, следующий за руководством:

Код: Выделить всё

message = MIMEText(RecipData["EmailText"])

message['to'] = RecipData["Email"]

message['from'] = SENDER

message['subject'] = Subject

EncodedMessage = {'raw': base64.urlsafe_b64encode(message.as_string())}

service.users().messages().send(userId=SENDER, body=EncodedMessage).execute()
Я получаю следующую ошибку:

Код: Выделить всё

TypeError: a bytes-like object is required, not 'str'
Теперь, если я изменю эту строку:

Код: Выделить всё

EncodedMessage = {'raw': base64.urlsafe_b64encode(message.as_string())}
Кому:

Код: Выделить всё

EncodedMessage = {'raw': base64.urlsafe_b64encode(message.as_bytes())}
Тогда я получаю сообщение об ошибке:

Код: Выделить всё

TypeError: Object of type bytes is not JSON serializable
Не знаете, что мне делать, чтобы обойти эту проблему? Есть предложения?

Подробнее здесь: https://stackoverflow.com/questions/667 ... -needs-str

Вернуться в «Python»