На данный момент сервер Postfix имеет конфигурацию, которая доставляет почту хосту ретрансляции без разрешения имен и запрещает пересылку через собственный сервер. Однако сервер все еще звонит интернет провайдеру всякий раз, когда получает исходящее сообщение, адресованное в удаленную сеть. Для того чтобы изменить такое поведение и заставить Postfix ставить исходящие сообщения в очередь, отредактируйте файл main.cf, указав в параметре defer_transports, что следует отложить сеанс SMTP, как показано в следующем примере:
defer_transports = smtp
Как обычно, после внесения изменения выполняем postfix reload от имени root. После перезагрузки Postfix не будет доставлять сообщения по SMTP до тех пор, пока параметр defer_transports не будет изменен или отменен. В следующем разделе будет показано, как использовать эту функциональность для отправки сообщений при установлении соединения сервера с интернет провайдером.
Инициирование отправки сообщенийЕдинственное, что нам осталось, – проинструктировать Postfix об отправке всех стоящих в очереди сообщений по SMTP при установлении соединения с Интернетом. Все, что необходимо сделать, – это автоматически реконфигурировать Postfix при переходе сервера в режим онлайн и вернуть его в прежнее состояние при отключении. Задача решается при помощи сценариев, которые запускаются после установления соединения. В Linux системе, использующей протокол PPP, такие сценарии часто хранятся в каталоге /etc/ppp/ip up.d.
Создайте сценарий с именем postfix в этом каталоге, так чтобы он был запущен после сценария, определяющего resolv.conf. Сценарий postfix будет выглядеть так:
## запустить или перезагрузить Postfix
# если Postfix запускается через chroot, скопировать
# resolv.conf в используемый Postfix файл resolv.conf
cp p /etc/resolv.conf `postconf h queue_directory`/etc/resolv.conf
# отменить отложенную отправку и сделать так, чтобы Postfix это заметил
postconf e "defer_transports ="
postfix reload
# заставить очередь выгрузить всю ожидающую отправки почту
postfix flush
Аналогично при отключении от сети вам следует восстановить старый порядок работы с очередью. Создайте сценарий postfix в каталоге /etc/ppp/ip down.d, который будет запущен после завершения соединения (опять таки, строка для resolv.conf необходима, только если используется chroot):
## запустить или перезагрузить Postfix
# скопировать resolv.conf в resolv.conf, используемый
# Postfix (только для chroot)
cp p /etc/resolv.conf `postconf h queue_directory`/etc/resolv.conf
# включить отложенную отправку и сделать так, чтобы Postfix это заметил
postconf e "defer_transports = smtp"
postfix reload