[mail@dialup]
Завершение конструкции
VAP home logo

- До самого, что ни на есть конца доведу!
-- Николай Носов "Незнайка в Солнечном городе".

На текущий момент доставка почты у нас работает как на получение, так и на отправку, но в ручном режиме, то есть требует явного запуска sendmail или fetchmail чтобы сообщения были доставлены. Осталось все это собрать в единый самостоятельный механизм, чтобы мы больше не задумывались о том как передать и принять почту, а все это работало в полностью автономном режиме без нашего участия. Наиболее удобный момент для доставки почты наступает тогда, когда сетевое соединение только-только установлено. Дело за малым - сделать так, чтобы доставка в этот момент происходила.

Для начала создадим командный файл следующего содержания:


#!/bin/sh
PATH=/bin:/sbin:/usr/bin/:/usr/sbin/:/usr/local/bin/:/usr/local/sbin
export PATH

SPOOL_DIR="/var/spool/mqueue"
LINK_FILE="/var/run/ppp/link.infopac"

if [ -f ${LINK_FILE} ]; then
  F=`ls ${SPOOL_DIR}`
  if [ -n "$F" ]; then sendmail -q; fi
  su -l vap -c fetchmail > /dev/null
  F=`ls ${SPOOL_DIR}`
  if [ -n "$F" ]; then sendmail -q; fi
fi

В вашем случае он должен отличаться только именем пользователя - в строке "su -l vap -c fetchmail" вместо "vap" должно стоять ваше пользовательское имя. Разместите файл, к примеру, как "/etc/mail/delivier.sh" и сделайте его исполняемым:

chmod a+x /etc/mail/delivier.sh

Как видите, логика файла проста - в случае наличия установленного соединения, которое проверяется по присутствию файла "/var/run/ppp/link.infopac" (откуда этот файл берется будет объяснено позже), выполнить доставку почты, если в очереди "sendmail" есть сообщения, затем запустить "fetchmail" чтобы принять входящую почту, а вслед за этим еще раз при необходимости обработать очередь, чтобы установленные туда на доставку входящие сообщения были доставлены.

Поскольку речь идет о FreeBSD и коммутируемом доступе в сеть, то вы почти наверняка используете для дозвонки "ppp(8)" известный также как "user-ppp". Для того чтобы созданный нами командный файл исполнялся после установки соединения, достаточно в файл "/etc/ppp/ppp.linkup" внести строку:

!bg /usr/local/etc/mail/deliver.sh

Строка должна быть добавлена в группу команд с меткой идентичной метке конфигурационной группы в файле "/etc/ppp/ppp.conf", которая используется при доступе в сеть. Это нужно с той целью, чтобы обработка почты срабатывала только при доступе к провайдеру, чью почтовую систему мы используем для пересылки. Такое ограничение существует по той причине, что абсолютно у всех провайдеров, если они в своем уме :-), функция пересылки на почтовых шлюзах доступна только для их клиентов, иначе через их почтовую систему спокойно можно было бы рассылать спам кому угодно. В принципе, если вы пользуетесь для доступа в сеть услугами только одного провайдера, то команду можно смело вносить в группу с меткой "MYADDR:".

Для примера приведу выдержки из моих конфигурационный файлов "user-ppp":

/etc/ppp/ppp.conf:
-------------------------------------------------------------
infopac:
	set ifaddr	10.1.1.1/0 10.2.2.2/0 0.0.0.0 0.0.0.0
	add default	HISADDR
	set timeout	30
	set phone	"420220:735000:454545"
        set authname	ЗДЕСЬ_БЫЛО_ИМЯ
	set authkey	ЗДЕСЬ_БЫЛ_ПАРОЛЬ
	allow user	vap
	allow mode	interactive

/etc/ppp/ppp.linkup:
-------------------------------------------------------------
infopac:
	! /usr/bin/touch /var/run/ppp/link.infopac
	shell /usr/local/etc/firewall/configure.sh
	!bg /usr/local/sbin/squid -k reconfigure
	!bg /usr/local/etc/mail/deliver.sh

Обратите внимание на самую первую строку стоящую в группе "infopac". Эта строка как раз и создает тот самый файл, по присутствию которого проверяется наличие установленного соединения. Разумеется, в случае разрыва соединения файл должен удаляться, поэтому конфигурационный файл "/etc/ppp/ppp.linkdown" содержит строки:

MYADDR:
        ! /bin/rm /var/run/ppp/link.*

Как видите здесь используется универсальная команда, которая удаляет любой файл-признак соединения не зависимо от его типа. Именно поэтому эта команда внесена в общую группу "MYADDR".

На этом, собственно, все. Теперь всякий раз на установке сетевого соединения будет автоматически выполняться доставка почты без какого-либо вашего вмешательства. Чтобы почта доставлялась не только при установке соединения, но и во время нахождения на линии, достаточно в системный файл планировщика "/etc/crontab" добавить строку:

15	*	*	*	*	root	/etc/mail/deliver.sh

Эта строка запускает проверку спула и доставку каждые 15 минут.

Finita! Почта ходит на полном автопилоте.




ФОБОС: погода в г.Тольятти