簡體   English   中英

base64 編碼不接受 mime 消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM