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 налагает некоторые искусственные ограничения времени компиляции, а именно:
- qmail-lspawn и qmail-rspawn имеют лимиты одновременно доставляемых сообщений, равные 120; изменить эти значения можно, отредактировав до компиляции файл conf-spawn
- qmail-queue отвергает любые сообщения с адресами, содержащими более 1000 знаков
- qmail-lspawn усекает любой слишком длинный ошибочный код от программы доставки; она добавляет об этом соответствующее заметку
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 указывают на наличие постоянных ошибок:
- 11 Адрес слишком длинный.
- 31 Почтовый сервер постоянно отказывается посылать сообщение любым адресатам.
Все другие кода завершения указывают на наличие временных ошибок:
- 51 Нет свободной памяти.
- 52 Тайм-аут.
- 53 Ошибка записи, т.е. переполнение диска.
- 54 Невозможно прочитать сообщение или конверт.
- 55 Невозможно прочитать конфигурационный файл.
- 56 Проблема установки связи с данным хостом.
- 61 Проблема с домашним каталогом qmail.
- 62 Проблема с каталогом очереди сообщений.
- 63 Проблема с queue/pid.
- 64 Проблема с queue/mess.
- 65 Проблема с queue/intd.
- 66 Проблема с queue/todo.
- 71 Почтовый сервер временно отказывается посылать сообщения любым адресатам.
- 72 Тайм-аут контакта с почтовым сервером.
- 73 Прерывание контакта с почтовым сервером.
- 74 Контакт с почтовым сервером выполнен успешно, но связь не устанавливается.
- 81 Внутренняя ошибка.
- 91 Ошибка формата конверта.
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:
- Если первый символ - # , то это комментарий.
- Если указан путь к файлу (без / в конце), то письмо кладется в этот файл как в mailbox.
- Если указан путь к каталогу (с / в конце), то письмо кладется в этот каталог как в maildir.
- Если указано &[email protected], то письмо в неизмененном виде пересылается на этот адрес.
- Если указано |/path-to-script/script и файл script имеет бит выполнимости для этого пользователя, то он запускается и на стандартный вход программы отправляется содержимое письма.
Например, файл .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 решает, что делать дальше:
- 0 Успешное завершение скрипта. Обработку файла .qmail можно продолжить.
- 99 Успешное завершение скрипта, но обработку файла .qmail прервать. Все, что идет после вызова скрипта в .qmail, игнорируется.
- 100 Ошибка доставки письма. Все, что скрипт выводит в стандартный вывод, будет отправлено отправителю, как текст ошибки. Все, что идет после вызова скрипта в .qmail, игнорируется.
- 111 Временная ошибка доставки письма. Через некоторое время 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 Содержание