Имя файла почтового сообщения - mailbox.Maildir

Как можно безопасно и, надеюсь, с помощью стандартных инструментов python для Maildir найти полное имя файла и путь к сообщению Maildir. Я хочу записать файл mail-message в файл tarfile, прежде чем удалить его.

Я импортирую почтовый ящик и tarfile (++)

Контекст:

Список Maildirs (созданный из текстового файла)

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

import mailbox
# Creating the list
for maildir in maildir_list
    inbox = mailbox.Maildir(maildir, factory=None, create=False)
      # Looping over folders, if (folder = Trash)
    for key,msg in inbox.iteritems():
        my_list.append(maildir, inbox, key, foldername

Затем перебираем список, чтобы добавить письма в файл tarfile и удалить (удалить) их.

    import tarfile,mailbox
    # _box is allready initialized in the previous function
    for _maildir, _box, _key, _foldername in __my_list:
        __msg = _box[_key]
        __subdir = __msg.get_subdir()
        __suffix   = mailbox.Maildir.colon + __msg.get_info()
        if __suffix == mailbox.Maildir.colon:
            __suffix = ''
        __file_name = "%s/.%s/%s/%s%s" % ( _maildir, _foldername, __subdir, _key, __suffix )

        try:
            tar.add(__file_name)
            _box.discard(_key)
        except Exception as inst:
            error_type = type(inst)
            log_text = "%s\: ERROR %s - %s" % (error_type, __file_name, inst)
            log_this( logKeySub, log_text )
            e.write(log_text + "\n")

Я просмотрел документы по питону для почтового ящика и электронной почты, выполнил поиск в google, stackru и т. Д. На данный момент я прибегаю к созданию пути и имени файла с помощью _maildir, _foldername, _key и get_info().

Редактировать: на основе комментария t-8ch я сделал эту корректировку:

for _maildir, _box, _key, _foldername in __my_list:
    try:
        __file = _box._toc[_key]
        __file_name = "%s/.%s/%s" % ( _maildir, _foldername, __file )
    except Exception as inst:
            error_type = type(inst) # Type Exception, inst.args, inst
            log_text = "%s\: ERROR with %s/.%s - %s - %s" % (error_type, _maildir, _foldername, _key, inst)
            log_this( logKeySub, log_text )
            e.write(log_text + "\n")
            continue

Пробный заезд доказал, что он работает очень хорошо.

1 ответ

Решение

Ты можешь использовать Maildir._toc, Это словарь, отображающий ключи писем на путь к соответствующему файлу. Этот словарь построен в Maildir._refresh(), Это позволяет отложить чтение почтового файла только по требованию и, таким образом, уменьшает время обновления списка всех писем (что происходит довольно часто).

(Я нашел это в источнике)

Другие вопросы по тегам