#python #imap #imaplib #gmail-imap
#python #imap #imaplib #gmail-imap
Вопрос:
У меня есть скрипт на python, использующий imaplib, который подключается к учетной записи gmail и сортирует электронные письма на основе тегов ‘ ‘, найденных в адресе электронной почты. Например: электронные письма, отправленные на myaccount root.foo.bar@gmail.com переместитесь в root foo bar.
Моя логика выглядит следующим образом: извлечь теги -> попытаться создать папки -> скопировать сообщение в папку.
Иногда электронное письмо будет приходить с теми же тегами, но в другом формате. myaccount root.FOO.BAR@gmail.com например, и приводит к такому выводу:
#Attempting to creating folder 'root/FOO/BAR'
('NO', ['[ALREADYEXISTS] Folder name conflicts with existing folder name. (Failure)'])
#Copying message to folder 'root/FOO/BAR'
('NO', ['[TRYCREATE] No folder root/FOO/BAR (Failure)'])
Таким образом, не удается создать папку, потому что папка с таким же именем уже существует (просто с другим регистром), но копирование завершается неудачей, потому что явная папка не существует.
Есть ли какой-нибудь умный способ, с помощью которого я могу определить правильный регистр существующей папки, чтобы я мог переместить сообщение без проблем?
Примечание: Это не так просто, как просто ввести все теги в нижний регистр. Пользователь подключается к учетной записи с помощью почтового клиента и часто вручную создает папки с любым регистром, который имеет смысл для них в данный момент.
Ответ №1:
Итак, Google жалуется, что папка уже существует, но затем выдает ошибку, когда вы пытаетесь что-то переместить в нее? Потрясающе.
В IMAP есть команда «СПИСОК» для составления списка доступных почтовых ящиков (папок):
https://www.rfc-editor.org/rfc/rfc3501#section-6.3.8
Способ доступа к этому зависит от вашей клиентской библиотеки IMAP. Вот пара примеров.
Комментарии:
1. В точности мои мысли. Хотя спасибо — я думаю, что буду использовать list для создания словаря существующих в настоящее время папок и использовать теги. lower() в качестве ключей. Я опубликую свое решение, когда буду его реализовывать.