Systems Administration Toolkit: Контроль за хранением почты

В этой статье предлагаются способы контроля и сбора статистики об использовании почтовых ящиков. Журналы почтовых программ дают богатую пищу для размышлений, например, о том, каким образом и как часто каждый пользователь предпочитает работать с почтой. В некоторых UNIX(R)-системах можно добраться и до более детальной информации, что поможет определить, кто использует свои почтовые папки эффективно, а кому неплохо бы пройти инструктаж.

Мартин Браун, внештатный автор, консультант

Мартин Браун (Martin Brown) пишет статьи уже более семи лет. Он является автором многочисленных книг и статей по различным темам. Его квалификация охватывает множество платформ и языков разработки - Perl, Python, Java™, JavaScript, Basic, Pascal, Modula-2, C, C++, Rebol, Gawk, Shellscript, Windows®, Solaris, Linux, BeOS, Mac OS X и т.д., а также Web-программирование, системное управление и интеграция. Мартин является внутренним экспертом (SME) компании Microsoft® и регулярно пишет для ServerWatch.com, LinuxToday.com и IBM developerWorks. Он также принимает участие в блогах Computerworld, The Apple Blog и на других сайтах. Связаться с ним можно через его Web-сайт.



08.02.2010

Несколько слов об этой серии статей

Типичный администратор UNIX® имеет свой привычный набор утилит и приемов. Эти утилиты, последовательности командных строк и скрипты используются для упрощения различных процессов. Некоторые из этих инструментальных средств поставляются вместе с операционной системой, но знание большинства приемов приходит с опытом работы и желанием системных администраторов облегчить себе жизнь. Этот цикл статей посвящен эффективному использованию лучших инструментальных средств разных вариантов UNIX, в том числе упрощению процесса администрирования в гетерогенной среде.

Анализ почтовых журналов

Журналы различных почтовых сервисов содержат большое количество полезной информации, однако то, какая именно это информация, зависит от конкретной почтовой системы (sendmail, postfix, qmail и др.). В любом случае из журналов можно почерпнуть такие сведения:

  • Количество писем и частота их обработки
  • Частота обработки писем по каждому пользователю
  • Узлы и домены, больше других отправляющие и принимающие почту
  • Статистика по фильтрации спама и почтовых вирусов

Анализ журналов проливает свет на характер работы с почтой в вашей сети. Разбор журналов - сам по себе трудоемкий процесс, а результат сильно зависит от того, в каком формате ведутся журналы и насколько этот формат сложен для текстового разбора. Ниже представлена выдержка из журнала почтовой программы postfix, где видно, что запись об одном и том же сообщении занимает несколько строк (см. Листинг 1).

Листинг 1. Выдержка из журнала postfix
Nov 17 03:17:34 narcissus postfix/smtpd[14281]: connect from localhost[127.0.0.1]
Nov 17 03:17:34 narcissus postfix/smtpd[14281]: 4F4CB1109404: 
  client=localhost[127.0.0.1]
Nov 17 03:17:34 narcissus postfix/cleanup[14278]: 4F4CB1109404:
  message-id=<Pine.SOC.4.64.0711162015280.16833@logical.logical-approach.com>
Nov 17 03:17:34 narcissus postfix/qmgr[104]: 4F4CB1109404: 
from=<zfs-discuss-bounces@opensolaris.org>, size=7632, nrcpt=1 (queue active)
Nov 17 03:17:34 narcissus postfix/smtpd[14281]: disconnect from localhost[127.0.0.1]
Nov 17 03:17:34 narcissus postfix/smtp[14279]: DBA5B11093FD: 
to=<dev@gendarme.example.com>, relay=127.0.0.1[127.0.0.1], delay=11, 
  status=sent (250 2.6.0 Ok, i
d=08640-07, from MTA([127.0.0.1]:10025): 250 Ok: queued as 4F4CB1109404)
Nov 17 03:17:34 narcissus postfix/qmgr[104]: DBA5B11093FD: removed
Nov 17 03:17:34 narcissus postfix/pipe[14283]: 4F4CB1109404: 
  to=<dev@gendarme.example.com>, relay=cyrus, delay=0, 
  status=sent (gendarme.example.com)
Nov 17 03:17:34 narcissus postfix/qmgr[104]: 4F4CB1109404: removed
Nov 17 03:20:07 narcissus postfix/smtpd[14355]: 
  connect from narcissus.example.com[192.168.0.110]
Nov 17 03:20:07 narcissus postfix/smtpd[14355]: 
  disconnect from narcissus.example.com[192.168.0.110]
Nov 17 03:20:07 narcissus postfix/smtpd[14355]: 
  connect from narcissus.example.com[192.168.0.110]
Nov 17 03:20:07 narcissus postfix/smtpd[14355]: 
  disconnect from narcissus.example.com[192.168.0.110]
Nov 17 03:23:16 narcissus postfix/smtpd[14410]: 
  connect from f048226119.adsl.alicedsl.de[78.48.226.119]
Nov 17 03:23:17 narcissus postfix/smtpd[14410]: 6CAAE1109461:
  client=f048226119.adsl.alicedsl.de[78.48.226.119]
Nov 17 03:23:17 narcissus postfix/cleanup[14411]: 6CAAE1109461:
  message-id=<000901c828c9$037c1e48$b9cc3eb7@ggpxddd>
Nov 17 03:23:17 narcissus postfix/qmgr[104]: 6CAAE1109461: 
  from=<maxwell@research.nokia.com>, size=2051, nrcpt=1 (queue active)
Nov 17 03:23:18 narcissus postfix/smtpd[14410]: 
  disconnect from f048226119.adsl.alicedsl.de[78.48.226.119]
Nov 17 03:23:30 narcissus postfix/smtpd[14414]: connect from localhost[127.0.0.1]
Nov 17 03:23:30 narcissus postfix/smtpd[14414]: 
  62E941109473: client=localhost[127.0.0.1]
Nov 17 03:23:30 narcissus postfix/cleanup[14411]: 62E941109473:
  message-id=<000901c828c9$037c1e48$b9cc3eb7@ggpxddd>
Nov 17 03:23:30 narcissus postfix/qmgr[104]: 62E941109473: 
  from=<>, size=3220, nrcpt=1 (queue active)
Nov 17 03:23:30 narcissus postfix/smtpd[14414]: 
  disconnect from localhost[127.0.0.1]

К счастью, каждое сообщение имеет уникальный номер, поэтому все сведения о нем можно легко получить путем фильтрации. Для примера в Листинге 2 показаны строки, соответствующие сообщению с уникальным номером 4F4CB1109404, из которых уже легко извлечь нужную дополнительную информацию.

Листинг 2. Извлечение сведений об обработке отдельно взятого письма
Nov 17 03:17:34 narcissus postfix/smtpd[14281]: 4F4CB1109404: 
  client=localhost[127.0.0.1]
Nov 17 03:17:34 narcissus postfix/cleanup[14278]: 4F4CB1109404:
  message-id=<Pine.SOC.4.64.0711162015280.16833@logical.logical-approach.com>
Nov 17 03:17:34 narcissus postfix/qmgr[104]: 4F4CB1109404: 
  from=<zfs-discuss-bounces@opensolaris.org>, size=7632, nrcpt=1 (queue active)
Nov 17 03:17:34 narcissus postfix/pipe[14283]: 4F4CB1109404: 
  to=<dev@gendarme.example.com>, relay=cyrus, delay=0, status=sent 
  (gendarme.example.com)
Nov 17 03:17:34 narcissus postfix/qmgr[104]: 4F4CB1109404: removed

Из этого фрагмента становятся ясны следующие важные свойства письма:

  • Дата и время прихода
  • Отправитель
  • Получатель
  • Размер сообщения
  • Порядковый номер сообщения

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

Извлечение сведений из журнала

Прежде всего нам необходимо однозначно идентифицировать каждое письмо. Это возможно благодаря тому, что сервис postfix сопоставляет с каждым письмом уникальный идентификатор и отображает его вместе с информацией о письме в журнале. Например, в следующей строке:

Nov 17 03:17:34 narcissus postfix/pipe[14283]:
4F4CB1109404: to=<dev@gendarme.example.com>, \
relay=cyrus, delay=0, status=sent (gendarme.example.com)

идентификатор письма равен 4F4CB1109404; адрес получателя определяется из той же строки. Адрес отправителя находится в другой строке с тем же идентификатором письма:

Nov 17 03:17:34 narcissus postfix/qmgr[104]:
4F4CB1109404: from=\
<zfs-discuss-bounces@opensolaris.org>, size=7632, nrcpt=1 (queue active)

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

Из приведенной выше строки журнала видно, что размер сообщения равен 7632 байтам, а количество получателей равно 1.

