Получение всех новых сообщений из Maildir в python
У меня есть почтовый каталог:
foo@foo:~/Maildir$ ls -l
total 288
drwx------ 2 foo foo 155648 2010-04-19 15:19 cur
-rw------- 1 foo foo 440 2010-03-20 08:50 dovecot.index.log
-rw------- 1 foo foo 112 2010-03-20 08:49 dovecot-uidlist
-rw------- 1 foo foo 8 2010-03-20 08:49 dovecot-uidvalidity
-rw------- 1 foo foo 0 2010-03-20 08:49 dovecot-uidvalidity.4ba48c0e
drwx------ 2 foo foo 114688 2010-04-19 16:07 new
drwx------ 2 foo foo 4096 2010-04-19 16:07 tmp
И в Python я пытаюсь получить все новые сообщения (Python 2.6.5rc2). Во-первых, получение "Maildir" работает:
>>> import mailbox
>>> md = mailbox.Maildir('/home/foo/Maildir')
>>> md.iterkeys().next()
'1269924477.Vfc01I4249fM708004.foo'
Но как мне получить доступ к "Maildir/new"? Это не работает:
>>> md = mailbox.Maildir('/home/foo/Maildir/new')
>>> md.iterkeys().next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/mailbox.py", line 346, in iterkeys
self._refresh()
File "/usr/lib/python2.6/mailbox.py", line 467, in _refresh
for entry in os.listdir(subdir_path):
OSError: [Errno 2] No such file or directory: '/home/foo/Maildir/new/new'
>>>
Есть идеи?
1 ответ
Решение
Папка /home/foo/Maildir/new
это не Maildir, это часть maildir. Если вы хотите использовать mailbox.Maildir
, вам нужно игнорировать подкаталоги и файлы, которые являются частью спецификации. В противном случае вы вообще не будете рассматривать его как Maildir.
Модуль Maildir должен читать сообщения от new
а также cur
и может при желании перемещать сообщения из new
в cur
когда ты close()
или же flush()
, Чтобы узнать, как эта реализация делает это, вам нужно взглянуть на код.
Рекомендации: