Чтение почты из папки mbox с использованием python - PullRequest
4 голосов
/ 20 января 2012

Я хочу прочитать почту из файла mbox и выполнить некоторые действия, основываясь на этом. Я не хочу писать / изменять файл mbox, но он будет изменен другим процессом (в основном добавлением новых писем).

Я читаю эту документацию. http://docs.python.org/library/mailbox.html#mailbox.mbox

Но я не понимаю следующее

  1. Должен ли я вызвать lock () перед чтением почты? (Я не пишу файл)
  2. В любом случае я могу получить обратный вызов, когда другой процесс (thunderbird) изменяет файл?
  3. Отражены ли изменения в файле в объекте mbox? Я имею в виду, что после создания объекта mbox, если в файл будет добавлено новое письмо, получу ли я доступ к сообщению с помощью объекта? Или мне снова создать новый объект?

PS: мне не разрешено устанавливать какие-либо плагины Thunderbird: (

1 Ответ

2 голосов
/ 22 января 2012
  1. Нет необходимости звонить Mailbox.lock(), если вы не изменяете mbox.Цитата из документации Mailbox.lock() (выделено мной):

    Вы должны всегда блокировать почтовый ящик перед тем, как внести любые изменения в его содержимое.

  2. Уведомление об изменениях файла выходит за рамки модуля почтового ящика.В системах Linux вы можете использовать pyinotify для получения этой функциональности.

  3. Ответ также содержится в документации :

    Итератор почтового ящика по умолчанию перебирает представления сообщений, а не ключи, как это делает итератор словаря по умолчанию.Кроме того, модификация почтового ящика во время итерации является безопасной и четко определенной.Сообщения, добавленные в почтовый ящик после создания итератора, не будут видны итератору.Сообщения, удаленные из почтового ящика до того, как итератор их выдаст, будут пропущены без уведомления, хотя использование ключа от итератора может привести к> исключению KeyError, если соответствующее сообщение впоследствии будет удалено.

    Короче говоря, вынеобходимо создать новый экземпляр Mailbox после изменения файла mbox.

...