首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google gmail API: base64需要字节,但URL体需要字符串

Google gmail API: base64需要字节,但URL体需要字符串
EN

Stack Overflow用户
提问于 2021-03-19 08:32:53
回答 1查看 157关注 0票数 1

我正在处理这个Google Gmail API tutorial (实际上,我只是略读它来发送一封电子邮件)。我的电子邮件正文必须是MIMEText & base64编码的,但是JSON有效负载的'raw‘属性的内容必须是一个字符串。这把我带到了一个有两个错误的“坚硬之地的石头”。以下是教程后面的代码:

代码语言:javascript
运行
复制
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()

我得到以下错误:

代码语言:javascript
运行
复制
TypeError: a bytes-like object is required, not 'str'

现在,如果我更改这一行:

代码语言:javascript
运行
复制
EncodedMessage = {'raw': base64.urlsafe_b64encode(message.as_string())}

至:

代码语言:javascript
运行
复制
EncodedMessage = {'raw': base64.urlsafe_b64encode(message.as_bytes())}

然后我得到一个错误:

代码语言:javascript
运行
复制
TypeError: Object of type bytes is not JSON serializable

不知道该怎么做才能解决这个问题?有什么建议吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-03-19 12:53:33

这就是我最终要做的。我将MIMEText转换为字节,这样它就可以在base64.urlsafe_b64encode()中工作,然后我使用str(),这样数据就可以放入JSON中。但是,需要剥离的str()是包装在字符串中的b'...'

代码语言:javascript
运行
复制
message = base64.urlsafe_b64encode(bytes(message))

message = {'raw': str(message).strip('b').strip('\'')}
print(service.users().messages().send(userId="me", body=message).execute())  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66701033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档