Эта часть ЧАВО была любезно предоставлена Алексеем Абрамовым (Alexey Abramov),
levsha@ruxy.org.ru
. В дальнейшем,
именно в эту часть будут добавляться вопросы от пользователей qmail в России.
Разумеется, с одобрения Алексея.
Создать директорию Maildir:
maildirmake $HOME/Maildir
В файл $HOME/.qmail
добавить:
./Maildir/
Установить переменные окружения для возможности перевода почты в формат mbox:
MAILDIR=$HOME/Maildir
MAILTMP=$HOME/Mailtmp
MAIL=$HOME/Mailbox
export MAIL MAILDIR MAILTMP
MAIL - Ваш mbox файл, MAILDIR - имя Вашего Maildir-каталога, MAILTMP - временный файл для команды maildir2mbox.
Для просмотра каталога Maildir на наличие новых почтовых сообщений:
maildirwatch
Для преобразования в формат mbox:
maildir2mbox
(Следует отметить, что уже существуют MUA
, которые поддерживают почтовые ящики в формате Maildir. Например, Mutt
. RB)
Большинство MUA
руководствуются переменными окружения, поэтому поместите
переменную окружения в системный профайл и shell-rc файл:
MAIL=$HOME/Mailbox
Замените mailbox на Mailbox в районе 388 строки файла newmbox.c и перекомпилируйте elm (elm воспринимает переменные окружения, но не справляется, если почту пытаются читать несколько пользователей одновременно).
Поместите в системный файл pine.conf:
inbox-path=Mailbox
Замените в файле pop_dropcopy.c /.mail на /Mailbox и перекомпилируйте qpopper
с опцией -DHOMEDIRMAIL в CFLAGS
.
Xinetd
, кто не сталкивался, альтернатива inetd
, только с добавленными
функциями контроля доступа и ведения логов. Вот примеры конфигурирования
Xinetd
для прослушивания портов 25 и 110 (стандарт для smtp и pop3),
предполагаем, что tcpserver
не используется, в качестве pop3 сервера
используется qmail-pop3d
:
Содержимое /etc/xinetd.d/smtp
:
service smtp
{
socket_type = stream
protocol = tcp
wait = no
user = qmaild
server = /var/qmail/bin/tcp-env
server_args = -R /var/qmail/bin/qmail-smtpd
log_on_success = HOST
log_on_failure = HOST RECORD
}
Содержимое /etc/xinetd.d/pop3
:
service pop3
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /var/qmail/bin/qmail-popup
server_args = SERVERNAME /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir
}
После указанных манипуляций дайте возможность xinetd
перечитать конфигурационный файлы:
kill -USR2 xinetd_PID
Для использования tcp-wrappers
с qmail файл /etc/xinetd.d/smtp
должен выглядеть так:
service smtp
{
flags = REUSE NAMEINARGS
socket_type = stream
wait = no
user = qmaild
server = /usr/sbin/tcpd
server_args = /var/qmail/bin/tcp-env /var/qmail/bin/qmail-smtpd
log_on_failure += HOST ATTEMPT
log_on_success += PID HOST EXIT DURATION
}
(Разумеется, эти конфигурации не являются абсолютом, но они позволят сберечь Вам нервы при создании рабочего конфига. Будем их считать отправной "точкой" отсчета в Ваших экспериментах с настройками Xinetd
. RB)
John Saunders предложил
патч
к date822fmt.c (
локальная копия
),
позволяющий решить проблему с указанием времени отправления сообщений в формате GMT/UTC.
Для использрвания данного патча нужно скопировать его в каталог исходников qmail и выполнить:
patch -s -p1 < qmail-date-localtime.patch
(Я и Андрей Малышев поправили этот патч. Теперь
он
дополнительно показывает имя зоны как в заголовках письма, так и в листинге от mailq. RB)
Традиционный популярный
UW-IMAP
сервер не имеет поддержки формата Maildir.
Существует несколько альтернативных вариантов борьбы с данным "недоразумением".
Один из способов предлагается
следующий
: перекомпилировать IMAP,
снадбив исходники необходимыми патчами для работы с почтой в формате Maildir
.
Причем авторы предложили несколько заплаток, решая проблемы с новыми папками для
почты, создаваемыми пользователями (создаются при необходимости в формате Maildir
),
а также ошибками взаимного преобразования форматов mbox
и Maildir
.
Второй способ более продвинутый: IMAP-Maildir
сервер
Courier
.
Поддерживает SSL, авторизацию через MySQL, создание виртуальных почтовых ящиков,
имеет встроенный POP3 сервер с аналогичными возможностями.
Существует возможность посылать уведомление отправителю об успешной доставке сообщения конкретному адресату. Для этого необходимо в файле .qmail написать следующее (например, если Вы хотите посылать уведомления по адресу отправителя при получении сообщения, содержащего в поле Notice-Requested-Upon-Delivery-To заголовка famous@sun.com):
./Mailbox
|qreceipt famous@sun.com
Если Вы видите, что интервал, в течение которого сообщения обрабатываются в очереди слишком велик (например, процесс локальной доставки сообщения от локального отправителя занимает 10 и более минут), а по истечении этого интервала qmail пытается отправить сразу кучу скопившихся там сообщений, это, скорее всего, означает установку неверных прав доступа к файлу $QMAILHOME/queue/lock/trigger.
Права должны быть такими:
prw--w--w- 1 qmails qmail 0 Apr 14 15:02 trigger
Замените в соответствие с этим права доступа и интервал исчезнет. Проблема в том, что программу qmail-send нужно ставить в известность о появлении в очереди новых сообщений, чтобы она активизировала процесс их отправки. Для подобного общения используется упомянутый выше файл. Причем права на запись в него должны иметь другие программы системы qmail. Если таких прав нет, qmail-send ничего не узнает о новых сообщениях в очереди и активизирует процесс их отправки через промежутки времени, соответствующие некому достаточно значительному тайм-ауту.
По идее, проверку правильности установки прав доступа можно выполнить командой из каталога с исходными файлами qmail:
make check
которая осуществит такую проверку и выдаст информацию об ошибках.
Система qmail в состоянии управлять сообщениями, адресами, списками рассылки любого размера, ограниченными лишь возможностями памяти и дискового пространства компьютера. Тем не менее qmail налагает некоторые искусственные ограничения времени компиляции, а именно:
Так как сообщения могут приходить в любой момент, резонно редактировать Ваш файл .qmail в безопасном режиме. Для этого до редактирования установите sticky-бит для Вашего домашнего каталога:
chmod +t $HOME
qmail-local будет тогда временно откладывать доставку любых сообщений. Не забудьте снять sticky-бит после окончания редактирования файла .qmail!
chmod -t $HOME
Для тестирования Вашего нового файла .qmail можно пользоваться следующей командой:
qmail-local -n $USER ~ $USER '' '' '' '' ./Mailbox
Программа qmail-queue, которая осуществляет постановку в очередь сообщений для последующей отправки, возвращает 0 при удачной постановке сообщения в очередь. Кода завершения от 11 до 40 указывают на наличие постоянных ошибок:
Все другие кода завершения указывают на наличие временных ошибок:
Программы qmail-popup и qmail-pop3d имеют тайм-ауты ожидания, равные 20 минутам. Изменить эти значения можно до компиляции пакета qmail.
После установки qmail страницы руководства (man pages) помещаются по умолчанию в каталог $QMAILHOME/man (/var/qmail/man). Для их просмотра с использованием стандартной команды man необходимо дополнить переменную окружения MANPATH путями к ним. Для разных shells это делается по-разному, например, для
bash - export MANPATH=$MANPATH:/var/qmail/man
sh - MANPATH=$MANPATH:/var/qmail/man; export MANPATH
Если в домашнем каталоге пользователя есть файл .qmail
, то при доставке письма
этому пользователю выполняются действия согласно тому, что сказано в этом файле.
Там может быть несколько строк, они обрабатываются последовательно.
Возможностей всего 4:
Например, файл .qmail
следующего содержания
&addr@domain.ru
/var/qmail/popboxes/user/Maildir/
/var/qmail/popboxes/user/Maildircopy/
пересылает письмо на указанный адрес, а затем кладет его в два разных maildir'а (понятно, что оба каталога должны существовать, быть правильными maildir'ами и принадлежать пользователю).
Четвертая команда дает возможность делать практически все, что угодно. Письмо подается скрипту на стандартный вход, то есть, например, в шелле (sh) его можно читать по строкам командами
while read s
do
# В переменной $s - очередная строка письма
done
или записать в файл командой
cat >/path/filename
(опять же, должны быть права на запись туда), а потом работать с этим файлом.
Никто не мешает написать этот скрипт на Перле или на Си... или на Лого.
Скрипту устанавливается окружение, в котором есть куча полезных переменных типа $SENDER, $USER и т.п. Сделайте из него env >file и посмотрите...
Тут-то вы и можете найти интересующее Вас поле письма, проанализировать его, и что-то сделать. Например, остальное письмо переписать на диск неизменным, а эту строку заменить.
А потом письмо, которое вы сделали на диске, можно прямо из скрипта отправить куда хотите:
/var/qmail/bin/datemail -f от_кого кому < /path/filename
А по коду возврата скрипта qmail решает, что делать дальше:
То есть можно написать в .qmail:
|/path/script
/path/Maildir/
И если скрипт вернул 0, письмо попадет в ящик, а если 99, то нет.
Что бы не сделал скрипт, следующая за ним строка файла .qmail
получит в
точности исходное письмо и исходное окружение! Не пытайтесь, например, изменить
в скрипте переменную $USER - она локальна :).
Все, что скрипт выведет на экран, попадет в логи qmail'а.
За подробностями обращайтесь к man dot-qmail
, прочим мануалам qmail
(они лежат, по умолчанию, в папке /var/qmail/man и есть на сайте в html-формате),
документу Life with qmail. Прочтите советы на
www.qmail.org
- в
конце главной страницы, там много интересных примеров использования файла
.qmail
.