Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python base64编码不接受mime消息_Python_Python 3.x_Email_Gmail_Encode - Fatal编程技术网

Python base64编码不接受mime消息

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

我正在尝试使用python发送oauth gmail,但无法创建符合Google API的MIMessage。创建示例消息后,我使用base64将其编码为字符串。然而,我发现了一个错误:TypeError:需要一个类似字节的对象,而不是'str'

堆栈顶部的行:

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')}