Недавно возникла задача сохранять письма уходящие и приходящие на mail сервер.
Было решено, что по входящим письмам буду сохраняться, только те, которые приходят к существующим на mail сервере ящикам, а исходящие будут сохраняться все.
Входящие:
Вариант backup`а через копирование во «второй ящик»:
1. Имеем ящик root@domain.ru и соответственно папку ящика
/var/qmail/popboxes/domain-ru/root/Maildir/
2. создаем backup папку для ящика
/var/qmail/popboxes/domain-ru/root_BAK/Maildir/
3. в файле /var/qmail/popboxes/domain-ru/root/.qmail основного ящика пишем:
|/var/qmail/bin/mailquotacheck ./../root_BAK/Maildir/ ./Maildir/
где:
- первая строка это проверка квоты ящика
- второй строкой как раз кладем копию письма в backup папку
- и третья доставка письма в основной ящик
4. в файле .qmail backup ящика можно вообще уже ничего не писать
Итог: получаем точную копию письма в backup папке, которое приходит и доставляется для root@domain.ru
Исходящие:
В Qmail FAQ можно прочитать:
Что такое QUEUE_EXTRA?
QUEUE_EXTRA - статическая переменная, которая определяет дополнительного получателя,
который будет добавлен к каждой доставке. Это используется, прежде всего, для логов.
Например, FAQ описывает, как использовать QUEUE_EXTRA, чтобы сохранить копии всех
приходящих и уходящих сообщений.Дляљ использования QUEUE_EXTRA, отредактируйте файл
extra.h определив дополнительного получателя в формате "Trecipient\0", и длину строки
QUEUE_EXTRA в QUEUE_EXTRALEN ( "\0" считается за один символ).
Например:
#define QUEUE_EXTRA "Tlog\0"
#define QUEUE_EXTRALEN 5
Остановите qmail, если он запущен.
Если вы установили скрипт qmail из раздела <Установка> то можете выполнить:
/usr/local/sbin/qmail stop
Если у вас нет скрипта qmail, Вы должны использовать свой скрипт включения/выключения
или послать процессу qmail-send сигнал TERM
Для компиляции qmail:
make setup check
Заполните ~alias/.qmail-log в зависимости от того, что хотите регистрировать.
Например, для регистрации Message-ID:|
awk '/^$/ { exit } /^[mM][eE][sS][sS][aA][gG][eE]-/ { print }'
И наконец, перезапустите qmail.
Поясню, т.к. лично я "наступил на грабли":
#define QUEUE_EXTRA «Tlog\0» — локальный (!) ящик log для копии письма
#define QUEUE_EXTRALEN 5 — длина QUEUE_EXTRA:
Т(равно 1 символ) + log (равно 3 символа) + \0 (равно 1 символ) = 5 символов
В файл .qmail (/var/qmail/popboxes/domain-ru/log/.qmail), локального ящика log, помещаем вызов внешнего скрипта с передачей письма ему :
| /root/save_mail.pl
Ну и сам скрипт:
#!/usr/bin/perl my $in=join(" ",<STDIN>); open F,">/path/sample.txt"; print F $in; close F;
Он сохранит письмо в текстовый файл /path/sample.txt. Вы можете дописать скрипт, чтобы он разбирал письмо, копировал письмо в соответствующую подпапку и .т.д. и т.п. Вообщем творим, что хотим.
На /path нужно выставить права owner ящика, смотрим owner`а:
ls -la /var/qmail/popboxes/domain-ru/log
total 8
drwx------ 3 popuser qmail 512 Dec 4 13:01 .
drwxr-xr-x 6 popuser qmail 512 Dec 4 18:39 ..
-rw------- 1 popuser qmail 41 Dec 4 13:01 .qmail
drwx------ 5 popuser qmail 512 Jul 11 10:15 Maildir
Выставляем права:
chown -R popuser:qmail /path
Вот и все.
=================
Заметка
Необходимо сделать в домене ящик для всей почты (дефолтовый ящик так сказать), т.е. на любое имя, но при этом ещё пересылать всю попадающую в ящик почу на другой почтовый ящик.
Допустим что ящик для всей почты домена mydomain.ru будет называться «default». Для этого добавим в файл /usr/symlinks/qmail/users/assign строчку:
+mydomain-ru-:popuser:888:82:/var/qmail/popboxes/mydomain-ru/default:—::
Обратите внимание на символ «—» в конце.
Затем создадим файл dot-qmail /usr/symlinks/qmail/popboxes/yamaika-ru/default/.qmail-default с адресом почты, куда пересылать письма:
&mailbox@someotherdomain.ru
Теперь вся почта (на любой ящик) домена mydomain.ru будет сначала попадать в ящик default@mydomain.ru, а затем пересылаться на mailbox@someotherdomain.ru.
З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !