Python base64编码不接受mime消息
我正在尝试使用python发送oauth gmail,但无法创建符合Google API的MIMessage。创建示例消息后,我使用base64将其编码为字符串。然而,我发现了一个错误:TypeError:需要一个类似字节的对象,而不是'str' 堆栈顶部的行:Python base64编码不接受mime消息,python,python-3.x,email,gmail,encode,Python,Python 3.x,Email,Gmail,Encode,我正在尝试使用python发送oauth gmail,但无法创建符合Google API的MIMessage。创建示例消息后,我使用base64将其编码为字符串。然而,我发现了一个错误:TypeError:需要一个类似字节的对象,而不是'str' 堆栈顶部的行: return {'raw': base64.urlsafe_b64encode(message_str)} 我尝试过使用不同版本的编码编码器。encode_base64 message、message.as_string.encode
return {'raw': base64.urlsafe_b64encode(message_str)}
我尝试过使用不同版本的编码编码器。encode_base64 message、message.as_string.encodeutf-8等,并尝试过将message.as_string转换为错误消息建议的字节,但遇到来自谷歌的不同错误消息,称编码不符合他们的要求,这些是符合RFC 2822的MIME电子邮件,编码为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对于以后遇到此问题的任何人来说,这似乎是可行的
raw = base64.urlsafe_b64encode(message.as_bytes())
raw = raw.decode()
return {'raw': raw}
根据答案,您可以使用:
“字符串”。以字节为单位
不知道为什么他们的代码中会出现这个错误,但我就是这样让它工作的。他们可能指的是Python2
为了把这个答案与你的具体问题联系起来,我做了以下几点:
我在这里使用了decode'ascii',因为由此产生的结果将需要是一个json字符串,并且字节无法序列化。您可能会得到一个错误,例如TypeError:bytes类型的对象不可JSON序列化,否则
可能相关:这是相关的^I在此处添加了一个答案,该答案在上下文中利用了其中的解决方案:
def create_message(sender, to, subject, message_text):
message = MIMEText(message_text)
message['To'] = to
message['From'] = sender
message['Subject'] = subject
message_bytes = message.as_bytes()
return {'raw': base64.urlsafe_b64encode(message_bytes).decode('ascii')}