Написано Jan P Tietze <jptietze@mail.hh.provi.de>.
У многих пользователей Linux есть доступ в Интернет через телефонные линии, и многие решили реализовать на своей системе "доставку почты по требованию". То есть всякий раз, когда некоторый IP - пакет должен выйти за пределы локальной сети или машины, автоматически происходит соединение с провайдером услуг Интернет (ISP). Cвязь завершается после некоторого периода бездействия (пакеты для доставки в Интернет отсутствуют).
Хотя это очень удобно и эффективно, с точки зрения стоимости решения, имеется один частный случай, когда это не совсем так (мы помним, что время установления соединения через "обычную" модемную линию относительно велико). И этот случай связан с посылкой электронной почты. E-Mail обычно посылается через SMTP, локально настроенной на вашей системе, через SMTP-сервер, который постоянно находится в Интернет (SMTP-сервер вашего провайдера).
Когда Вы посылаете сообщение, линия будет поднята и связь установлена. Все будет хорошо, если делаете Вы это нечасто, однако если Вы посылаете множество сообщений (писем), то это станет утомительно и невыгодно. Более того, если ваш провайдер налагает ограничения на время или количество звонков, то это уменьшит возможность посылать письма в течении дня, и Вам придется делать это вручную в другое время.
Глава 1 данного документа позволит выйти из этой ситуации, хотя в системах, где имеется внешний поиск DNS имен, это все равно вызовет соединение с ISP. Хотя почта и будет поставлена в очередь. Это случается потому, что sendmail пытается "канонизировать" имена хостов.
Решение этой проблемы двояко: Сначала мы подправим sendmail.cf. Затем мы должны определить процесс, который действительно займется доставкой почты. Лично я предпочитаю использовать crond и создавать задания - это будет описано ниже.
По причинам, описанным в [1.2], я рекомендую изменять m4 файлы, вместо непосредственного редактирования sendmail.cf. Это сэкономит много нервов и позволит избежать неприятных незапланированных осечек, а также сделает конфигурацию более гибкой.
Сначала реализуйте все шаги, описанные в первой части. Затем прочтите материал, специфичный "доставке по требованию".
!Непосредственное конфигурирование очень непрактично и негибко, но ведь вы этого хотите.
Найдите в вашем sendmail.cf строку, похожую на эту:
R$* < @ $* $~P > $* $: $1 < @ $[ $2 $3 $] > $4 |
Поставьте в начале строки "#", чтобы все выглядело примерно так:
#R$* < @ $* $~P > $* $: $1 < @ $[ $2 $3 $] > $4 |
Добавьте следующую строку в файл /usr/src/sendmail-8.8.7/cf/cf/имя_вашей_машины.smtp.mc:
FEATURE(nocanonify)dnl |
Файл sendmail.cf будет построен автоматически с использованием специальных команд. Сохраните старую версию /etc/sendmail.cf перед тем, как устанавливать новую:
cp /etc/sendmail.cf /etc/sendmail.cf.bak cd /usr/src/sendmail-8.8.7/cf/cf m4 yourhostname.smtp.mc > /etc/sendmail.cf |
Часто бывает полезным установить некоторую задержку при доставке почты на время набора номера и установления соединения. Это означает, что, если sendmail пытается установить соединение, но получает отказ, так как связь еще не установилась, то он будет ждать некоторое время, а затем пытаться вновь.
Где-то в вашем sendmail.cf должна быть строка, похожая на эту:
#O DialDelay=10s |
(или очень похожая). Удалите символ "#". Если этого символа уже нет, то значит все в порядке (видимо Вы сделали это ранее).
Если же нет ничего похожего на эту строку, то сами вставьте ее (лучше всего сделать это в разделе "options"):
O DialDelay=10s |
А сейчас измените значение "10s" на значение, которое Вы считаете подходящим.
Добавьте следующую строку в файл /usr/src/sendmail-8.8.7/cf/cf/имя_вашей_машины.smtp.mc:
define(`confDIAL_DELAY',`10s') |
А теперь измените значение"10s" на значение, которое Вы считаете подходящим.
Файл sendmail.cf будет построен автоматически с использованием специальных команд. Сохраните старую версию /etc/sendmail.cf перед тем, как устанавливать новую:
cp /etc/sendmail.cf /etc/sendmail.cf.bak cd /usr/src/sendmail-8.8.7/cf/cf m4 yourhostname.smtp.mc > /etc/sendmail.cf |