В Листинге 3 приведен Perl-скрипт, который получает на вход содержимое журнала, извлекает из него нужную информацию и выдает итоговую статистику о количестве писем различного размера.

Листинг 3. Сбор полезной статистики на основе журнала
#!/usr/bin/perl
#
# Скрипт для извлечения статистики о письмах из журнала

# Для считывания времени в формате epoch мы используем 
# модуль Time::ParseDate, а затем - DateTime для 
# преобразования еще раз

use Time::ParseDate;
use DateTime;

# Используем файл, указанный в параметрах в командной строке

open(MAIL,$ARGV[0]) or die "Не удается открыть $ARGV[0]: $!\n";

# Объявляем структуру для хранения статистики

my $mails = {};

# Сканируем входной файл строка за строкой

while(<MAIL>)
{
    chomp;
    my $mailid = 0;

# Ищем 12-разрядный идентификатор письма в шестнадцатеричном формате

    if (m/: ([A-Z0-9]{12}):/)
    {
        $mailid = $1;
    }

# Извлекаем дату и преобразуем ее в формат epoch

    if (m/(\S+ \d+ \d{2}:\d{2}:\d{2}) .*? $mailid/)
    {
        $mails->{$mailid}->{date} = parsedate($1);
    }

# Извлекаем адрес отправителя и размер письма

    if (m/$mailid: from=<(.*?)>, size=(\d+),/)
    {
        $mails->{$mailid}->{from} = $1;
        $mails->{$mailid}->{size} = $2;
    }

# Извлекаем получателя

    if (m/$mailid: to=<(.*?)>/)
    {
        $mails->{$mailid}->{to} = $1;
    }
}

close(MAIL);

# На основе собранной информации формируем
# статистику в итоговой структуре

my $mailstats = {};

foreach my $mailid (keys %{$mails})
{

# Не создавать итоговую запись, если недостаточно информации
# (т.е. поле отправителя или получателя пусто)

    if (!defined($mails->{$mailid}->{to}) ||
        !defined($mails->{$mailid}->{from}) ||
        $mails->{$mailid}->{to} !~ m/[a-z]/ ||
        $mails->{$mailid}->{from} !~ m/[a-z]/)
    {
        next;
    }
# Подсчитываем количество писем для каждого получателя
    $mailstats->{$mails->{$mailid}->{to}}->{count}++;

# Суммируем размеры писем для каждого получателя
    $mailstats->{$mails->{$mailid}->{to}}->{size} +=
        $mails->{$mailid}->{size};

# Подсчитываем количество писем от каждого отправителя
    $mailstats->{$mails->{$mailid}->{from}}->{count}++;

# Суммируем размеры писем от каждого отправителя
    $mailstats->{$mails->{$mailid}->{from}}->{size} +=
        $mails->{$mailid}->{size};

# Суммируем ту же информацию, но в зависимости от даты
    if (defined($mails->{$mailid}->{date}))
    {
        my $dt = DateTime->from_epoch(
            epoch => $mails->{$mailid}->{date})->ymd('');
        my $mailto = $mails->{$mailid}->{to};
        my $mailfrom = $mails->{$mailid}->{from};

        $mailstats->{$mailto}->{_date}->{$dt}->{count}++;
    $mailstats->{$mailto}->{_date}->{$dt}->{size} +=
            $mails->{$mailid}->{size};

        $mailstats->{$mailfrom}->{_date}->{$dt}->{count}++;
    $mailstats->{$mailfrom}->{_date}->{$dt}->{size} +=
            $mails->{$mailid}->{size};
    }
}

# Выводим информацию о количестве и размере писем в зависимости от адреса

foreach my $address (sort keys %{$mailstats})
{
# Выводим информацию о письмах, в которых упоминается локальный адрес
    if ($address =~ m/@.*example\.com$/)
    {
        printf('%-40s %5d %9d',
               $address,
               $mailstats->{$address}->{count},
               $mailstats->{$address}->{size});
    print("\n");
    }
}

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

