Messarge home page

Комплект messarge предназначен для работы с почтовыми архивами. Это прежде всего инструмент для построения при помощи html, перла или скриптов чего нибудь более дружественного пользователю, чем голый messarge.

Главные приоритеты при разработке

-- сохранение почтового архива "как есть" - таким образом он может работать в своем первоначальном качестве как почтовый ящик;
-- скорость работы
Для ускорения операций для каждого почтового ящика ведется индексный файл, и большинство операций производится с индексом, а не с ящиком непосредственно.

Основные свойства комплекта

-- хорошо сопрягается с разными системами, например, с majordomo, httpd, мейлерами.
-- скорость индексирования - 10 Мбайт почтовый ящик индексируется около 14 сек 200 МГц процессором, 165Мбайт ящик с 75000 писем в нем индексируется чуть меньше 30 мин на 300МГц процессоре, вычача полного индекса с 75000 писем, отсортированного по темам (или неотсортированного, неважно) - меньше 2 сек, если все в памяти (около 256 байт/письмо).
-- при добавлении почты в ящик производится не полное индексирование, а только добавленной части почтового ящика.
-- такое индексирование может производиться при каждом обращении к индексу, если разрешено и индекс старше архива
-- выдача индекса почтового ящика производится по формату, задаваемом пользователем
-- правильно обрабатываются заголовки по RFC-2045 & Ko, в том числе на русских языках :-).
Messarge изначально проектировался для устойчивой работы под высокой нагрузкой, этим он выгодно отличается от ближайших аналогов.

Примеры использования messarge

В комплекте есть примеры .shtml страниц с использованием messarge. Здесь же приводятся простые примеры для ознакомления.
Как это выглядит, можно посмотреть на реально живущем списке. Обращаю специальное внимание на тот факт, что оформление может быть самым разным, messarge достаточно гибок, что бы не навязывать стиль. Если не согласны, готов выслушать и, возможно, исправить.

mesdbc - программа создания и обновления индекса

Создать индекс idx1 для почтового архива /path/mail:
mesdbc -cf /path/mail idx1
Обновить idx1, если в /path/mail добавилась почта:
mesdbc -u idx1
Изменить индекс так, что бы при каждом обращении к нему он при необходимости обновлялся, и сохранить его в idx:
mesdbc -mu idx idx1
Теперь у нас есть два разных индекса одного почтового файла. При обращении через idx обновление индекса происходит, а idx1 надо обновлять явно.
Если надо полностью перестроить всю систему ссылок с нуля (такое обычно требуется при введении каких либо новшеств в системе ведения списков) то это делается так (ВНИМАНИЕ! -mu != -um):
mesdbc -um idx

mestun - инструмент администратора для работы с индексом

Если в одном из примеров выше /path/mail - это архив за годы, то он весь проиндексируется примерно одним и тем же временем индексирования. Тогда выборка интервала не будет правильно работать. Что бы исправить время индексирования таким образом, как будто письма индексировались примерно в то время, какая дата в них стоит:
mestun -t 5 idx
При этом даты будут сверяться с 5 предыдущими и 5 следующими письмами с тем, что бы случайные ошибочно датированные письма не сломали порядок. Если не надо таких сложностей, то поставить дату из заголовка в качестве даты индексирования:
mestun -t 0 idx
Пометить письма 4, 5 и 9 как принадлежащие списку 2
mestun -l 2 idx 4 5 9

mesarc - программа выдачи индексов и почты

Посмотреть заголовки писем во всем ящике:
mesarc -f'%S\n' idx
Посмотреть даты прихода писем за последние 86400 сек (сутки) с номерами, месяц по русски:
mesarc -s 86400 -f'%N %Y %м %d %h:%m:%s\n' idx
Записать несколько писем по темам 2 и 5 в файл file без изменений:
mesarc -l 2 -l 5 -f'%=' idx 23 46 47 > file
а остальные письма по этим темам в rest
mesarc -l 2 -l 5 -i -f'%=' idx 23 46 47 > rest
Выдать список писем, отсортированный по темам, для передачи по http:
mesarc -twf'<li><strong><a href="message.shtml?%N">%S</a></strong>
<em> (%v) %d %м %h:%m -- %a</em></li>
' idx
Эта команда выдает индекс почтового архива с 75000 писем в нем за меньше двух секунд с процессором 300МГц. Объем html файла с этим индексом больше 10 Мбайт.
Выдать список тем для передачи по http:
mesarc -ttwf'<li><strong><a href="message.shtml?%N">%S</a></strong>
<em> (%v) %d %м %h:%m -- %a</em></li>
' idx
Посмотреть список заголовков писем (с номерами), но при этом НЕ обновлять индекс, даже если в нем отмечено, что при каждом обращении индекс надо обновлять:
mesarc -uf'%N %S\n' idx
Вывести 2й аттач в 5ом письме без заголовков (бинарником)
mesarc -bf'%e' idx 5/2
а для передачи по http, если надо вставить в cgi, с заголовками
mesarc -bf'%E' idx 5/2
А вот эта команда - пример выдачи страницы с письмом. Само письмо показывается, только если оно текстовое, иначе ставится ссылка для получения бинарника по http. Так обрабатывается каждый аттач, тексты при выдаче перекодируются в koi8-r, если они были в другой кодировке и кодировка правильно отображена в письме.
mesarc -wf'<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=koi8-r\">
<title>%S</title>
</head>
<body>
[<a href=index.html>head of list</a>]
[%-|<a href=message.shtml?%-%>&lt;&lt;&lt;</a>|---|]
<b>%N</b>
[%+|<a href=message.shtml?%+%>&gt;&gt;&gt;</a>|---|]
[%p|<a href=message.shtml?%p%>prev</a>|-no-|]
[%n|<a href=message.shtml?%n%>next</a>|-no-|]
[<a href=mailquo.shtml?%N>exact message</a>]
<h1>%S</h1><em>%d %м %Y %h:%m</em> -- <a href=mailto:%A>%a</a>
<hr>%e<hr>
<ul>
%t^<li><strong>%S</strong>
<em> (%v) %d %м %Y %h:%m -- %a</em></li>
^<li><strong><a href=\"message.shtml?%N\">%S</a></strong>
<em> (%v) %d %м %Y %h:%m -- %a</ems>></li>
^</ul><hr>
</body>
' /www/data/list/db "номер письма"

mesraw - инструмент администратора для исследования почтовог ящика

Посмотреть все заголовки "In-Reply-To:" в ящике (работает без файла индекса):
mesraw -qr < /path/mail
Посмотреть 3 письмо в ящике (работает без файла индекса):
mesraw 3 < /path/mail

Недостатки

-- не все еще доделано, что собираюсь (но примеры выше работоспособны)
-- RFC-822, RFC-2045+ реализованы не со всеми тонкими деталями
-- программа свежая, ашипки могут быть
-- messarge в магазин не ходит и по спинке не гладит :-)

Как получить?

Вот, можно брать, проверять, сообщать об ошибках.

А.А.Бабайлов