Qmail FAQ

Материал из rrv-wiki
Перейти к навигации Перейти к поиску

Содержание

FAQ от автора системы

Управление видом исходящих сообщений

Source(s): Qmail FAQ

Как организовать маскировку хоста?

Все пользователи данного хоста, zippy.af.mil, являются также пользователями af.mil. Когда joe посылает сообщение fred, сообщение должно гласить: "От кого: joe@af.mil" и "Кому: fred@af.mil",- без упоминания zippy.

Ответ:

      команды:
      echo af.mil >/var/qmail/control/defaulthost
      chmod 0644 /var/qmail/control/defaulthost

Как организовать маскировку пользователя?

Я бы хотел, чтобы в поле From в моих сообщениях было boss@af.mil, а не god@heaven.af.mil

Ответ:

      Добавьте MAILHOST=af.mil и MAILUSER=boss в переменные окружения. Для
      изменения поля From, указанного Вашей почтовой программой, добавьте
      QMAILINJECT=f в переменные окружения.

Как автоматически устанавливать поле Mail-Followup-To?

Когда я посылаю сообщения в список рассылки sos@heaven.af.mil, мне бы хотелось включать поле "Mail-Followup-To: sos@heaven.af.mil".

Ответ:

      Добавьте QMAILMFTFILE=$HOME/.lists в переменные окружения и поместите
      sos@heaven.af.mil в ~/.lists

Маршрутизация исходящих сообщений

Как пересылать локальные сообщения на другой хост?

Всю почту для af.mil следует доставлять на наш файловый сервер pokey.af.mil. Я уже установил в DNS, что pokey.af.mil - MX (почтовый сервер) для af.mil, но когда пользователь хоста af.mil посылает сообщение для boss@af.mil, af.mil пытается доставить его локально, а не на pokey.af.mil. Как прекратить это?

Ответ:

      Удалите af.mil из /var/qmail/control/locals. Если запущен qmail-send,
      пошлите ему сигнал HUP (или выполните `svc -h /var/run/qmail`, если
      qmail под контролем supervise), убедившись предварительно, что MX
      установлен верно. И удостоверьтесь, что pokey.af.mil сконфигурирован
      для получения почты для af.mil (См. вопрос 3.1)

Как установить ноль-клиента (null client)?

Я бы хотел, чтобы zippy.af.mil посылал всю почту на bigband.af.mil

Ответ: команды:

       echo :bigband.af.mil >/var/qmail/control/smtproutes;
       chmod 0644 /var/qmail/control/smtproutes
     Запретите локальную доставку как в вопросе 2.1. Отключите qmail-smtpd в
     inetd.conf.


Как посылать исходящую почту через UUCP?

Мне нужно, чтобы qmail посылал всю исходящую почту через UUCP моему головному хосту, gonzo.

Ответ: поместите

:alias-uucp
      в /var/qmail/control/virtualdomains и
|preline -df /usr/bin/uux - -r -gC -a"${SENDER:-MAILER-DAEMON}" gonzo!rmail "($DEFAULT@$HOST)"
     (все на одной строчке) в ~alias/.qmail-uucp-default. (Для некоторых пакетов
     UUCP Вам потребуется использовать -d вместо -df.) Если запущен qmail-send,
     оповестите его сигналом HUP (или выполните `svc -h /var/run/qmail`, если qmail
     под контролем supervise).


Как установить отдельную очередь сообщений для SLIP/PPP канала?

Ответ: используйте serialmail (http://pobox.com/~djb/serialmail.html)


Что делать с сообщениями "CNAME lookup failed temporarily"?

Лог-файл показывет, что доставка почтового сообщения была отложена по этой причине. И вообще, почему qmail делает поиск канонического имени?

Ответ:

Стандарт SMTP не разрешает использовать алиасы в именах хостов, поэтому qmail
производит поиск канонического имени для каждого принимающего почту хоста в DNS.
Если соответствующий DNS сервер выключен, то qmail откладывает доставку. Он вскоре
попытается снова.

Маршрутизация входящей почты на уровне почтовой системы

Как получать почту для хоста с другим именем?

Мне необходимо, чтобы наш файл-сервер pokey.af.mil получал почту, адресованную af.mil. Я уже установил в DNS, что pokey.af.mil - MX (почтовый сервер) для af.mil, но как настроить pokey на прием сообщений для af.mil?

Ответ:

      Добавьте af.mil в /var/qmail/control/locals и в
      /var/qmail/control/rcpthosts. Если qmail-send запущен, пошлите ему
      сигнал HUP (или выполните `svc -h /var/run/qmail`, если qmail под
      контролем supervise).

Как организовать виртуальный домен?

Мне необходимо, чтобы почта для nowhere.mil, включая почту для root@nowhere.mil и postmaster@nowhere.mil, доставлялась Bob'у. Я уже установил MX.

Ответ:

Поместите:
nowhere.mil:bob
      в control/virtualdomains. Добавьте nowhere.mil в control/rcpthosts.
      Если qmail-send запущен, пошлите ему сигнал HUP (или выполните
      `svc -h /var/qmail/control`, если qmail под конролем supervise)

      Теперь почта для whatever@nowhere.mil ("что-угодно@nowhere.mil")
      будет доставляться локально на адрес bob-whatever. bob может
      установить ~bob/.qmail-default для обработки всех возможных адресов
      с nowhere.mil, ~bob/.qmail-info для обработки info@nowhere.mil и т.д.

Как установить несколько виртуальных доменов для одного пользователя?

bob желает еще один виртуальный домен, everywhere.org, но он желает обрабатывать почту для пользователей nowhere.mil и everywhere.org раздельно. Как это может быть сделано без создания второго эккаунта?

Ответ:

поместите две строчки в control/virtualdomains:
nowhere.mil:bob-nowhere
everywhere.org:bob-everywhere
Добавьте 
nowhere.mil и everywhere.org в control/rcpthosts. 
       Если qmail-send запущен, пошлите ему сигнал HUP (или выполните
      `svc -h /var/run/qmail`, если qmail под контролем supervise)
      Теперь bob может установить различные .qmail-nowhere-* и
      .qmail-everywhere-*. Более того, он может установить
      .qmail-nowhere-default и .qmail-everywhere-default.

Маршрутизация входящих сообщений на уровне пользователей

Как перенаправлять сообщения для неопознанных пользователей на другойхост?

Мне бы хотелось установить LUSER_RELAY, указывающих на bigband.af.mil.

Ответ: поместите

| forward "$LOCAL"@bigband.af.mil

      в ~alias/.qmail-default.


Как создать список рассылки?

Мне бы хотелось, чтобы письмо на me-sos@my.host.name отправлялось группе людей.

Ответ:

      Поместите список адресов в ~me/.qmail-sos, по одному на строке. Далее
      вся входящая почта для me-sos будет направляться каждому из этого
      адреса. Вам также следует выполнить `touch ~me/.qmail-sos-owner`,
      так, чтобы возвраты (bounces) приходили к вам, а не изначальному
      отправителю.
      Если Вы хотите, чтобы подписка на список рассылки могла
      осуществляться автоматически, поместите
| qlist2 sos my.host.name
     в ~me/.qmail-sos-request.
     Теперь любой может подписаться на Ваш список рассылки просто отправив
     письмо по адресу me-sos-request@my.host.name.
     Альтернативное решение: esmlm (http://pobox.com/~djb/ezmlm.html) - современный
     менеджер списков рассылок, поддерживающий автоматическую подписку,
     подтверждения, архивы, полностью автоматическую обработку возвратов (включая
     предупреждения подписчикам, какие сообщения они пропустили) и др.


Как использовать majordomo с qmail?

Ответ:

      Смотрите ftp://ftp.eyrie.org/pub/software/majordomo/mjqmail и
      http://www.qmail.org, где описываются различные решения. Ожидается,
      что majordomo 2.0 будет самостоятельно поддерживать qmail.
      Знайте, что списки рассылки majordomo не устойчивы к сбоям.

Как использовать procmail с qmail?

Ответ:

     поместите
| preline procmail
      в ~/.qmail. Вы должны указать полный путь для procmail, если procmail
      нет в стартовом пути (PATH) системы. Знайте, что по умолчанию procmail
      попытается доставить Вашу почту в /var/spool/mail/$USER, для изменения
      этого поведения см. INSTALL.mbox в документации по qmail.


Как использовать с qmail фильтр elm?

Ответ:

     поместите
| preline filter
      в ~/.qmail. Вы должны указать полный путь для procmail, если procmail
      нет в стартовом пути (PATH) системы.


Как создать алиасы с точками?

Я попытался установить ~alias/.qmail-P.D.Q.Bach, но не достиг цели.

Ответ:

      используйте .qmail-p:d:q:bach. Точки преобразуются в двоеточия, а
      верхний регистр - в нижний.


Как использовать с qmail файлы .forward от sendmail?

Ответ: установите пакет dot-forward (http://pobox.com/~djb/dot-forward.html).


Как использовать с qmail файл /etc/aliases от sendmail?

Ответ: установите пакет fastforward (http://pobox.com/~djb/fastforward.html).


Как установить, кто будет обрабатывать почту, пришедшую на некоторый адрес.

Я установил ~alias/.qmail-www, но qmail по-прежнему обращается к файлу ~www/.qmail.

Ответ:

     если Вы выполните
# chown root ~www
     qmail более не будет рассматривать www, как пользователя; man qmail-getpw.
     Для более аккуратного контроля за выделением адресов, выполните
     man qmail-users.


Установка серверов

Как запустить qmail-smtpd под управлением tcpserver?

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

Ответ:

      во-первых, установите программу tcpserver, являющуюся частью пакета
      ucspi-tcp (http://pobox.com/~djb/ucspi-tcp.html). Во-вторых, удалите
      строчку с smtp из /etc/inetd.conf и поместите строку
tcpserver -u 7770 -g 2108 0 smtp /var/qmail/bin/qmail-smtpd &
      в стартовые файлы Вашей системы. Замените 7770 на пользовательский
      идентификатор (UID) qmaild в Вашей системе и 2108 - на идентификатор
      группы (GID) nofiles.  Не забудьте про '&' в конце. Изменения вступят в
      силу с момента Вашей следующей загрузки.
      По умолчанию, tcpserver позволяет до 40 одновременных процессов
      qmail-smtpd. Для увеличения этого предела до, скажем, 400 используйте
      tcpserver -c 400. Для записи, кто соединялся и на какой период
      запустите (на двух строчках)
tcpserver -v -u 7770 -g 2108 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | \
/var/qmail/bin/splogger smtpd 3 &


Как установить qmail-qmtpd?

Ответ:

      в два этапа. Во-первых, добавьте строку
qmtp 209/tcp
      в /etc/services. Второй этап - поместите (на одной строке)
qmtp stream tcp nowait qmaild var/qmail/bin/tcp-env /var/qmail/bin/qmtpd
      в /etc/inetd.conf, пошлите inetd сигнал HUP
      Если у Вас инсталлирован tcpserver, вместо конфигурирования inetd
      внесите строчку
tcpserver -u 7770 -g 2108 0 qmtp /var/qmail/bin/qmail-qmtpd &
      в стартовые скрипты Вашей системы, заменяя 7770 и 2108 на UID qmaild
      и GID nofiles. См. вопрос 5.1 для получения дополнительной информации
      о tcpserver.


Как установить qmail-pop3d?

Мой прежний POP3 сервер работает с почтой в формате mbox; мне хотелось бы переключиться на Maildir.

Ответ:

      четыре этапа. Во-первых, инсталлируйте программу checkpassword
      (http://pobox.com/~djb/checkpwd.html).

      Затем убедитесь, что в /etc/services присутствует строка
pop3 110/tcp
      После этого добавьте (все на одной строке, включая два qmail-popup)
pop3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup
YOURHOST /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir
      в /etc/inetd.conf, заменив YOURHOST на полное имя Вашей машины;
      пошлите inetd сигнал HUP. Наконец, установите доставку в Maildir для
      всех пользователей, желающих получать почту через POP3.
      Если у Вас инсталлирован tcpserver, пропустите конфигурирование inetd
      и внесите (в две строки, заменяя YOURHOST как для inetd и
      /bin/checkpassword на тот, что реально используется в Вашей системе)
tcpserver 0 pop3 /var/qmail/bin/qmail-popup YOURHOST \
/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &
      См. вопрос 5.1 для получения доп. информации о tcpserver.
      Замечание по безопасности: протокол pop3 должен использоваться только
      в безопасной сети, в противном случае злоумышленник может "подслушать"
      пароли.


Как разрешить указанным клиентам использовать мой сервер в качестве пересыльщика почты (mail relay)?

Я вижу, что qmail-smtpd отбрасывает сообщения для любых хостов, не перечисленных в control/rcpthosts.


Ответ:

      в три этапа.  а первом инсталлируйте пакет tcp-wrappers (вместе с
      hosts_options), распространяющийся отдельно. Во-вторых, измените
      в /etc/inetd.conf строчку с qmail-smtpd на
smtpd stream tcp nowait qmaild /usr/local/bin/tcpd /var/qmail/bin/tcp-env /var/qmail/bin/qmail-smtpd
      (все на одной строке) и пошлите inetd HUP. Наконец, в файл hosts.allow
      для tcpd добавьте строку, делающую для указанных клиентов пустую строку
      значением переменной среды RELAYCLIENT:
tcp-env: 1.2.3.4, 1.2.3.5: setenv = RELAYCLIENT
      где 1.2.3.4 и 1.2.3.5 - IP-адреса клиентов. qmail-smtpd игнорирует
      control/rcpthosts, если установлена эта переменная (Он также добавляет
      RELAYCLIENT к каждому служебному адресу получателя (envelope recipient
      address). В вопросе 5.5. приведены примеры использования такого поведения)
      Если Вы используете tcpserver версии 0.80 или выше, то вместо этого Вам
      следует создать файл /etc/tcp.smtp, содержащий
1.2.3.6:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
      Эти строчки разрешат соединение клиентам с IP адресами 1.2.3.6 и 127.*.
      Выполните
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
      И наконец внесите
-x /etc/tcp.smtp.cdb
      сразу после tcpserver в файле запуска qmail-smtpd

Как исправлять сообщения от неверных клиентов SMTP?

Ответ:

      три этапа. Во-первых, впишите в ~alias/.qmail-fixup-default строчки
| bouncesaying 'Permission denied' [ "@$HOST" != "@fixme" ]
| qmail-inject -f "$SENDER" -- "$DEFAULT"
      Во-вторых, добавьте
fixme: fixup
      в /var/qmail/control/virtualdomains и пошлите qmail-send сигнал HUP.
      В-третьих, следуйте процедуре, описанной в вопросе 5.4, но установите
      RELAYCLIENT равной "@fixme":
tcp-env: 1.2.3.6, 1.2.3.7: setenv = RELAYCLIENT @fixme
      где 1.2.3.6 и 1.2.3.7 - IP адреса клиентов. Если Вы используете
      tcpserver вместо inetd и tcpd, добавьте в /etc/tcp.smtp
1.2.3.6:allow,RELAYCLIENT="@fixme"
1.2.3.7:allow,RELAYCLINET="@fixme"
      и запустите tcprules как в вопросе 5.4.

Как установить qmail-qmqpd?

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

Ответ:

      убедитесь, что у Вас инсталлирован tcpserver 0.80 или выше. Создайте
      /etc/qmqp.tcp в формате tcprules для разрешения соединений с
      авторизованных хостов. Например, если постановка в очередь разрешена с
      1.2.3.*, то в /etc/qmqp.tcp внесите
1.2.3.:allow
:deny
      Преобразуйте /etc/qmqp.tcp в /etc/qmqp.cdb:
tcprules /etc/qmqp.cdb /etc/qmqp.tmp < /etc/qmqp.tcp
       аконец, установите
tcpserver -x /etc/qmqp.cdb -u 7770 -g 2108 0 628 /var/qmail/bin/qmail-qmqpd &
      заменив 7770 и 2108 на UID qmaild и GID nofiles. В вопросе 5.1. описаны
      детали исталляции tcpserver.

Конфигурирование пользовательских почтовых программ (MUA) для работы с qmail

Как заставить BSD mail генерировать дату, используя местное время?

Когда я посылаю почту, я бы хотел использовать местное время, а не GMT, т.к. некоторые MUA не знают как показывать время в часовом поясе получателя.

Ответ:

      поместите
set sendmail=/var/qmail/bin/datemail
      в ваш .mailrc или системный Mail.rc. Помните, однако, что BSD mail
      небесопасна и ненадежна.


Как заставить pine работать с qmail?

Ответ:

      поместите
sendmail-path=/usr/lib/sendmail -oem -oi -t
      в /usr/local/lib/pine.conf. (Это будет работать и для sendmail)
      Помните, однако, что pine небезопасен и ненадежен.


Как заставить MH работать с qmail?

Ответ:

      поместите строчку
postproc: /usr/mh/lib/spost
      в .mh_profile каждого пользователя. (Это будет работать и для sendmail)
      Помните, однако, что MH небезопасен и ненадежен.

Как прекратить зависания Sun dtcm?

Ответ:

      в dtcm появилась новая программистская ошибка, известная как failure to
      close the output side of the pipe in the child". На момент
      написания Sun еще не исправил эту ошибку.

Управление почтовой системой.

Как остановить qmail-send?

Раньше, когда мы имели sendmail, было очень нетривиально остановить sendmail без риска потерять почту, находящуюся в процессе доставки. Что я должен делать с qmail-send?

Ответ:

      Просто возьмите и убейте процесс qmail-send. Он остановится правильно,
      дождавшись завершения текущих попыток доставки. Дождитесь появления в
      логах сообщения "exiting" ("завершение"). Для перезапуска qmail запустите
      /var/qmail/rc также, как он запускается из стартовых скриптов Вашей
      системы с правильными PATH, лимитами ресурсов и т.п.

Вариант:

      Если qmail под контролем supervise, выполните svc -t /var/run/qmail.
      Процесс supervise убьет qmail, дождется его остановки и перезапустит
      его. Используйте -d вместо -t, если Вы не хотите, чтобы qmail
      перезапустился автоматически.


Как вручную управлять очередью сообщений?

Мне бы хотелось, чтобы qmail попытался доставить все сообщения для удаленных получателей прямо сейчас

Ответ:

      Пошлите qmail-send сигнал ALRM (или выполните svc -a /var/run/qmail,
      если qmail под управлением supervise)
      Возможно, вам имеет смысл запустить перед этим qmail-tcpok, чтобы
      убедиться, что qmail-remote попробует связаться со всеми получателями.
      Обычно, если несколько раз происходит сбой передачи какого-либо
      сообщения, qmail-remote откладывает его доставку на час.


Как "омолодить" сообщение?

Кто-то снова сломал компьютер Эрика, он будет выключен еще как минимум два дня. Я знаю, что Эрик ожидает получения важного сообщения, а я уже вижу его в очереди в /var/qmail/queue/mess/15/26902 Оно здесь уже шесть дней, как мне убедиться, что завтра оно не будет отослано обратно?

Ответ:

      Просто выполните touch /var/qmail/queue/info/15/26902 (Это единственный
      безопасный способ модификации очереди при запущенном qmail'е)


Как организовать большую сеть?

У меня много машин, и я не знаю, с чего начать.

Ответ:

      Сначала выберите имя домена, в котором Ваши пользователи будут получать
      почту. Обычно это кратчайшее имя из доступных Вашему контролю. Если Вы
      управляете именами *.movie.edu, то сможете использовать адреса вроде
      joe@movie.edu.
      Затем выберите компьютер, который будет знать, как поступать с почтой
      для пользователей в movie.edu. Задайте для него имя в DNS:
mailhost.movie.edu. IN A 1.2.3.4
4.3.2.1.in-addr.arpa. IN PTR mailhost.movie.edu.
      (1.2.3.4 - IP адрес для данной машины)
      Далее создайте список машин, где должны быть расположены почтовые ящики
      пользователей. Например, если почта для Боба должна доставляться на его
      рабочую машину, внесите эту машину в список. Каждой из таких машин
      присвойте имя в DNS:
bobhost.movie.edu. IN A 1.2.3.7
7.3.2.1.in-addr.arpa IN PTR bobhost.movie.edu.
      После этого установите qmail на bobhost.movie.edu. При установке по
      умолчанию qmail автоматически будет сконфигурирован для приема сообщений
      для bob@bobhost.movie.edu и доставки их в ~bob/Mailbox. Проделайте это
      для всех машин из списка.
      Установите qmail на mailhost.movie.edu. Добавьте
movie.edu:alias-movie
      в control/virtualdomains на mailhost. Затем установите пересылку
      bob@movie.edu на bob@bobhost.movie.edu, поместив в
      ~alias/.qmail-movie-bob (на mailhost)
bob@bobhost.movie.edu
      Проделайте аналогичную операцию для других пользователей.
      Затем добавьте movie.edu в control/rcpthosts на mailhost.movie.edu,
      теперь qmail будет принимать почту для пользователей домена movie.edu.
      Установите в DNS запись MX для доставки сообщений для movie.edu на
      mailhost:
movie.edu. IN MX 10 mailhost.movie.edu.
      И наконец, поместите movie.edu в control/defaulthost на всех Ваших
      машинах.


Как сделать резервную копию и затем восстановить диск с очередью сообщений?

Ответ:

      Вы не можете сделать этого.

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

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

      Существуют несколько способов увеличения надежности почтовых
      серверов. Источники бесперебойного питания дают Вам в случае
      необходимости время на штатную остановку сервера, предохраняя тем
      самым жесткие диски от поломки. Диски с устойчивым состоянием
      (solid-state disks) имеют встроенные аккумуляторы для таких ситуаций.
      RAID-системы позволяют Вам заменять "умершие" диски без потери
      данных.

Как запустить qmail под управлением supervise? svc выглядит полезным.

Ответ: Установите daemontools (http://pobox.com/~djb/daemontools.html).

      Создайте каталог /var/run/qmail. Измените строчку
/var/qmail/rc
      на
supervise /var/run/qmail /var/qmail/rc
      в стартовых скриптах Вашей системы. Убедитесь, что supervise
      находится в каталогах, указанных в PATH. Теперь Вы можете
      использовать svc для управления qmail и svstat для проверки,
      запущен ли qmail.


Как отказаться от использования syslog?

Он съедает много процессорного времени и ненадежен.

Ответ:

      Установите daemontools (http://pobox.com/~djb/daemontools.html).
      Создайте каталог /var/log/qmail, принадлежащий qmaill, c режимом
      доступа 2700. Измените способ запуска qmail в /var/qmail/rc на
qmail-start ./Mailbox /usr/local/bin/accustamp | setuser qmaill /usr/local/bin/cyclog /var/log/qmail &
      Если Вы ведете лог соединений tcpserver'а, создайте отдельный
      каталог /var/log/smtpd и запускайте /var/log/smtpd для tcpserver.
      Вам не следует запускать несколько копий cyclog в одном каталоге.

      По умолчанию cyclog сохраняет 10 автоматически заменяемых (rotated)
      лог-файлов максимум по 100Kb каждый. Для сохранения 20 файлов по 1Mb
      запускайте cyclog -s 1000000 -n 20.

Разное.

Как увеличить количество одновременно отправляемых сообщений?

По умолчанию он запускает не более 20 одновременных qmail-remote.

Ответ:

      Подумайте, сколько одновременных доставок вам требуется. Поместите
      это число в control/concurrencyremote. Перезапустите qmail как в
      вопросе 7.1. Если Ваша система имеет ограничение на используемые
      процессами ресурсы, убедитесь, что максимально допустимое количество
      дескрипторов по крайней мере равно удвоенному кол-ву одновременных
      доставок плюс 5.
      В противном случае Ваша почта будет без необходимости откладываться в
      моменты, когда почтовая система будет нагружена. Помните, что у
      qmail существует ограничение времени компиляции на кол-во
      одновременных доставок (120 по умолчанию, устанавливается в
      conf-spawn).


Как сохранять копии всех входящих и исходящих сообщений?

Ответ:

      Установите в extra.h QUEUE_EXTRA равным "Tlog\0" и QUEUE_EXTRALEN
      равным 5. Перекомпилируйте qmail. Поместите в ~alias/.qmail-log строку
../msg_log
      Вы можете использовать QUEUE_EXTRA, например, для сохранения
      идентификационных номеров MESSAGE-ID сообщений: поместите
| awk '/^$/ { exit } /^[mM][eE][sS][sS][aA][gG][eE]-/ { print }'
      в ~alias/.qmail-log.


Как постепенно переключиться с sendmail на qmail?

Я подумываю о переключении всей сети heaven.af.mil на qmail, но, для начала, мне хотелось бы дать пользователям шанс попробовать qmail без нарушения работы sendmail. Мы используем NFS.

Ответ:

      Найдите хост в Вашей сети, скажем, pc.heaven.af.mil, на котором не
      запущен SMTP сервер. (Если адрес pc.heaven.af.mil уже использовался,
      то для него в DNS уже должен установлен MX, указывающий на Ваш почтовый
      сервер)

      Создайте в DNS новую запись MX, направляющую почту для
      lists.heaven.af.mil на pc.heaven.af.mil. Установите qmail на
      pc.heaven.af.mil. Замените в конфигурационных файлах qmail'а pc на
      lists. Убедитесь, что документация для qmail и его man pages доступны
      на всех Ваших машинах.

      Теперь скажите Вашим пользователям о qmail. Пользователь может
      перенаправлять почту для joe@heaven.af.mil на joe@lists.heaven.af.mil
      для доставки в ~/Mailbox; он может устанавливать файлы .qmail; он
      может открывать свои списки рассылки на @lists.heaven.af.mil

      Когда Вы будете готовы отказаться от sendmail, вы можете установить
      pc.heaven.af.mil как новый почтовый сервер. Добавьте heaven.af.mil
      в control/locals и измените MX для heaven.af.mil на pc.heaven.af.mil.
       е забудьте оставить lists.heaven.af.mil в control/locals, чтобы
      временные адреса продолжали работать.

FAQ от автора сайта

Сайт автора

Использование формата 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


Немедленная отправка всех сообщений из очереди

 # kill -ALRM pid

pid - идентификатор процесса qmail-send.


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

(чтобы долго не думали)

Большинство MUA руководствуются переменными окружения

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

MAIL=$HOME/Mailbox

elm

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

pine

Поместите в системный файл pine.conf (а также см. djb FAQ):

inbox-path=Mailbox

qpopper 2.2

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

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

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

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

Если файл не существует, то перейдите в папку $QMAILHOME/queue/lock/ и создайте его так

# mkfifo trigger

Затем выставите права.

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

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

- qmail-lspawn и qmail-rspawn имеют лимиты одновременно доставляемых
сообщений, равные 120; изменить эти значения можно, отредактировав до
компиляции файл conf-spawn
- qmail-queue отвергает любые сообщения с адресами, содержащими более
1000 знаков
- qmail-lspawn усекает любой слишком длинный ошибочный код от программы
доставки; она добавляет об этом соответствующее заметку


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

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

# chmod +t $HOME

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

# chmod -t $HOME

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

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


Кода ошибок 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  Ошибка формата конверта. 

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

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


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

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

./Mailbox
|qreceipt famous@sun.com

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

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

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

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

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

Xinetd, кто не сталкивался, альтернатива inetd, только с добавленными функциями контроля доступа и ведения логов. Вот примеры конфигурирования Xinetd для прослушивания портов 25 и 110 (стандарт для smtp и pop3), предполагаем, что tcpserver не используется, в качестве pop3 сервера используется qmail-pop3d:

% more /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
 }
% more /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
 }


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

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

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

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

Отправка бинарного файла из командной строки

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

Очень просто:

% uuencode [binary_file] [binary_file] | datemail mail@address.com

Команда uuencode производит конвертирование бинарного файла в специальный код, который воспринимается почтовыми программами (типа mail) и отправляется посредством представленной выше команды в качестве почтового сообщения.


Свои наработки

Копия письма пользователя для "Большого Брата"

Требуется копировать приходящие письма пользователя badboy@test-domain.ru на адрес forbb@domain.ru

Необходимо а папке почтового ящика пользователя создать dot-файл qmail, например так:

# cd /var/vpomail/domains/test-domain.ru/bed-boy
# vi .qmail
./Maildir/
&frombb@domain.ru