Обзор: При получении электронной почты с помощью imap с помощью imaplib
в Python возвращенная полезная нагрузка представляет собой список кортежей электронной почты ... с одним байтом b')'
между каждым кортежем.Почему imaplib возвращает одиночную скобку после каждого письма?
Я использую стандартную imaplib fetch
вызов дается разделенных запятыми байт строка UIDs:
resp, data = mailbox.fetch(b'1,2,3'), 'RFC822')
Однако data
выглядит следующим образом:
[
(b'1 (BODY[HEADER.FIELDS (DATE TO CC FROM SUBJECT)] {181}',
b'Date: Thu, 18 Jul 2013 16:08:07 -0700 From: Blah Blah\r\n\r\n'
),
b')',
(b'1 (BODY[HEADER.FIELDS (DATE TO CC FROM SUBJECT)] {181}',
b'Date: Thu, 18 Jul 2013 16:08:07 -0700 From: Blah Blah\r\n\r\n'
),
b')',
...
]
Так что теперь, когда я итерацию над этим список, я должен пропустить любой другой элемент, чтобы избежать b')'
. Очевидно, это не сложно ... но мне кажется, что я делаю что-то не так, или что imaplib
следует лучше разобрать эту закрывающуюся круглую скобку.
Почему это скобки есть, и есть ли способ правильно использовать IMAP для его устранения?
Мысли:
Похоже, закрывающая скобка является built-in part of RFC822, но от того, что я понимаю этой спецификации (что не очень, если честно) скобка не допускается, чтобы прийти до конца полезной нагрузки, которая, на мой взгляд, была бы после того, как все сообщения будут прочитаны.
Edit: Кстати, эта скобка показывает вверх или нет, вы выборки нескольких сообщений ... даже если вы будете следовать imaplib's own example, вы получите обратно данные похожий [(headers, payload), b')']
Спасибо за четкое объяснение. Я согласен - кажется, что просто разобрать каждый отдельный компонент сообщения в один объект ... полями будут UID, команда, RFC#, размер байта, литерал str и список close 'b ')'' ... возможно для него есть превосходная библиотека python, но я не знаю об этом. – tyleha
Разборки на удивление сложны, особенно для команд расширения. Вы можете легко выполнить простой анализ, но для предоставления объектов высокого уровня требуется знание любых расширений, которые могут нуждаться в поддержке. Некоторые библиотеки с представлениями высокого уровня (например, php) не могут поддерживать ничего, что не было в нем. – Max