Листинг 4. Полученная статистика
023649@gendarme.example.com                    5      8922
admin@gendarme.example.com                     5     13141
answersquad@gendarme.example.com              50    348712
buy@gendarme.example.com                      79    806097
buy@example.com                                2      2911
dev@gendarme.example.com                     165   1010980
dev@example.com                                8     94430
finance@gendarme.example.com                   4     14493
flummox@gendarme.example.com                 203    858775
klhxs@example.com                              4      8080
dj@gendarme.example.com                       96    703754
dj@example.com                                 2      2063
mcwhoever@gendarme.example.com                 7    137185
mlists@gendarme.example.com                   38    473165
play@gendarme.example.com                     26    155220
postmaster@gendarme.example.com                5     15561
fhf@gendarme.example.com                     101    836863
fhffilter@gendarme.example.com                14    225081
spam@gendarme.example.com                     49    349750
tmbg-org-dj@gendarme.example.com              16    126144
ybxmbjw@gendarme.example.com                   1      1342

Можно заметить, что некоторым пользователям приходит относительно много почты, в то время как другим - совсем мало.

После изучения этой статистики возникает вопрос, рационально ли используют почту сотрудники, имеющие большой почтовый трафик.

Если вашу почтовую систему обслуживает единственный сервер, который не справляется с нагрузкой, то разумно предоставить отдельный сервер для обслуживания нескольких клиентов с большим трафиком, а остальных "безобидных" пользователей перевести на второй сервер. При такой схеме нагрузка будет эффективно распределена.

Теперь, имея информацию о "жадных до почты" клиентах, предлагаю поподробнее узнать, каким образом у них организовано хранение почты.

Форматы хранения почтовых ящиков

Одним из наиболее результативных методов контроля за работой почты является анализ почтовых ящиков пользователей и отдельных сообщений, хранящихся в них. Метод спорный, так как для некоторых пользователей такой контроль выглядит как стороннее вмешательство. Также многие убеждены, что то, каким образом они хранят и архивируют почту, - их личное дело.

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

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

Большинство почтовых систем работают по протоколу IMAP (Internet Mail Access Protocol, Интернет-протокол доступа к почте), при котором все сообщения хранятся на сервере, а клиенты имеют доступ к письмам через почтовые папки. Плюсом данного протокола является возможность доступа к одним и тем же данным со стороны разных клиентов. Упрощается резервное копирование почты, а пользователь всегда имеет доступ к сообщениям – будь то из офиса или из отеля во время поездки.

За хранение почтовых сообщений отвечает внутренняя база данных IMAP-сервера. Чаще всего встречаются два способа хранения: в одном файле либо в почтовой директории (Maildir). Первый способ предполагает хранение всех сообщений в одиночном файле (бывает, что имеется файл на каждую папку). Такой способ имеет явные недостатки, которые особенно проявляются в системе с множеством клиентов, - это и проблемы блокировки файла, и ухудшение производительности при работе с одним огромным файлом.

Лучший вариант - формат Maildir, при котором почтовые папки представлены каталогами файловой системы, а сообщения хранятся в отдельных файлах, что дает быстрый и эффективный доступ.

Однако оба способа хранения сталкиваются с трудностями при очень большом количестве сообщений. В случае одиночного файла возникает опасность нарушения структуры файла. При использовании Maildir некоторые файловые системы плохо справляются с большим количеством файлов в одном каталоге. Это ограничение файловой системы, а не почтового сервера, но об этом нужно помнить.

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

Получение общей статистики использования почты

Одним из самых простых способов понять, как организована почта пользователей, является запуск утилиты проверки занимаемого места на диске. Станет ясно, какие пользователи накапливают большие объемы почты, создавая значительный вклад в нагрузку на сервер, и таким образом требуют внимания.

В примерах ниже используется почтовый сервер Cyrus IMAP, который хранит почту в формате Maildir. Тем не менее многие базовые принципы верны и для случаев хранения в одиночном файле. В Листинге 5 показан простой отчет о занимаемом дисковом пространстве для нескольких пользователей.

Листинг 5. Получение статистики о занимаемом дисковом пространстве
$ du -sk *
20      admin
1020    appleby
45828   applicants
13264   buy
11704   dev
11200   finance
52      gordon
25720   mc
472     mcantrip
4340    mlists
120952  myeling
12      nutshell
1812    play
1104    postmaster
1468    quarantine
36      questions
78940   fhf
4156    fhfarc
2444    spam

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

Команда find поможет проанализировать более детально, насколько рационально клиенты используют возможность хранения сообщений в почтовых папках. Например, имея хранилище Maildir, выведем отчет о занимаемом дисковом пространстве для всех каталогов и подкаталогов. find перечислит каталоги, а sort отсортирует данные по имени. Результат приведен в Листинге 6 (вывод слегка сокращен для большей наглядности).

