Работа с чувствительностью к регистру имени почтового ящика IMAP

#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() в качестве ключей. Я опубликую свое решение, когда буду его реализовывать.