Gmail IMAP: любой способ найти все метки (папки), в которых находится конкретное сообщение?

Итак, IMAP Gmail немного "странный". Они используют папки IMAP для представления меток. Я считаю, что обычно электронная почта в IMAP может принадлежать только одной "папке", однако с Gmail сообщение электронной почты может принадлежать многим "папкам", что дает нам очень близкую функциональность к ярлыкам.

мой вопрос в том, что я пишу клиент gmail (так что такие вещи, как главные роли, удаление и архивация, работают немного более интуитивно, чем стандартный клиент imap), но я хотел бы иметь возможность отображать для данного письма, в каких папках (ярлыках) он находится.

насколько я могу судить, это непросто (мне пришлось бы перебирать каждое сообщение в каждой папке, чтобы увидеть, в каких оно).

кто-нибудь знает, есть аккуратный способ сделать это? Или я прав, предполагая, что нет легкого пути?

2 ответов


Gmail предоставляет набор расширений IMAP, чтобы позволить авторам клиентов IMAP обеспечить более Gmail-подобный опыт через IMAP. См. расширения IMAP Gmail (X-GM-EXT-1).

чтобы получить метки для конкретного сообщения, Вы можете вызвать команду IMAP FETCH с помощью X-GM-ЭТИКЕТКИ. См.доступ к ярлыкам Gmail: X-GM-LABELS


самый простой (хотя и не надежный) способ-захватить значения сообщений"Message-ID заголовки. Затем выполните итерацию по папкам" label " и выполните ПОИСК IMAP по линии

A001 SEARCH HEADER MESSAGE-ID "your-msgid-value"

Если вы получите какие-либо результаты обратно в untagged SEARCH ответ, сообщение имеет выбранную метку"папка".