Сценарий Python Gmail API не сохраняет вложения: в формате CSV отображается имя файла, но файлы никогда не загружаются.Python

Программы на Python
Ответить
Anonymous
 Сценарий Python Gmail API не сохраняет вложения: в формате CSV отображается имя файла, но файлы никогда не загружаются.

Сообщение Anonymous »

Я создаю скрипт Python с использованием API Gmail для чтения электронных писем модельного приложения, извлечения данных и загрузки вложенных фотографий. Все работает кроме вложений. сценарий продолжает говорить: Вложения: нет
**Мой вопрос:**Почему API Gmail обнаруживает имена файлов, но не возвращает нет данных о вложениях, и как мне правильно извлечь и сохранить вложения изображений из сообщений Gmail?
Информацию, которую я постарался включить, чтобы лучше объяснить ситуацию, см. ниже. Я новичок в этом, поэтому просто учусь и пытаюсь получить помощь, чтобы понять, чего мне не хватает. Заранее спасибо!
Моя среда: Python 3.10, работает на Replit, Gmail API v1, использует идентификатор клиента OAuth 2.0 + секрет
В созданном мною CSV-файле в столбце вложений правильно отображаются имена файлов изображений. Таким образом, Gmail ясно видит, что есть вложения, но на самом деле ничего не загружается, и никакие файлы не сохраняются в папке вложений.
Что я пытаюсь сделать:
  • Заставить сценарий перебирать непрочитанные электронные письма
  • сохранять каждое вложение (jpg/png) в папку вложений
  • запишите имя файла в CSV с именем клиента, адресом электронной почты и т. д.
что происходит:
  • csv обновляется правильно
  • скрипт регистрирует «вложения: нет» для каждого электронного письма
  • папка вложений пусто
  • ошибок не показано
Соответствующий код:

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

for msg in messages:
msg_id = msg["id"]
try:
message = service.users().messages().get(userId="me", id=msg_id).execute()

# Extract parts
payload = message.get("payload", {})
parts = payload.get("parts", [])

attachments = []

for part in parts:
if part.get("filename"):
attach_id = part["body"].get("attachmentId")
if attach_id:
attachment = service.users().messages().attachments().get(
userId="me", messageId=msg_id, id=attach_id
).execute()

data = base64.urlsafe_b64decode(attachment["data"])

filepath = os.path.join("attachments", part["filename"])
with open(filepath, "wb") as f:
f.write(data)

attachments.append(part["filename"])
except Exception as e:
print(f"Error processing {msg_id}: {e}")
Журнал:
Найдено 8 электронных писем.
- Обработано 19a6e50508c6d5b2, сохранено в CSV. Имя: Шанна Коупленд, Вложения: нет
 – обработано 19a5edcd93003ccf, сохранено в формате CSV. Имя: Тейлор Ньюпорт, вложения: нет
Что я пробовал
  •  – Проверено, что области действия Gmail API включают:

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

    https://www.googleapis.com/auth/gmail.readonly

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

    https://www.googleapis.com/auth/gmail.modify
    -До записи существует папка с вложениями

    -Печатная часть["имя файла"] — она отображается правильно

    -Печатный тип MIME — иногда «image/jpeg», иногда вложенный

    -Попытка декодирования с помощью обоих base64.urlsafe_b64decode и b64decode

    -Подтвержденные сообщения Gmail имеют вложения вручную в Gmail

    -Проверенные учетные данные OAuth и файл token.json действительны
Может быть, вложения вложены в альтернативные структуры? Но когда я нажимаю на них в своем электронном письме, они загружаются немедленно.
Я застреваю на этом несколько дней и не могу загрузить изображения, хотя Gmail их явно видит.

Подробнее здесь: https://stackoverflow.com/questions/798 ... t-files-ar
Ответить

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

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

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

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

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