Как бы я разумно различал два файла mbox?

544
s-m-e

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

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


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

1

2 ответа на вопрос

1
s-m-e

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

Большое спасибо за размещение вашего вопроса и ответа, @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() 
Интересно, я не знал, что это не обязательно. Большое спасибо за указание на это. Тогда возникает реальный вопрос, как бы вы откорректировали фактический код различий. Как вы можете выяснить, какая электронная почта является надежной, например, как вы можете безопасно определить «альтернативный идентификатор»? Я думал об использовании сочетания сюжетных линий и временных меток, но последняя, ​​кажется, действительно ненадежна во многих других отношениях. s-m-e 7 лет назад 1

Похожие вопросы