Ошибка при декодировании вложения с помощью Python из электронного письма, полученного с помощью API Gmail.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка при декодировании вложения с помощью Python из электронного письма, полученного с помощью API Gmail.

Сообщение Anonymous »

Надеюсь, кто-нибудь сможет мне помочь.
Я пытаюсь загрузить вложения к электронному письму, в котором отчеты DMARC поступают из домена, я загружаю их с помощью API Gmail. Согласно документации API, файл загружается через строка в кодировке base64, которую я получаю правильно «по-видимому», но когда я пытаюсь декодировать эту строку с помощью Python, чтобы получить файл, я получаю сообщение об ошибке, в котором говорится, что строка base64 не распознается как действительная строка, и возможно, что это поврежден.
Чтобы исключить слишком длинную цепочку, я попробовал загрузить ее по частям, а затем присоединиться к ней, но ошибка сохраняется.
Прикрепляю код, который использую и возвращаемая ошибка:
(Строка base64 — это всего лишь пример)

Код: Выделить всё

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"

# Ensure the base64 string has the correct padding
missing_padding = len(base64_gzip) % 4
if missing_padding:
base64_gzip += '=' * (4 - missing_padding)

# Decode the base64 string
decoded_gzip = base64.b64decode(base64_gzip)

# Decompress the gzip file
with gzip.GzipFile(fileobj=io.BytesIO(decoded_gzip)) as f:
decompressed_data = f.read().decode('utf-8')

decompressed_data

Код: Выделить всё

---------------------------------------------------------------------------
Error                                     Traceback (most recent call last)
Cell In[2], line 14
11     base64_gzip += '=' * (4 - missing_padding)
13 # Decode the base64 string
---> 14 decoded_gzip = base64.b64decode(base64_gzip)
16 # Decompress the gzip file
17 with gzip.GzipFile(fileobj=io.BytesIO(decoded_gzip)) as f:

File /usr/local/lib/python3.11/base64.py:88, in b64decode(s, altchars, validate)
86     assert len(altchars) == 2, repr(altchars)
87     s = s.translate(bytes.maketrans(altchars, b'+/'))
---> 88 return binascii.a2b_base64(s, strict_mode=validate)

Error: Incorrect padding
  • Я попробовал загрузить строку base64 из API по частям, чтобы исключить повреждение строки в ответе API.
    < li>Я пробовал использовать другую библиотеку декодирования (binascii), чтобы исключить ошибки с библиотекой base64.
  • Я даже пробовал закодировать файл вручную (но меньшего размера), отправив его через почтовый ящик, который я использую, загружая его через запрос API и декодируя его с помощью того же кода, и мне это удалось. Это может указывать на то, что, возможно, строка, полученная из других файлов, действительно повреждена, но я не знаю, в чем причина.


Подробнее здесь: https://stackoverflow.com/questions/786 ... ith-the-gm
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»