Тестовый набор данных для анализа электронной почты - PullRequest
0 голосов
/ 23 ноября 2018

Я оцениваю библиотеки парсинга электронной почты для проекта Elixir / Erlang и пытаюсь выяснить, какой из них «лучший», или мне стоит создать свой собственный.Критерии, которые я использую для «лучших», таковы: какая библиотека наиболее соответствует RFC.

Проблема, с которой я сталкиваюсь, заключается в том, что (неудивительно), что каждая библиотека имеет свои собственные тесты, поэтому, если я хочу сравнитьЯ должен запустить их против тех же испытаний.

Существует ли коллекция тестовых электронных писем, которую я могу использовать для оценки?Или мне лучше скопировать тесты из более активной библиотеки Java / Ruby / Python?

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

У меня есть коллекция mbox, которую я использую для тестирования парсеров MIME.

https://github.com/jstedfast/MimeKit/tree/master/UnitTests/TestData/mbox

Эта ссылка представляет собой каталог, содержащий несколько файлов *.mbox.txt и их эквивалентные файлы сводки (это лишь некоторые метаданные о каждом сообщении, которые должно быть легко получить из сообщения после того, как синтаксический анализатор проанализировал его из mbox).

Есть также некоторые *.html файлы, которые являются только извлеченными телами HTML-сообщений, которыеиспользуются для проверки логики для выяснения, какая часть тела является фактическим телом сообщения.Вы, вероятно, можете игнорировать это, поскольку речь идет не о rfc-совместимости.

Основной mbox для просмотра и использования - это файл jwz.mbox.txt - это файл mbox, который я получил от Джейми Завински из Netscape Mail, известного вначало 2000-х годов для тестирования парсера Netscape Mail.

simple.mbox.txt - это очень короткий mbox из 3 сообщений с вложенными мультипаратами, использующими разные наборы граничных маркеров.Второе и третье сообщения - это два, которые, скорее всего, сломают парсеры (первое может сломать случайные парсеры mime, написанные новичками на sourceforge или github, но ничего серьезного не написанные).Второе сообщение имеет все вложенные мультипликаторы, используя boundary="x", что нарушит парсеры, которые не используют граничный стек.Третье сообщение имеет вложенные мультипликаторы, которые используют пустую границу строки (например, boundary="").

Затем есть content-length.mbox.txt для проверки правильности обработки синтаксическим анализатором заголовков Content-Length.

unmunged.mbox.txt похоже, что это было случайно зафиксировано - похоже, что я написал это, чтобы проверить, что Thunderbird сделал с заголовками Content-Length и без связи со строками?

В любом случае, чтобы увидеть, как я сгенерировал вывод для сводкифайлы, которые вы можете проверить https://github.com/jstedfast/MimeKit/blob/master/UnitTests/MimeParserTests.cs#L624

Такие методы, как DumpMimeTree и т. д., перечислены в списке выше этого метода в файле.

У меня есть очень похожий набор тестов для моего синтаксического анализатора C MIMEа также (если вы предпочитаете читать C, а не C #): https://github.com/jstedfast/gmime/blob/master/tests/test-parser.c

Дополнительные мысли:

При оценке синтаксических анализаторов MIME следует помнить, что вы на самом деле не хотитестрогое соблюдение rfc при разборе, потому что это означает, что многие сообщения не будут проанализированы.Что вам действительно нужно, так это библиотека, которая будет обрабатывать как можно больше ошибок при выводе новых сообщений, которые строго соответствуют rfcs (насколько это возможно, в любом случае).

Хотя эти файлы mbox должны быть полезны дляанализаторы, которые вы тестируете, по крайней мере достаточно надежны, чтобы справиться с ними, это не обязательно конец тестирования.

Одна из следующих вещей, которые я делаю при оценке синтаксического анализатора MIME, - проверка того, как анализатор анализирует заголовки адресов,Делает ли это что-то глупое, например разделение значения заголовка на ,?Если это так, это вышло.Я бы, вероятно, сказал, что лучше использовать подход токенизатора, или, возможно, даже не стоит об этом думать.

То же самое относится и к декодированию rfc2047.

Вот напыщенная речь, которую я написал в 2013 году, когда был вваша позиция в поисках достаточно хорошего парсера MIME для C # /. NET: https://jeffreystedfast.blogspot.com/2013/09/time-for-rant-on-mime-parsers.html

Это ссылка на предыдущую статью, которую я написал, в которой рассказывается о том, почему декодирование заголовков (rfc2047) трудно сделать правильно: https://jeffreystedfast.blogspot.com/2013/08/why-decoding-rfc2047-encoded-headers-is.html

Я полагаю, что проблема с попыткой оценить библиотеку MIME-парсера / электронной почты заключается в том, что вам необходимо быть близко знакомыми со спецификациями, чтобы иметь большую уверенность в попытках оценить их за пределамипросто "может ли он разобрать мой случайный набор сообщений?"

Я надеюсь, что это было полезно, но ... да, если ваш опыт похож на мой в далеком 2013 году в поисках приличного синтаксического анализатора C #,вам нужно написать свой собственный - просто, пожалуйста, пожалуйста, прочитайте и следуйте спецификациям, если вы делаете, потому что в противном случае вы просто в конечном итогепредоставление другим разработчикам электронной почты кошмаров.

0 голосов
/ 23 ноября 2018

Я не думаю, что вы найдете какой-либо полный набор тестов для разбора электронной почты в Elixir, но это был бы очень хороший проект для работы.

Если я собираюсь начать проекттаким образом, я, вероятно, выбрал бы тесты для любой библиотеки, оценил бы, насколько она завершена (на основе RFC), и создал бы общий способ запустить его для любой библиотеки.

DockYard / elixir-mail /blob / master / test / mail / parsers / rfc_2822_test.exs может быть хорошей отправной точкой для вас.

...