You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python解码Gmail API获取的邮件附件时遇Incorrect padding错误

解决Gmail API获取DMARC报告Base64解码的"Incorrect padding"错误

你的问题核心是Gmail API返回的Base64字符串中包含空格(或换行符)这类无效字符,这些字符会干扰Base64解码的padding校验,导致报错。

修复后的代码

import base64
import gzip
import io

# Base64 encoded gzip file(示例字符串)
base64_gzip = "H4sIAAAAAAAAAKVTuW7cMBCt118RuJcoyl5bCzB0XKRMUrhLI1DUaJexeICkNsfXh5f2MIw0aSTOe6N584Yj8vRLzh-OYJ3Q6uMtrpvbJ3pDJoBxYPyV3mxIIWlTY4LWIOAWjLa-l-DZyDwL0IZou- 8Vk0Cfvzx___a1evn8QtAJjBkgmZip0c5L5jzYT0yyP1o5cDXXkqDMx8xSX4x07PCWtVtc8 YHz6v6ha6odG6AadtDhu2FiO94SdM6PX4eWoLdM7ZPshgywF4riR_zYdg_3TUNQRhIJakzUX SAjFeNYBF1VOUlcWCZGz4L_7s0yzMIdoIjr4EJRoSbtYM7GChZpNr4KSR1B-ZAgZ6aExHcEDLXwA7gnyKTYnQGXEcM9xbHbeIjApGmIwjO2-k5fYaJc29yh1T-zdacXy6EXhrbNru62dYu7ehv GeSZSHteLCnoE5UPCigYc2byEQaXK0b1w4X6Fj3uitILg_QIpOdG4YS5YXmeQTE4FLGM4G7kSCTeR-ydiBOXFJMJarld5hFkb6Cer5fUNXFMp-wBsBPtO7iWRBN8IEbb4Q2_BLbMvyhc-_n3_abfjh8V rCbLdUxWyjuC_yq3rhN70G9PyMoSNWX_2v5P8j0QNBAAA"

# 第一步:移除所有非Base64有效字符(空格、换行等)
valid_base64_chars = set("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=")
base64_gzip_cleaned = ''.join([c for c in base64_gzip if c in valid_base64_chars])

# 第二步:补充正确的padding
missing_padding = len(base64_gzip_cleaned) % 4
if missing_padding:
    base64_gzip_cleaned += '=' * (4 - missing_padding)

# 解码并解压
decoded_gzip = base64.b64decode(base64_gzip_cleaned)
with gzip.GzipFile(fileobj=io.BytesIO(decoded_gzip)) as f:
    decompressed_data = f.read().decode('utf-8')

print(decompressed_data)

问题分析

  1. Gmail API返回的Base64字符串可能因为传输或格式化原因混入空格、换行符,这些字符不属于Base64规范允许的范围,会导致解码时padding校验失败。
  2. 你之前的分段下载拼接操作没有清理这些无效字符,所以错误依然存在;而手动测试的小文件没有这类干扰字符,因此解码成功。

额外优化

如果确认Gmail API返回的是base64url编码(部分API会用这种变体),可以直接用base64.urlsafe_b64decode(),它会自动处理-和_替换为+和/,同时记得先清理无效字符:

# 若为base64url编码,替换字符后解码
base64_gzip_cleaned = base64_gzip_cleaned.replace('-', '+').replace('_', '/')
decoded_gzip = base64.b64decode(base64_gzip_cleaned)

内容的提问来源于stack exchange,提问作者Adolfo Israel Ramírez Reséndiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 23:15:55