[英]base64 encoding not taking mime message
我正在嘗試使用 python 發送 oauth gmail,但無法創建與 Google API 一致的 MimeMessages。 創建示例消息后,我使用 base64 將其編碼為字符串。 但是,我想出了錯誤: TypeError: a bytes-like object is required, not 'str'
堆棧頂部的行:
return {'raw': base64.urlsafe_b64encode(message_str)}
我嘗試使用不同版本的編碼( encoders.encode_base64(message)
、 message.as_string().encode("utf-8")
等)並嘗試將 message.as_string() 轉換為字節(作為錯誤消息建議)但我遇到了來自 Google 的不同錯誤消息,稱編碼不符合他們的要求,即“符合 RFC 2822 並編碼為 base64url 字符串的 MIME 電子郵件消息”。
我的整個功能如下。
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}
根據這里的答案,您可以使用:
'字符串'.as_bytes()
不知道為什么gmail api 文檔在他們的代碼中有這個錯誤,但這就是我讓它工作的方式。 (可能,他們指的是python 2)
為了將此答案放在您的具體問題的上下文中,我這樣做了:
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')}
我在這里使用了
decode('ascii')
因為它的結果需要是一個 json 字符串並且字節不能被序列化。 您可能會收到諸如TypeError: Object of type bytes is not JSON serializable
的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.