Как бы я дифф двух файлов mbox в умный способ?

У меня есть два файла mbox, содержащие около 6K писем каждый. Они должны быть более или менее идентичны, хотя #1 содержит около 100 писем, которые #2 не содержит. Я хотел бы создать третий файл mbox, содержащий мои 100 сообщений-diff, так сказать.

Я использовал для автоматической пересылки сообщений из одного почтового ящика в другой (на стороне сервера), который случайно не переслал несколько сообщений по какой-то странной неопределенной причине. #2 является почтовый ящик, в который были направлены письма-много сообщений с дополнительными заголовками, содержащими информацию о том, как они были переадресованы. #1 свежий дамп, с помощью IMAP, 6к непрочитанных сообщений.


Я работаю с Thunderbird под Linux.

16
задан s-m-e
22.02.2023 8:14 Количество просмотров материала 2553
Распечатать страницу

2 ответа

следующий скрипт Python решает проблему:

import mailbox

inbox_2 = mailbox.mbox('inbox_2_file')
inbox_1 = mailbox.mbox('inbox_1_file')

inbox_diff = mailbox.mbox('inbox_diff_file', create=True)

inbox_2_ids = []
for message in inbox_2:
    inbox_2_ids.append(message.get('Message-ID'))

for message in inbox_1:
    if message.get('Message-ID') not in inbox_2_ids:
        inbox_diff.add(message)

inbox_diff.flush()
1
отвечен s-m-e 2023-02-23 16:02

большое спасибо за размещение вашего вопроса и ответа, @s-m-e. Скрипт Python прекрасно работает, если каждое сообщение электронной почты содержит идентификатор сообщения. К сожалению, это не всегда так, поскольку Message-ID на удивление не является обязательным полем.

С очень небольшими изменениями, ваш скрипт может быть использован для создания нового файла mbox, содержащего все сообщения электронной почты, в которых отсутствует поле Message-ID:

import mailbox

inbox_1 = mailbox.mbox('inbox_1_file')

inbox_missing_message_id = mailbox.mbox('inbox_missing_message_id_file', create=True)

for message in inbox_1:
    if message.get('Message-ID') is None:
        inbox_missing_message_id.add(message)

inbox_missing_message_id.flush()
1
отвечен Miles Wolbe 2023-02-23 18:19

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх