**Мой вопрос:**Почему 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
Мобильная версия