1

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

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


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

2 ответа2

1

Большое спасибо за размещение вашего вопроса и ответа, @sme. Скрипт 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

Следующий скрипт 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()

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .