Вперед Return Содержание

14. mini-FAQ от www.ru.qmail.org

Эта часть ЧАВО была любезно предоставлена Алексеем Абрамовым (Alexey Abramov) [email protected]. В дальнейшем, именно в эту часть будут добавляться вопросы от пользователей qmail в России. Разумеется, с одобрения Алексея.

14.1 Использование формата Maildir

Создать директорию 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)

14.2 Конфигурирование MUA для работы с $HOME/Mailbox непосредственно

Общий способ

Большинство MUA руководствуются переменными окружения, поэтому поместите переменную окружения в системный профайл и shell-rc файл:

MAIL=$HOME/Mailbox

elm

Замените mailbox на Mailbox в районе 388 строки файла newmbox.c и перекомпилируйте elm (elm воспринимает переменные окружения, но не справляется, если почту пытаются читать несколько пользователей одновременно).

pine

Поместите в системный файл pine.conf:

inbox-path=Mailbox

qpopper 2.2

Замените в файле pop_dropcopy.c /.mail на /Mailbox и перекомпилируйте qpopper с опцией -DHOMEDIRMAIL в CFLAGS.

14.3 Конфигурирование Xinetd

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)

14.4 Qmail и GMT/UTC формат времени в сообщениях

John Saunders предложил патч к date822fmt.c ( локальная копия), позволяющий решить проблему с указанием времени отправления сообщений в формате GMT/UTC. Для использрвания данного патча нужно скопировать его в каталог исходников qmail и выполнить:

patch -s -p1 < qmail-date-localtime.patch

(Я и Андрей Малышев поправили этот патч. Теперь он дополнительно показывает имя зоны как в заголовках письма, так и в листинге от mailq. RB)

14.5 Поддержка формата Maildir IMAP-сервером.

Традиционный популярный UW-IMAP сервер не имеет поддержки формата Maildir. Существует несколько альтернативных вариантов борьбы с данным "недоразумением".

Один из способов предлагается следующий: перекомпилировать IMAP, снадбив исходники необходимыми патчами для работы с почтой в формате Maildir. Причем авторы предложили несколько заплаток, решая проблемы с новыми папками для почты, создаваемыми пользователями (создаются при необходимости в формате Maildir), а также ошибками взаимного преобразования форматов mbox и Maildir. Второй способ более продвинутый: IMAP-Maildir сервер Courier. Поддерживает SSL, авторизацию через MySQL, создание виртуальных почтовых ящиков, имеет встроенный POP3 сервер с аналогичными возможностями.

14.6 Ответ об удачной доставке сообщения определенным адресатам

Существует возможность посылать уведомление отправителю об успешной доставке сообщения конкретному адресату. Для этого необходимо в файле .qmail написать следующее (например, если Вы хотите посылать уведомления по адресу отправителя при получении сообщения, содержащего в поле Notice-Requested-Upon-Delivery-To заголовка [email protected]):

./Mailbox
|qreceipt [email protected]

14.7 Проблема задержки с отправкой сообщений.

Если Вы видите, что интервал, в течение которого сообщения обрабатываются в очереди слишком велик (например, процесс локальной доставки сообщения от локального отправителя занимает 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

которая осуществит такую проверку и выдаст информацию об ошибках.

14.8 Искусственные ограничения в системе qmail

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

14.9 Безопасное редактирование файла .qmail

Так как сообщения могут приходить в любой момент, резонно редактировать Ваш файл .qmail в безопасном режиме. Для этого до редактирования установите sticky-бит для Вашего домашнего каталога:

chmod +t $HOME

qmail-local будет тогда временно откладывать доставку любых сообщений. Не забудьте снять sticky-бит после окончания редактирования файла .qmail!

chmod -t $HOME

Для тестирования Вашего нового файла .qmail можно пользоваться следующей командой:

qmail-local -n $USER ~ $USER '' '' '' '' ./Mailbox

14.10 Кода ошибок qmail-queue

Программа qmail-queue, которая осуществляет постановку в очередь сообщений для последующей отправки, возвращает 0 при удачной постановке сообщения в очередь. Кода завершения от 11 до 40 указывают на наличие постоянных ошибок:

Все другие кода завершения указывают на наличие временных ошибок:

14.11 Тайм-ауты qmail-popup и qmail-pop3d

Программы qmail-popup и qmail-pop3d имеют тайм-ауты ожидания, равные 20 минутам. Изменить эти значения можно до компиляции пакета qmail.

14.12 Man-страницы 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

14.13 Как написать скрипт для qmail?

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

Возможностей всего 4:

Например, файл .qmail следующего содержания

&[email protected]
/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. Прочтите советы на http://www.qmail.org/ - в конце главной страницы, там много интересных примеров использования файла .qmail.


Вперед Return Содержание