Листинг 6. Получение статистики занимаемого дискового пространства для всех каталогов и подкаталогов
$ find . -type d -exec du -sk {} \; |sort -t. +1
...
45828   ./applicants
1964    ./brady
616     ./brady/Article Comments
1304    ./brady/Editors
...
11200   ./finance
4160    ./finance/Banking
12      ./finance/Insurance
1192    ./finance/Other
5476    ./finance/Rewards
296     ./finance/Surveys
...
78940   ./sandra
...
460     ./sandra/Nutshell
3444    ./sandra/Orders
1484    ./sandra/SANDRA-general
40920   ./sandra/Sent Mail
1264    ./sandra/Tracey
1984    ./sandra/eBay
...

По результатам проверки остановимся на трех пользователях. applicants хранит всю почту в одной папке, в то время как finance для удобства распределяет свои сообщения по разным папкам. sandra, кажется, тоже разумно распределяет почту, однако ее папка отправленных писем достигла внушительных размеров.

Пользователям applicants и sandra не помешает дать дельный совет о том, как лучше организовать хранение почты. Но возможно ли им еще как-либо помочь?

Автоматизация хранения почты

Существует множество решений для автоматизации архивирования и хранения почты. Некоторые из них работают на стороне клиента, некоторые являются частью почтового сервера. Например, в состав сервера Cyrus IMAP входит система Sieve (см. Ресурсы), которая фильтрует письма в момент их поступления в почтовый ящик пользователя.

Указанная программа помогает при работе с вновь поступающими сообщениями, однако существующие письма придется "разгребать" вручную. На помощь приходит скрипт, который подключается к ящику как обычный почтовый клиент, а затем реорганизует и фильтрует почту согласно встроенным в него правилам.

В Листинге 7 приведен Perl-скрипт для сортировки почты, соединяющийся с сервером как почтовый клиент. В этом примере скрипт создает в каждой исходной папке дерево подпапок, в котором каждому году соответствует своя папка, внутри которой, в свою очередь, имеются папки каждого месяца, и каждое письмо попадает в нужную папку согласно дате.

Листинг 7. Автоматическое распределение сообщений по папкам на основе даты
#! /usr/bin/perl

# Скрипт сортирует почту исходя из даты

use Mail::IMAPClient;
use Date::Parse;
use Data::Dumper;
use strict;
use warnings;

# IMAP-сервер
my $Server     = 'imap.example.com';

# Почтовый ящик, который мы хотим обработать
my $INBOX      = "Sent-Mail";

# Устанавливаем соединение с сервером
my $IMAP = Mail::IMAPClient -> new (Server   => $Server,
                                    User     => 'user',
                                    Password => 'password',);

# Выбираем нужный почтовый ящик

$IMAP->select($INBOX) or die "Не удалось выбрать $INBOX";

# Мы хотим обработать каждое сообщение, поэтому
# получаем список идентификаторов всех сообщений

my @msgids = $IMAP->search("ALL");

# Ничего не делать, если список пуст

exit(0) if (scalar @msgids == 0);

# Сканируем тело сообщения и находим значения
# полей От, Кому, Тема и др.
my $parsed = $IMAP->parse_headers(
                                  $IMAP->Range(\@msgids),
                                  "From",
                                  "To",
                                  "CC",
                                  "Subject",
                                  "Date",
                                  );

# Объявляем несколько счетчиков сообщений

my $toprocess = scalar @msgids;
my $processed = 0;
my $counter = 0;

# Обрабатываем каждое сообщение

foreach my $msgid (keys %{$parsed})
{
    $processed++;

    # Извлекаем дату, а затем создаем для каждой папки 
    # набор вложенных каталогов. Набор будет группировать 
    # письма вначале по годам, а затем по месяцам

    my ($ss,$mm,$hh,$day,$month,$year,$zone) =
      strptime($parsed->{$msgid}->{Date}->[0]);

    # Если первая дата не определена, пытаемся взять другую дату
    if (!defined($year))
    {
        ($ss,$mm,$hh,$day,$month,$year,$zone) = 
          strptime($parsed->{$msgid}->{Date}->[1]);
    }
    # Если не можем найти год, принимаем 2004
    if (!defined($year))
    {
         $year = 2004;
    }
    # Делаем несколько предположений относительно года.
    # Если вдруг дата содержит две цифры, то имеем либо
    # 2000 год и больше, либо 1990+
    $year += 2000 if ($year <10);
    $year += 1900 if (($year >90) && ($year <= 200));
    $year = 2004 if $year <= 1990;
    $month += 1;

    # Формируем набор каталогов для создания

    my $destfolder = sprintf('%s/%s/%02d',$INBOX,$year,$month);

    # Сохраняем все сообщения

    my $Message = $IMAP -> message_string($msgid);

    # Пытаемся выбрать целевой каталог, либо
    # создаем его в случае неудачи

    my $selectstat = $IMAP->select($destfolder);
    unless ($selectstat)
    {
         $IMAP->create($destfolder);
    }

    # Возвращаемся к исходной папке, чтобы правильно 
    # выбрать сообщение при следующей итерации

    $IMAP->select($INBOX);

    # Помещаем исходное сообщение в новый каталог

    my $AppendStatus = $IMAP -> append_string($destfolder,$Message);

    # После копирования сообщения оно получает статус
    # непрочитанное. Поэтому читаем все
    # сообщения в каталоге для придания им статуса
    # прочитанных

    $IMAP->select($destfolder);
    my @unseenMIDs = $IMAP->unseen();
    foreach my $MID (@unseenMIDs)
    {
         $IMAP->message_string($MID);
    }

    # Возвращаемся в исходную папку и удаляем сообщение
    # в случае его успешного копирования

    $IMAP->select($INBOX);
    if ($AppendStatus)
    {
        $IMAP -> delete_message($msgid);
    }
    $counter++;
}

# Выводим итоговую информацию о проделанной работе

printf("Обработано %5d из %5d сообщений\r",$counter,$toprocess);

# Не забываем физически удалить сообщения, помеченные 
# как удаленные, а затем разрываем соединение

$IMAP->expunge();
$IMAP->disconnect();

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

Стоит обработать с помощью данного скрипта некую папку, например Sent Mail, и она сразу приобретает более удобный вид, что показано в Листинге 8.

Листинг 8. Структура отсортированной почтовой папки выглядит куда лучше
28932    ./martin/Sent Mail
15288    ./martin/Sent Mail/2006
416      ./martin/Sent Mail/2006/03
812      ./martin/Sent Mail/2006/04
684      ./martin/Sent Mail/2006/05
2068     ./martin/Sent Mail/2006/06
2576     ./martin/Sent Mail/2006/07
772      ./martin/Sent Mail/2006/08
708      ./martin/Sent Mail/2006/09
1104     ./martin/Sent Mail/2006/10
3308     ./martin/Sent Mail/2006/11
2840     ./martin/Sent Mail/2006/12
13632    ./martin/Sent Mail/2007
908      ./martin/Sent Mail/2007/01
884      ./martin/Sent Mail/2007/02
1596     ./martin/Sent Mail/2007/03
864      ./martin/Sent Mail/2007/04
1532     ./martin/Sent Mail/2007/05
1448     ./martin/Sent Mail/2007/06
1116     ./martin/Sent Mail/2007/07
2092     ./martin/Sent Mail/2007/08
2220     ./martin/Sent Mail/2007/09
972      ./martin/Sent Mail/2007/10

Этот скрипт можно усовершенствовать - например, сортировать сообщения на основе полей отправителя или темы.

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

Иногда можно пойти дальше и сделать фильтрацию автоматической, превратив ее как бы в часть почтового сервиса. Автоматические фильтры могут запускаться регулярно, например, ночью, и перемещать сообщения, предварительно оставленные пользователем в некой папке, в определенное место.

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

Почтовые фильтры пригодятся и для автоматизации систем обработки заявок от клиентов, где каждому обращению обычно соответствует уникальный номер. С помощью автоматической фильтрации, вроде описанной только что, можно распределять почтовые сообщения по папкам согласно номеру заявки.

Заключение

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

Сначала предлагается проанализировать почтовые журналы и определить, кто из пользователей отсылает и получает наибольший объем почты. Далее можно решить, кого из них следует взять на карандаш или даже перевести на отдельные сервера.

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

Ресурсы

Научиться

Получить продукты и технологии

  • В некоторых сервисах передачи и доставки почты используется система Sieve (EN), которая автоматически фильтрует приходящие письма.

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX
ArticleID=466955
ArticleTitle=Systems Administration Toolkit: Контроль за хранением почты
publish-date=02082010