我正在处理这个Google Gmail API tutorial (实际上,我只是略读它来发送一封电子邮件)。我的电子邮件正文必须是MIMEText & base64编码的,但是JSON有效负载的'raw‘属性的内容必须是一个字符串。这把我带到了一个有两个错误的“坚硬之地的石头”。以下是教程后面的代码:
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不知道该怎么做才能解决这个问题?有什么建议吗?谢谢。
发布于 2021-03-19 12:53:33
这就是我最终要做的。我将MIMEText转换为字节,这样它就可以在base64.urlsafe_b64encode()中工作,然后我使用str(),这样数据就可以放入JSON中。但是,需要剥离的str()是包装在字符串中的b'...'。
message = base64.urlsafe_b64encode(bytes(message))
message = {'raw': str(message).strip('b').strip('\'')}
print(service.users().messages().send(userId="me", body=message).execute())  https://stackoverflow.com/questions/66701033
复制相似问题