当我用base64解码器运行Gmail邮件时,Gmail邮件只解码标题。

问题描述 投票:1回答:1

我正在尝试从Gmail中解码一条消息。 我正在使用gmail api的默认get_message()函数。 看上去我正在解码邮件的标题,但即使我通过64进制解码器运行文本,邮件的正文仍然没有被解码。 如果能帮助我正确解码邮件正文,我将非常感激。 下面是我使用的函数,以及打印函数返回的内容。

def get_message(service, user_id, msg_id):
    try:
        message = service.users().messages().get(userId=user_id, id=msg_id, format='raw').execute()
        msg_raw = base64.urlsafe_b64decode(message['raw'].encode('ASCII'))
        msg_str = email.message_from_bytes(msg_raw)
        content_types = msg_str.get_content_maintype()
        print(msg_str)

下面是我打印msg_str时得到的部分内容:

MIME-Version: 1.0
From: [email protected]
To: [email protected]
Reply-To: [email protected]
Date: Mon, 15 Jun 2020 18:04:52 +0000 (UTC)
Subject: Your subject line here
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
X-RCIS-Action: ALLOW
Message-ID: <[email protected]>
X-SG-EID: Ap3vdjbPGAKcTGFw7Eo1svjoaFy5XYEjNVu77BufzmUAjCf6aYR+XSXjw7ibAUowXCb0UJhsslBkBD
 Ruoukd4gvMabp3XWN/UbzDiqaAoGCz/WCNdNf9x3D9APOKeFYrZrE8wSn7a0pyYGkWPxBrrKKrkODD
 L3t5+l5uf7hSLqOnT1Zo3YDJeczbtM7SGu//TGl3QRvFFmVAiKXmVN62sA==
X-Feedback-ID: 8340127:zoIy9G3JApamNWAibxpVx2fbkPkU9DYqDP9JHIkh0jc=:zoIy9G3JApamNWAibxpVx2fbkPkU9DYqDP9JHIkh0jc=:SG

PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy93M2MvL2R0ZCB4aHRtbCAxLjAgdHJhbnNpdGlvbmFs
Ly9lbiIgImh0dHA6Ly93d3cudzMub3JnL3RyL3hodG1sMS9kdGQveGh0bWwxLXRyYW5zaXRpb25h
bC5kdGQiPjxodG1sIHN0eWxlPSJtYXJnaW46IDA7cGFkZGluZzogMDtmb250LWZhbWlseTogJ0hl
bHZldGljYSBOZXVlJywgJ0hlbHZldGljYScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7
Ym94LXNpemluZzogYm9yZGVyLWJveCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0
bWwiPjxoZWFkIHN0eWxlPSJtYXJnaW46IDA7cGFkZGluZzogMDtmb250LWZhbWlseTogJ0hlbHZl
dGljYSBOZXVlJywgJ0hlbHZldGljYScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7Ym94
python-3.x email gmail gmail-api email-integration
1个回答
1
投票

你正在抓取的是 raw 字段。这个字段是以Base64编码的完整消息字节(你已经在解码了)。

如果你看一下解码后的原始邮件的标题,你会发现。

Content-Transfer-Encoding: base64

表示邮件的正文也是Base64编码的,这意味着无论如何你都要对邮件的正文进行解码。否则,你可能不得不去挖掘 message['payload'] 对象,看看那里是否有什么东西。

理想的情况是,你会查看 Content-Transfer-Encoding 在你的程序中,要弄清楚如何处理信息的主体。你可以考虑阅读一下 RFC 1521 了解更多关于在电子邮件中指定消息主体的信息。

© www.soinside.com 2019 - 2024. All rights reserved.