Добрый день, уважаемые коллеги!
Хочу снова обратиться за Вашей помощью.
Готов ее оплатить.
Сначала изложу суть задачи, которую нужно решить.
Если Вы можете ее решить успешно, то пишите мне,
мы обсудим возможные условия сотрудничества.
Итак.
Есть исходный файл текстового формата, в котором
содержатся письма (электронные), сохраненные в этот
файл по стандарту mail unix box. На самом деле, даже
если Вы не знаете этот стандарт, это не проблема,
т.к. файл можно просмотреть и легко станет понятно,
где там письма и где в них служебная информация.
Примерный формат этого текстового файла таков, что все письма
расположены линейно и разделены едиными разделителями,
начинаются со строго одинакового заголовка и т.п., т.е.
отделять письма друг от друга можно автоматически +
каждое письмо содержит заголовок и тело. В заголовке находится
служебная информация, четко структурированная. Подробнее
рекомендую посмотреть ссылку (о стандартах MIME для e-mail):
http://www.mhonarc.org/~ehood/MIME/
В файле примере, архив которого можно скачать по ссылке:
http://soros.cima.ru/temp/ctrlg-test-3-threads.zip ~55 kB
содержится 31 письмо, объединенные в 3 темы (цепочки).
Пример цепочки (темы) можно посмотреть по ссылке:
http://soros.cima.ru/temp/ctrlg-test-3-threads.png ~5 kB
В первой теме 15 писем, во второй 14 писем, в третьей 2 письма.
Все письма в кодировке KOI8-R, и закодированы в quoted printable.
Чтобы на выходе получить обычный текст, нужно будет декодировать
quoted printable текст. Я делал это в PHP с помощью функции
quoted_printable_decode(); Поскольку в этом формате в теме письма
появляются лишние символы, то я применял вот такую конструкцию
(переменная $sbj содержит в себе строку с темой письма):
$sbj = eregi_replace("=\?koi8-r\?Q\?","",$sbj);
$sbj = eregi_replace("\?=","",$sbj);
$sbj = quoted_printable_decode($sbj);
Возможно, Вы сами найдете более элегантный вариант перекодировки
текста, впрочем, суть задачи не в этом.
Задача:
На основе текстового файла mail unix box (см. архив примера по ссылке)
http://soros.cima.ru/temp/ctrlg-test-3-threads.zip ~55 kB
необходимо создать базу данных писем (предпочтительно в формате MySQL)
со следующими полями:
1) MessageID - ключевое поле, значения в нем не повторяются,
определяет уникальность письма (если при парсинге файла
вдруг обнаружатся 2 оиднаковых MessageID, то такое письмо-
дубль сохранять в виде отдельной записи не нужно);
2) From-mail - электронный адрес, с которого отправлено письмо;
3) Subject - тема письма;
4) Thread - ? - нужно подумать детальнее над этим полем,
пока предполагается следующее:
- поле пустое, если с этого письма начата новая тема
(т.е. письмо не ссылается ни на какое иное письмо,
т.е. иначе говоря, не найдены заголовки референсов),
- поле содержит MessageID письма, на которое есть ссылка,
(т.е. есть в заголовке письма хедер In-Reply-To: или
References:, на основе которых и определяется ссылка);
5) Date - дата формирования письма (в данном конкретном случае
берется из MessageID, т.к. он сформирован следующим образом:
20080208092323.7235***@e*****.subscribe
формат первой части таков:
ггггммддччммсс. после точки порядковый номер по нарастающей;
6) Time - время сообщения берется из MessageID (в нашем случае)
- время будет московское (т.е. для всех писем единое);
7) Text - текст письма, т.е. непосредственного его тело.
8) Atten - поле "внимание" - логическое - 1 если нужно привлечь
внимание к конкретной записи, 0, если не нужно.
- 1 присваивается, если тема письма начинается с Re: или
Re[ а поле Thread пустое (т.е. мы фиксируем разрыв цепочки).
При запуске программы (скрипта) должна формироваться база данных.
Если база данных есть (лучше такой вариант тоже предусмотреть), то
добавляются лишь те записи, которых там не было.
Вот, собственно говоря, всё.
Я буду рад любым откликам.
Если будут нужны какие бы то ни было уточнения, пожалуйста,
не стесняйтесь спрашивать меня. Вы можете общаться со мной
через этот диск.лист или писать мне напрямую (в теме обязательно
тогда напишите, что по поводу базы данных из Mail Unix Box):
slavnikov***@c*****.by
Моя ICQ: 115041944 (но е-мэйлом общаться надежнее)
Мой телефон: +375 29 629-30-43 (можно звонить или слать SMS).
ЗАРАНЕЕ ВСЕМ СПАСИБО!
p.s. Напоминаю, готов оплатить эту работу деньгами.
--
24.03.2008 - 13:01
С уважением, Славников Дмитрий
http://subscribe.ru/author/9810
E-mail: slavnikov***@c*****.by
Mobile: (+375 29) 629-30-43
ICQ: 115041944