5. Полное Описание Файла Конфигурации

Этот раздел детально описывает файл конфигурации.

Есть одна вещь, которую вам нужно уяснить сразу: синтаксис файла конфигурации разработан так, чтобы его можно было достаточно легко анализировать, так как синтаксический анализ производится при каждом запуске sendmail, а не для того, чтобы людям было легко его читать или писать. В списке "будущих разработок" имеется компилятор файла конфигурации.

Файл конфигурации организован как последовательность строк, каждая из которых начинается с одного символа, определяющего семантику всей остальной строки. Строки, начинающиеся с пробела или символа табуляции, являются строками-продолжениями (хотя во многих местах семантика не особенно хорошо определена). Пустые строки и строки, начинающиеся с символа "#" являются комментариями.

5.1. R и S - Правила Перезаписи

Ядром синтаксического анализа адресов являются правила перезаписи. Они являются упорядоченной системой обработки. Sendmail просматривает набор правил перезаписи, ища совпадения в левосторонней части (LHS) правила. Если правило подходит, адрес замещается правосторонней частью (RHS) правила.

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

Синтаксис этих двух команд такой:

Sn

Устанавливает текущий набор правил в n. Если вы начинаете набор не в первый раз, это добавляет к старому определению.

Rlhs rhs comments

Поля должны быть разделены как минимум одним символом табуляции; поля могут содержать пробелы. lhs - это шаблон, применяемый на входе. Если он подходит, вывод переписывается на rhs. Комментарии игнорируются.

Макрорасширения в виде $x выполняются при чтении файла конфигурации. Расширения вида $&x выполняются во время работы, используя какой-либо менее общий алгоритм. Это предназначено только для ссылочных внутренне определенных макросов, типа $h, изменяющихся во время работы.

5.1.1. Левосторонняя часть

Левосторонняя часть правил перезаписи содержит шаблон. Обычные слова просто напрямую сравниваются. Метасинтаксис вводится использованием знака доллара. Метасимволы это:

$* Совпадение нуля или более лексем
$+ Совпадение одного или более лексем
$- Совпадение ровно одной лексемы
$=x Совпадение любой фразы класса x
$~x Совпадение любого слова не входящего в класс x

При любом из этих совпадений, они назначаются символу $n для замены в правосторонней части, где n - индекс в LHS. Например, если LHS:

$-:$+

применена к входу:

UCBARPA:eric

Правило совпадет, и значения переданные в RHS будут такими:

$1 UCBARPA
$2 eric

Дополнительно, LHS может включать $@ для совпадения нулевыми лексемами. Это не граница $n в RHS, и обычно используется только в одиночестве, чтобы соответствовать нулевому входу.

5.1.2. Правосторонняя часть

Когда левосторонняя часть правила перезаписи совпадает, входная информация удаляется и замещается правосторонней частью. Лексемы копируются прямо из RHS, если они не начинаются со знака доллара. Метасимволы таковы:

$n Заместить неопределенную лексему n из LHS
$[name$] Канонизировать имя
$(map key $@arguments $:default $) Обобщенная ключевая функция преобразования
$>n "Вызов" набора правил n
$#mailer Решение в mailer
$@host Определить host
$:user Определить user

Синтаксис $n замещает соответствующее значение из $+, $-, $*, $=, или $~ совпадения в LHS. Это может быть использовано везде.

Имя хоста, заключенное между $[ и $] просматривается в базе(ах) данных хостов и заменяется на каноническое имя 1. Например, "$[ftp$]" может стать "ftp.CS.Berkeley.EDU", а "$[[128.32.130.2]$]" может стать "vangogh.CS.Berkeley.EDU.". Sendmail распознает его числовой IP адрес без вызова сервера имен и замещает его своим каноническим именем.

Синтаксис $( ... $) - более общая форма просмотра; он использует названное преобразование вместо неявного. Если ничего не найдено, вставляется указанное умолчание; если умолчание не определено, и ничего не найдено, значение остается без изменений. Аргументы передаются в преобразование для возможного использования.

Синтаксис $>n заставляет остаток строки замещать обычным образом, а затем передать как аргумент в набор правил n. Конечное значение набора правил n затем подставляется в это правило.

Синтаксис $> распространяется на все после имени набора правил и до конца замещаемой строки, а затем передается как первичный вход в набор правил. Позволяются рекурсивные вызовы. Например,

$>0 $>3 $1

расширяет $1, передает его в набор правил 3, а затем передает результат набора правил 3 в набор правил 0.

Синтаксис $# должен быть использован только в наборе правил 0, или подпрограмме набора правил 0. Он приводит к немедленному завершению выполнения набора правил, и сигнализирует sendmail, что адрес полностью разрешен. Полный синтаксис таков:

$#mailer $@host $:user

Он определяет тройку {mailer, host, user}, необходимую для почтовой программы. Если почтовая программа локальна, то часть host может быть опущена2. Мailer должен быть одним словом, а host и user могут состоять из нескольких частей. Если mailer является встроенным IPC mailer'ом, host может быть списком хостов, разделенных запятыми, который просматривается в поисках первого работающего адреса (точно как записи типа MX). Позднее user переписывается специфическим для данной почтовой программы набором правил перезаписи, и назначается макросу $u. В особом случае, если определенный mailer имеет ОПРЕДЕЛЕНЫЙ флаг F=@ и первый символ значения $: является "@", "@" обрезается, и выставляется флаг в описании адреса, заставляющий sendmail не применят обработку по набору правил 5.

Обычно, подходящее правило применяется снова, поэтому правило идет по кругу до появления ошибки. RHS может быть предварена $@ или $: для изменения такого поведения. Префикс A $@ заставляет набор правил возвращаться с остатком RHS в качестве значения. Префикс $: заставляет немедленно закончить работу правила, но продолжить работу набора правил; это может быть использовано во избежание продолжения применения правила. Префикс перед продолжением обрезается.

Префиксы $@ и $: могут предшествовать описанию $>; например:

R$+ $: $>7 $1

Совпадает со всем, передает это в набор правил семь, и продолжается; $: необходимо во избежание бесконечной петли.

Замещение происходит в описанном порядке, то есть замещаются параметры из LHS, канонизируются имена хостов, вызываются "подпрограммы", и в конце обрабатываются $#, $@, и $:.

5.1.3. Семантика Наборов Правил Перезаписи

Существует пять наборов правил перезаписи, имеющих специфическую семантику. Взаимоотношения четырех из них изображены на Рис.1.


                    +---+
                 -->| 0 |-->resolved address
                /   +---+
               /          +---+   +---+
              /       --->| 1 |-->| S |--
       +---+ / +---+ /    +---+   +---+  \      +---+
addr-->| 3 |-->| D |                      ----->| 4 |-->msg
       +---+   +---+ \    +---+   +---+  /      +---+
                      --->| 2 |-->| R |--
                          +---+   +---+

Рис.1. Семантика набора перезаписи

D - Добавка домена отправителя

S - Перезапись отправителя в зависимости от почтовой программы

R - Перезапись получателя в зависимомти от почтовой программы


Набор правил 3 должен превратить адрес в "каноническую форму". Эта форма должна иметь основной синтаксис:

local-part@host-domain-spec

Набор правил 3 применяется sendmail'ом до любых изменений в любом адресе.

Если не определено ни одного знака "@", то hostdomain-spec может быть добавлен (квадратик "D" на Рис.1.) из адреса отправителя (если в определениях почтовых программ для соответствующей отсылающей программы выставлен флаг C).

Набор правил 0 применяется после набора правил 3 к адресу, определяющему получателей. Он должен быть разделен на тройку {mailer, host, user}. Mailer должен быть определен в определениях почтовых программ в файле конфигурации. Host определяется макросом $h для использования в расширенном argv указанной почтовой программы.

Правила 1 и 2 применяются ко всем адресам отправителей и получателей соответственно. Они применяются до любого указания в определении почтовой программы. Их никогда не нужно проверять.

Набор правил 4 применяется ко всем адресам в сообщении. Он обычно используется для перевода из внутренней формы во внешнюю.

В добавок, набор правил 5 применяется ко всем локальным адресам (в частности, к тем, которые разрешаются в почтовой программе с выставленным флагом "F=5") не имеющим псевдонимов. Это последняя ловушка для локальных имен.

5.1.4. Ловушки Наборов Правил

Несколько дополнительных наборов правил считаются "ловушками", и могут быть определены для некоторых особенностей. Все они являются именованными наборами правил. Все формы "check_*" выдают статус принять/отказать; переход в конец, или нормальный выход означает принять, а определение $#error - отказать. Многие из них могут иметь результатом специальную почтовую программу $#discard; она принимает сообщение, как будто все прошло успешно, но затем выбрасывает его без доставки.

5.1.4.1. check_relay

Набор правил check relay вызывается после приема соединения. Он проверяет

client.host.name $| client.host.address

где $| - метасимвол, разделяющий две части. Это правило может отказать в соединении из различных мест.

5.1.4.2. check_mail

Набор правил check mail проверяет параметр имени пользователя из команды SMTP MAIL. Может принять или отвергнуть адрес.

5.1.4.3. check_rcpt

Набор правил check rcpt проверяет параметр имени пользователя из команды SMTP RCPT. Может принять или отвергнуть адрес.

5.1.4.4. check_compat

Набор правил check compat проверяет

sender-address $| recipient-address

где $| - метасимвол, разделяющий адреса. Он может принять или отвергнуть передачу почты между этими двумя адресами, что очень похоже на функцию checkcompat().

5.1.5. Почтовые Программы IPC

Если набор правил 0 определяет почтовую программу IPC (то есть, почтовая программа имеет "[IPC]" перечисленное в качестве Path в строке конфигурации M), происходит некоторая специальная обработка. Имя хоста, переданное после "$@" имеет найденное расширение MX; при этом имя хоста просматривается в DNS в поисках альтернативных узлов для доставки.

Имя хоста также может быть представлено как четыре числа, разделенные точками в квадратных скобках; например:

[128.32.149.78]

Это заставит сделать прямое преобразование числового значения в IP адрес хоста.

Имя хоста, прошедшее после "$@" также может быть списком хостов, разделенных запятыми. Для каждого из них находится MX, а результаты складываются в один длинный список MX. Цель всего этого - создать "фальшивые" записи MX, которых нет в DNS для частных внутренних сетей.

Последний специальный случай - имя хоста может быть передано как текстовая строка в квадратных скобках:

[ucbvax.berkeley.edu]

Эта форма избегает MX преобразования. Заметь!: Это предназначено только для ситуаций, когда у вас имеется сетевой firewall, или иной хост, производящий специальную обработку всей вашей почты, так что ваша запись MX указывает на шлюзовую машину; затем эта машина производит прямую доставку на машины в вашем локальном домене. Использование этой особенности напрямую нарушает секцию 5.3.5 RFC 1123: это должно использоваться только в случае, если у вас для этого имеется серьезная причина.

5.2. D - Определение Макроса

Имена Макросов состоят из одного символа или из слова в фигурных скобках {}. Имена из одного символа могут быть выбраны из всей таблицы ASCII, пользовательские макросы должны быть выбраны только из набора символов верхнего регистра. Буквы нижнего регистра и специальные символы имеют веутреннее использование. Длинные имена, начинающиеся с буквы нижнего регистра или знака пунктуации, зарезервированы для использования sendmail'ом, поэтому длинные пользовательские имена макросов должны начинаться с буквы верхнего регистра.

Синтаксис определения макросов таков:

Dxval

Где x - имя макроса (которое может быть одним символом или словом в скобках), а val - значение, которое должен иметь этот макрос. При этом не должно быть пробелов, не принадлежащих содержимому значения макроса.

Макросы интерполируются использованием конструкции $x, где x - имя макроса для интерполяции. Эта интерполяция производится при чтении файла конфигурации, кроме строк M. Специальная конструкция $&x может быть использована в строках R для получения косвенной интерполяции.

Условные зависимости могут быть определены использованием синтаксиса:

$?x text1 $| text2 $.

Это интерполирует text1, если назначен макрос $x, и text2 в обратном случае. Оператор "иначе" ($|) может быть опущен.

Имена макросов из маленьких букв зарезервированы для специальной семантики, используемой при проходе информации в или из sendmail, а специальные символы зарезервированы для условий и т.п. Имена из заглавных букв (т.е., от $A до $Z) специально зарезервированы для авторов файла конфигурации.

Следующие макросы определяются и/или внутренне используются sendmail'ом для интерполирования в argv для почтовых программ или других контекстов. Те, которые отмечены знаком | пропускают информацию в sendmail3, отмеченные знаком | пропускают информацию и в и из sendmail, не отмеченные макросы пропускают из sendmail, но внутренне больше никак не используются. Вот эти макросы:

$a Исходящая дата в формате RFC 822. Выделяется из строки Date:.
$b Текущая дата в формате RFC 822.
$c Счетчик пересылок. Это счетчик числа строк Received: плюс значение флага командной строки -h.
$d Текущая дата в формате UNIX (ctime).
$e| (Устарел; вместо него используйте опцию SmtpGreetingMessage.) Сообщение на входе SMTP. Печатается при запуске SMTP. Первое слово должно быть макросом $j, как определено RFC821. По умолчанию "$j Sendmail $v ready at $b". Обычно переопределяется, чтобы указать номер версии конфигурации, например, "$j Sendmail $v/$Z ready at $b"
$f Конвертный адрес отправителя (from).
$g Адрес отправителя по отношению к получателю. Например, если $f - "foo", $g будет "host!foo", "foo@host.domain", или что-нибудь другое, соответствующее принимающей почтовой программе.
$h Хост получателя. Устанавливается в наборе правил 0 из поля $# анализируемого адреса.
$i Идентификационный номер в очереди, например, "HAA12345".
$j| "Официальное" доменное имя для этого узла. Оно полностью уточнено, если может быть найдена полная квалификация. Оно должно быть переопределено, чтобы быть полностью уточненным доменным именем, если ваша система не сконфигурирована таким образом, что может найти его автоматически.
$k Имя узла UUCP (из системного вызова uname).
$l| (Устарел; вместо него используйте опцию UnixFromLine.) Формат строки UNIX from. До тех пор, пока вы не измените формат почтового ящика UNIX, вы не должны изменять умолчание, которое равно "From $g $d".
$m Доменная часть значения возвращенного gethostname.При нормальных обстоятельствах, $j эквивалентен $w.$m.
$n| Имя демона (для сообщений об ошибках). По умолчанию "MAILER-DAEMON".
$o| (Устарел: вместо него используйте опцию OperatorChars.) Набор "операторов" в адресах. Список знаков, которые могут быть рассмотрены как обозначения, и которые будут разделять значения во время анализа. Например, если "@" было в макросе $o, то ввод "a@b" будет просканирован как три обозначения: "a," "@," и "b." По умолчанию ".:@[]", минимально необходимые для анализа по RFC 822; более богатый набор операторов - ".:%@!/[]", добавляющий поддержку для UUCP, %-hack, и адресов X.400.
$p Идентификационный номер процесса sendmail.
$q| Формат адреса отправителя по умолчанию. Макрос $q указывает, как должен выглядеть по умолчанию адрес отправителя в сообщении. По умолчанию "<$g>". Обычно переопределяется на "$?x$x <$g>$|$g$." Или "$g$?x ($x)$.", соответствующим двум следующим форматам: Eric Allman <eric@CS.Berkeley.EDU> eric@CS.Berkeley.EDU (Eric Allman) Sendmail надлежащим образом квотирует имена, имеющие специальные знаки, если используется первая форма.
$r Протокол, использовавшийся для получения сообщения. Выставляется из флага командной строки -p или кодом сервера SMTP.
$s Имя хоста отправителя. Выставляется из флага командной строки -p или кодом сервера SMTP.
$t Числовое представление текущего времени.
$u Пользователь-получатель.
$v Номер версии бинарного файла sendmail.
$w| Hostname этого узла. Корневое имя для этого хоста (смотри ниже всякие нерулезности).
$x Полное имя отправителя.
$z Домашний каталог получателя.
$_ Подтвержденный адрес отправителя.
${bodytype} Тип тела сообщения (7BIT или 8BITMIME), определенный из конверта.
${client_addr} IP адрес клиента SMTP. Определяется только в сервере SMTP.
${client_name} Имя хоста клиента SMTP
${client_port} Номер порта клиента SMTP. Определяется только в сервере SMTP.
${envid} Идентификационный номер конверта, переданный в sendmail как часть конверта.
${opMode} Текущий режим работы (из флага -b).

Существует три типа дат, которые могут быть использованы. Макросы $a и $b в формате RFC 822; $a - время, выделяемое из строки "Date:" сообщения (если она там есть), а $b - текущая дата и время (используемые для "штемпеля"). Если во входящем сообщении не найдено ни одной строки "Date:", $a также выставляется на текущее время. Макрос $d эквивалентен макросу $b в формате UNIX (ctime).

Макросы $w, $j, и $m выставляются для опознания этого хоста. Sendmail, если это вообще возможно, пытается найти полностью определенное имя хоста; он делает это вызовом gethostname(2) для получения текущего hostname, и затем, передавая его в gethostbyname(3), который, по идее, должен вернуть каноническую версию этого имени хоста4. Если все успешно проходит, $j выставляется в полностью определенное имя и $m выставляется в доменную часть имени (все, что находится после первой точки). Макрос $w выставляется в первое слово (все, что до первой точки) если вы имеете файл конфигурации уровня 5 и выше; иначе, он будет иметь то же значение, что и $j. Если канонификация проваливается, предписывается, чтобы файл конфигурации выставлял $j в полностью определенное доменное имя5.

Макрос $f является изначально определенным идентификатором отправителя; при посылке на специфический хост макрос $g выставляется в адрес отправителя относительно получателя. Например, если я посылаю на "bollard@matisse.CS.Berkeley.EDU" с машины "vangogh.CS.Berkeley.EDU", макрос $f будет "eric", а макрос $g будет macro will be "eric@vangogh.CS.Berkeley.EDU".

Макрос $x выставляется в полное имя отправителя. Оно может быть определено несколькими способами. Оно может быть передано как флаг в sendmail. Оно может быть определено в переменной окружения NAME. В третьих, значение строки "Full-Name:" в заголовке, если она существует. И в четвертых, поле комментария в строке "From:". Если же все это ни к чему не приведет, и если сообщение исходит с этого хоста, полное имя смотрится в файле /etc/passwd.

При отправке, макросы $h, $u, и $z выставляются в host, user, и домашний каталог (если локально) получателя. Первые два берутся из частей $@ и $: правил перезаписи, соответственно.

Макросы $p и $t используются для создания уникальных строк (например, для поля "Message-Id:"). Макрос $i выставляется в идентификатор очереди на этом хосте; При вставке в строку отметки времени, это может быть полезно для отслеживания сообщений. Макрос $v выставляется равным номеру версии sendmail; обычно он помещается в отметку о времени и очень полезен при отладке.

Поле $c получает значение "счетчика пересылок", то есть, то количество раз, которое это сообщение обрабатывалось. Это может быть определено флагом командной строки -h или подсчетом отметок времени в сообщении.

Поля $r и $s соответствуют протоколу, использовавшемуся для соединения с sendmail и имени хоста отправителя. Они оба могут быть назначены, используя флаг командной строки -p, или по раздельности, используя флаги -M или -oM.

Макрос $_ устанавливается в подтвержденное имя хоста отправителя. Если отправитель имеет работающий сервер IDENT, соответствующий RFC 1413, а получатель имеет включенный протокол IDENT, он будет включать имя пользователя на том хосте.

Макросы ${client_name}, ${client_addr}, и ${client_port} выставляются в имя, адрес, и номер порта клиента SMTP вызывающего как сервер sendmail. Они могут быть использованы в наборах правил check * (конечно же, используя косвенную форму определения $&!).

5.3. C и F - Определение Класса

Можно определить классы или фразы для соответствия левосторонней части правил перезаписи, где "фраза" - это последовательность символов, не содержащая символов пробела. Например, для предотвращения отправки сообщений самому себе, может быть создан класс всех локальных имен для данного узла. Это может быть определено как в файле конфигурации, так и читаться из другого файла. Классы имеют имена, состоящие из одной буквы или слова в {скобках}. Имена классов, начинающиеся с букв нижнего регистра и специальных символов, зарезервированы для использования системой. Классы, определенные в файлах конфигурации могут быть заданы заглавными буквами для коротких имен, или начинаться с заглавной буквы для длинных имен.

Синтаксис:

Ccphrase1 phrase2...
Fcfile

Первая форма определяет класс c соответствующим любому из названных слов. Ее можно разбивать на несколько строк; на пример, две формы:

CHmonet ucbmonet

и

CHmonet
CHucbmonet

эквивалентны. Форма "F" читает элементы класса c из названного file.

Можно получить доступ из правил к элементам классов, используя $= или $~, (сопоставить вхождения не входящие в класс) совпадающие только с отдельным словом; вхождения из нескольких слов в классе, в этом контексте, игнорируются.

Некоторые классы имеют для sendmail внутреннее значение:

$=e Содержит Content-Transfer-Encodings которые могут быть преобразованы 8->7 bit. Предопределено для содержания "7bit", "8bit", и "binary".
$=k То же самое, что и $k, то есть, имя узла UUCP.
$=m Устанавливается в набор доменов, знающих об этом хосте, изначально просто $m.
$=n Может быть установлено в набор типов MIME, которые никогда не перекодируются из восьми бит в семь. По умолчанию "multipart/signed". Типы сообщений "message/*" и "multipart/*" никогда не перекодируются напрямую. Сообщения "multipart" взегда обрабатываются рекурсивно. Обработка сообщений "message/*" контролируется классом $=s.
$=q Набор Content-Types, которые не могут быть перекодированы как base64 (если они должны быть перекодированы, они будут перекодированы как quoted-printable). Он может иметь первичные типы types (например, "text") или полные типы (типа "text/plain"). Класс инициализируется содержащим только "text/plain".
$=s Содержит набор подтипов сообщений, с которыми можно обращаться рекурсивно. По умолчанию содержит только "rfc822". Другие типы "message/*" не могут быть перекодированы 8->7 bit. Если сообщение содержит восьмибитные данные, посланные на семибитный хост, и сообщение не может быть перекодировано в семь бит, оно будет обрезано до 7 бит.
$=t Установлен в набор доверенных пользователей строкой конфигурации T. Если вы хотите считывать список доверенных пользователей из файла, используйте Ft/file/name.
$=w Выставлен в набор всех имен, о которых знает хост. Может быть использован для совпадений с локальными именами хостов.

Sendmail может быть скомпилирован с разрешением использовать scanf(3) в строке F. Это позволит вам производить простейший анализ текстовых файлов. Например, чтобы прочитать все имена пользователей из системного файла /etc/passwd в класс, используйте

FL/etc/passwd %[^:]

Это будет читать каждую строку до первого двоеточия.

5.4. M - Определение Почтовой программы

В этой строке определяются почтовые программы и их интерфейсы. Формат такой:

Mname, {field=value}*

Где name - имя почтовой программы (используется только внутренне), а пары "field=name" определяют атрибуты почтовой программы. Поля такие:

Path Путь к почтовой программе
Flags Специальные флаги для этой почтовой программы
Sender Набор(ы) правил перезаписи для адресов отправителя
Recipient Набор(ы) правил перезаписи для адреса получателя
Argv Вектор аргументов, передаваемый в почтовую программу
Eol Строка end-of-line для этой почтовой программы
Maxsize Максимальный размер сообщения для этой почтовой программы
Linelimit Максимальная длина линии в теле сообщения
Directory Рабочий каталог для почтовой программы
Userid Идентификаторы пользователя и группы для запуска
Nice Инкремент nice(2) для почтовой программы
Charset Набор символов по умолчанию для 8-битных символов
Type Информация о типе MTS (используется для сообщений об ошибках)

В имени поля проверяется только первый символ.

Нижеописанные флаги могут быть установлены в описании почтовой программы. Любые другие флаги могут свободно использоваться для условных заголовков в сообщениях для определенных почтовых программ. Флаги, отмеченные |,не интерпретируются бинарником sendmail; они обычно используются для корреляции с флагами в строке H. Флаги, отмеченные знаком |, применяются в почтовой программе для адреса отправителя, хотя обычно это делает принимающая почтовая программа.

a Запустить протокол Extended SMTP (ESMTP) (определенный в RFC 1651, 1652, и 1653). Этот флаг по умолчанию включен, если приветственное сообщение SMTP содержит слово "ESMTP".
A Просмотреть пользовательскую часть адреса в базе данных псевдонимов. Обычно выставляется только для локальных почтовых программ.
b Проставить пустую строку в конце сообщения. Это предназначено для работы с некоторыми глупыми версиями /bin/mail, требующими пустую строку, но сами ее не проставляющие.
c Не включать в адрес комментарии. Это должно использоваться, только если вы должны работать с удаленной почтовой программой, не понимающей комментариев. Обрезает адрес из вида "Phrase <address>" или "address (Comment)" до просто "address".
C Если почта получена от почтовой программы с этим флагом, любые адреса в заголовке, не имеющие знака ("@") после перезаписи набором правил три будут иметь окончание "@domain" из адреса отправителя, взятого с конверта. Это позволяет почту с заголовками типа:
From: usera@hosta>
To: userb@hostb, userc

Автоматически переписывать как:

From: usera@hosta
To: userb@hostb, userc@hosta

Однако это не всегда работает надежно.

d Не включать угловые скобки вокруг адресов с синтаксисом путевого адреса. Полезно для почтовых программ, передающих адреса в оболочку, которая может интерпретировать угловые скобки как перенаправление ввода/вывода.
D Эта почтовая программа хочет в заголовке строку "Date:".
e Эта почтовая программа слишком медленна, поэтому попробуй избежать нормального соединения; любое необходимое соединение произойдет во время обработки очереди.
E Избегать строки, начинающиеся с "From" в сообщении с знаком ">".
f Почтовая программа хочет флаг -f from, но только если это операция пересылки в сети (то есть, почтовая программа выдаст ошибку, если выполняющий пользователь не имеет специальных прав).
F| Эта почтовая программа хочет строку заголовка "From:".
g Обычно, sendmail посылает внутренне созданную почту (например, сообщения об ошибках) используя нулевой обратный адрес, как это требуется RFC 1123. Однако, некоторые почтовые программы не принимают нулевой обратный адрес. Если это необходимо, вы можете установить флаг g, чтобы sendmail не следовал стандартам; сообщения об ошибках будут посланы от MAILER-DAEMON (на самом деле, значение макроса $n).
h Символы верхнего регистра в именах хостов для этой почтовой программы должны быть сохранены.
i Произвести перезапись пользовательской базы данных на конвертный адрес отправителя.
I Эта почтовая программа будет говорить на SMTP с другим sendmail - поэтому он может использовать некоторые специальные особенности протокола. Эта опция не требуется (т.е.. если эта опция опущена, передача все равно будет работать нормально, хотя не настолько эффективно, как могла бы).
j Произвести перезапись пользовательской базы данных на получателей и отправителей.
k Обычно, когда sendmail соединяется с хостом посредством SMTP, он проверяет, не соединился ли он случайно сам с собой, что может случиться, если sendmail имеет неправильную конфигурацию, или если сетевой интерфейс закольцован. Этот флаг выключает проверку петли. Он должен использоваться только в очень необычных случаях.
K В настоящее время не работает. Зарезервирован для разбиения на куски.
l Эта почтовая программа локальна (т.е., будет осуществлена последняя доставка).
L Ограничивает длину строк, как определено в RFC821. Эта обесцененная опция должна быть заменена почтовым объявлением L=. По историческим причинам, флаг L также выставляет флаг 7.
m Эта почтовая программа может разослать нескольким пользователям на одном хосте в одну транзакцию. Когда в argv части определения почтовой программы встречается макрос $u, это поле будет повторено необходимое количество раз для всех подходящих пользователей.
M| Эта почтовая программа хочет строку заголовка "Message Id:".
n Не вставлять в начале сообщения "From" в стиле UNIX.
o Всегда работать как хозяин почтового ящика получателя. Обычно sendmail работает как отправитель для локально генерируемой почты или как "демон" (на самом деле, пользователь определяется в опции u) при получении сетевой почты. Большинству локальных почтовых программ требуется обычное поведение, которое не позволит установить конвертный адрес отправителя, пока почтовая программа работает как демон. Этот флаг игнорируется, если выставлен флаг S.
p Использовать обратный путь в стиле route-addr в команде SMTP "MAIL FROM:" вместо просто обратного адреса; хотя это и требуется в секции 3.1 RFC821, многие хосты не обрабатывают нормально обратные пути. Обратные пути осуждаются в RFC 1123.
P| Эта почтовая программа хочет строку "Return-Path:".
q Когда адрес, разрешаемый в этой почтовой программе, проверен (команда SMTP VRFY), генерировать ответы 250 вместо ответов 252. Это будет означать, что адрес локальный.
r То же, что и f, но посылает флаг -r.
R Открыть соединение SMTP на "безопасном" порту. "Безопасные" порты не являются таковыми, за исключением UNIX машин, поэтому не ясно, даст ли это что-нибудь.
s Обрезать символы квотирования (" и \) у адреса перед вызовом почтовой программы.
S Не переустанавливать userid перед вызовом почтовой программы. Это может быть использовано в безопасной среде, где sendmail запущен от root. Это может быть использовано для избежания поддельных адресов. Если также определено поле U=, это флаг заставит id пользователя всегда быть установленным на этого пользователя и группу (вместо того, чтобы оставить его как у root).
u Символы верхнего регистра в именах пользователей для этой почтовой программы должны быть сохранены.
U Эта почтовая программа хочет строки "From" в стиле UUCP с уродливым "remote from <host>" в конце.
w Пользователь должен иметь действительный бюджет на этой машине, т.е., getpwnam должен быть успешным. Если это не так, почта не будет доставлена. Это требуется для работы ".forward".
x Эта почтовая программа хочет строку заголовка "Full-Name:".
X Эта программа хочет использовать алгоритм скрытых точек, как определено в RFC821; смысл такой: любая строка, начинающаяся с точки, будет иметь предваряющую ее точку (для того, чтобы ее обрезали на другом конце). Это гарантирует, что строки в сообщении, содержащие точку не прекратят сообщение преждевременно.
z Запустить Протокол Локальной Доставки Почты (Local Mail Transfer Protocol, LMTP) между sendmail и локальной почтовой программой. Это вариант SMTP определенный в RFC 2033, специально разработанный для зоставки в локальный почтовый ящик.
0 Не просматривать записи MX для хостов, посылающих посредством SMTP.
3 Расширить список символов, преобразованных в =XX запись при преобразовании в Quoted-Printable для того, чтобы не потерять те, которые не преобразуются в чистом виде между ASCII и EBCDIC. Полезно, если в вашем узле имеется мэйнфрэймы IBM.
5 Если для этого адреса не найдено псевдонимов, пропустить адрес через набор правил 5 для другого возможного разрешения. Это предназначено для перенаправления почты в другое альтернативное место доставки.
7 Обрезать весь вывод до семи бит. Стоит по умолчанию, если установлен флаг L. Заметьте, что очистка этой опции не достаточна, чтобы через sendmail полностью проходили восьмибитные данные. Если опция 7 выставлена, а она в основном всегда выставлена, то восьмибитные данные на входе будут обрезаться. Нужно отметить, что эта опция затрагивает только сообщения, которые не имеют примененного MIME преобразования 8->7 бит.
8 Если выставлена, то эта почтовая программа принимает для отсылки восьмибитные данные; обычная попытка MIME преобразования 8->7 бит будет пропущена.
9 Если выставлена, производить ограниченные MIME преобразования 7->8 бит. Эти преобразования ограничены данными типа text/plain.
: Проверить адреса, не начинаются ли они с ":include:"; если это так, обратить их к почтовой программе "*include*".
| Проверить адреса, не начинаются ли они с "|"; "prog".
/ Проверить адреса, не начинаются ли они с "/"; если это так, обратить их к почтовой программе "*file*".
@ Просмотреть адреса в пользовательской базе данных.

Конфигурационные файлы до уровня 6 предполагают опции "A", "w", "5", ":", "|", "/", и "@" в почтовой программе называющейся "local".

Почтовая программа со специальным именем "error" может быть использована для генерации сообщений об ошибках пользователя. Поле хоста (опционально) содержит возвращаемый статус выхода, а поле пользователя - распечатываемое сообщение. Статус выхода может быть числом или одним из значений USAGE, NOUSER, NOHOST, UNAVAILABLE, SOFTWARE, TEMPFAIL, PROTOCOL, или CONFIG, возвращающим соответствующий код выхода EX_, или усовершенствованный код ошибки, описанный в RFC 1893, Enhanced Mail System Status Codes. Например, вхождение:

$#error $@ NOHOST $: Host unknown in this domain

в RHS правила вызовет генерацию указанной ошибки, и, если LHS совпадает, будет возвращен статус выхода "Host unknown". Эта почтовая программа работоспособна только в наборах правил 0, 5, или одном из наборов правил check_*.

Почтовая программа со специальным именем "discard" заставляет выкидывать любую почту, посланную к ней, но в то же время считать, что она была успешно доставлена.

Почтовая программа, называющаяся "local" должна быть определена в каждом файле конфигурации. Она используется для доставки локальной почты, и обслуживается особо несколькими образами. В добавок, три другие почтовые программы, называющиеся "prog", "*file*", и "*include*" могут быть определены для настройки доставки сообщений в программы, файлы и списки :include: соответственно. Их умолчания:

Mprog, P=/bin/sh, F=lsD, A=sh -c $u
M*file*, P=/dev/null, F=lsDFMPEu, A=FILE
M*include*, P=/dev/null, F=su, A=INCLUDE

Наборы перезаписи Sender и Recipient могут быть как просто идентификатором набора правил, так и двумя идентификаторами, разделенными слешем; в этом случае, первый набор перезаписи применяется к конвертным адресам, а второй применяется к заголовкам.

Directory - это на самом деле перечисление путей для просмотра с разделителем ":". Например, определение "D=$z:/" сначала опробует выполнение в домашнем каталоге получателя; если он недоступен, то попробует выполнение в корневом каталоге файловой системы. Это предназначено для использования только в почтовой программе "prog", из-за того, что некоторые оболочки (типа csh) отказываются работать, если они не могут прочитать домашний каталог. Вследствие того, что каталог очереди обычно не доступен для чтения непривилегированным пользователям, сценарии csh, как принимающие программы не смогут работать.

Userid определяет идентификатор пользователя и группы по умолчанию для работы, заменяя собой опцию DefaultUser. Если флаг S почтовой программы также определен, то этот пользователь и группа используется для работы при всех обстоятельствах. Это может быть задано как user:group для выставки идентификаторов пользователя и группы одновременно; это могут быть целые числа или символические имена, просматриваемые в файлах passwd и group соответственно. Если определено только символическое имя пользователя, в качестве идентификатора группы используется идентификатор, прописанный для этого пользователя в файле passwd.

Поле Charset используется при преобразовании сообщения в MIME; этот набор символов используется в заголовке Content-Type:. Если он не установлен, используется опция DefaultCharset, если же и она не назначена, используется значение "unknown-8bit". Внимание: это поле применяется к почтовой программе отправителя, а не получателя. Например, конвертный адрес отправителя принадлежит локальной сети, а получателя - внешней, набор символов будет установлен из поля Charset= для локальной сетевой почтовой программы, а не для внешней.

Поле Type= устанавливает тип информации, используемой в сообщениях об ошибках MIME, как определено в RFC 1894. На самом деле это три значения, разделенные слешами: MTAtype (то есть, описание того, как называются хосты), тип адреса (описание адресов электронной почты), и тип диагностики (описание кодов диагностических ошибок). Каждое из них должно быть зарегистрированным значением, или начинаться с "X-". По умолчанию "dns/rfc822/smtp".

5.5. H - Определение Заголовка

Формат строк заголовка, вставляемых sendmail в сообщение, определяется строкой H. Синтаксис этой строки:

H[?mflags?]hname: htemplate

Строки-продолжения в этом определении отражаются прямо в выходящее сообщение. Макрос htemplate раскрывается до подстановки в сообщение. Если определена mflags (окруженная знаками вопроса), как минимум один из указанных флагов должен иметь место в определении почтовой программы для этого заголовка для автоматического вывода. Если один из этих заголовков имеется на входе, он отражается на выход не зависимо от этих флагов.

Некоторые заголовки имеют специальную семантику, описываемую позднее.

Вторичный синтаксис позволяет производить проверку заголовков в том виде, как они были считаны. Для включения проверки, используйте:

HHeader: $>Ruleset

Указанный набор правил (Ruleset) вызывается для указанного заголовка Header, и может возвращать $#error для отказа от сообщения, или $#discard для сброса сообщения (как и в остальных наборах правил check_*). Заголовок рассматривается как структурированное поле, то есть, комментарии (в кавычках) перед обработкой удаляются.

Например, следующие строки в конфигурации:

HMessage-Id: $>CheckMessageId
R< $+ @ $+ >$@ OK
R$* $#error $: Illegal Message-Id header

Приведут к отказу от любого сообщения, имеющего заголовок в любой из следующих форм:

Message-Id: <>
Message-Id: любой текст
Message-Id: <легальный текст@домен> дополнения

5.6. O - Опция Назначения

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

Oопция=значение

Это назначает опции опция указанное значение. Заметьте, что между буквой "O" и именем опции должен быть пробел. Раньше это было так:

Ooзначение

где опция o - один символ. В зависимости от опции, значение может быть строкой, целым числом, булевым (с допустимыми значениями "t", "T", "f", или "F"; по умолчанию TRUE), или интервалом времени.

Поддерживаемые опции (со старыми, однобуквенными именами в квадратных скобках):

AliasFile=spec, spec, ... [A] Определяет возможный файл(ы) псевдонимов. Каждый spec должен быть в виде "class: file" где class: опционально и по умолчанию равно "implicit". В зависимости от того, как скомпилирован sendmail, возможные классы - это "implicit" (искать в вкомпилированном списке типов файлов псевдонимов, для обратной совместимости), "hash" (если определено NEWDB), "dbm" (если определено NDBM), "stab" (внутренняя таблица символов - обычно не используется, кроме случаев, если у вас нет других средств просмотра баз данных), или "nis" (если определено NIS). Если указан список specs, sendmail просматривает их по порядку.
AliasWait=timeout [a] Если установлено, при запуске ждать до timeout (мо умолчанию в минутах) появления вхождения "@:@" в базе данных псевдонимов. Если оно не появляется в течение этого интервала, перестроить базу данных (если выставлена опция AutoRebuildAliases) или сделать предупреждение.
AllowBogusHELO [нет короткого имени] Если выставлена, позволяется команда HELO SMTP не включающая имени хоста. Выставка этой опции нарушает секцию 5.2.5 RFC 1123, но необходима для работы с некоторыми клиентами SMTP. Если значение имеется, оно все равно проверяется на легитимность.
AutoRebuildAliases [D] Если выставлена, при необходимости и возможности перестраивать базу данных псевдонимов. Если эта опция не выставлена, sendmail никогда не будет перестраивать базу данных псевдонимов, пока это не будет явно запрошено использованием -bi. Не рекомендуется - может привести к переполнению памяти.
BlankSub=c [B] Устанавливает символ замены пробелов c. Неквотированные пробелы в адресах заменяются этим символом. По умолчанию пробел (т.е. замена не производится).
CheckAliases [n] Проверять RHS псевдонимов при перестройке базы данных псевдонимов.
CheckpointInterval=N [C] Контрольные точки очереди каждые N (по умолчанию 10) посланных адресов. Если ваша система падает во время получения большого списка, это предотвратит повторную передачу на все адреса, кроме последних.
ClassFactor=fact [z] Указанный коэффициент (factor) умножается на класс сообщения (определенный полем Precedence: в пользовательском заголовке и строками P в файле конфигурации) и вычитается из приоритета. Таким образом, сообщения с более высоким Priority: будут предпочитаться. По умолчанию 1800.
ColonOkInAddr [нет короткого имени] Если выставлена, в e-mail адресах дозволяются двоеточия (например, "host:user"). Если не выставлена, двоеточия (согласно RFC 822) означают начало конструкции группы ("groupname: member1, member2, ... memberN;"). Всегда принимаются дублированные двоеточия ("nodename::user") и понимается соответствующее вложение routeaddr ("<@relay:user@host>"). Более того, эта опция по умолчанию включена, если версия конфигурации ниже 6 (для обратной совместимости). Однако, для полной совместимости с RFC 822, она должна быть выключена.
ConnectionCacheSize=N [k] Максимальное число открытых соединений, которые будут кэшированы одновременно. По умолчанию одно. Это задерживает закрытие текущего соединения, до тех пор, пока этот процесс sendmail не захочет соединиться с другим хостом, или завершится. Установка этого значения в ноль будет означать немедленное закрытие соединения. Из-за потребления файловых дескрипторов, кэш соединений должен быть небольшим: 4 вероятно является практическим максимумом.
ConnectionCacheTimeout=timeout [K] Максимальное время бездействия кэшированного соединения. При превышении этого времени, соединение немедленно закрывается. Это значение должно быть небольшим (порядка десяти минут). Перед использованием кэшированного соединения, sendmail всегда посылает команду RSET для проверки соединения; если она проваливается, он заново открывает соединение. Смысл этой опции - быть хорошим соседом по сети и не использовать слишком долго ресурсы другого конца. По умолчанию 5 минут.
ConnectionRateThrottle=N [нет короткого имени] Если установлено положительное значение, позволить более чем N входящих демонов соединений на протяжении одной секунды. Это предназначено для сглаживания пиков и уменьшения средней загрузки. По умолчанию ноль (никаких ограничений).
DaemonPortOptions=options [O] Устанавливает опции сервера SMTP. Опции - пары ключ=значение. Известные ключи:
Port Имя/номер рабочего порта (по умолчанию "smtp")
Addr Адресная маска (по умолчанию INADDR_ANY)
Family Семейство адресов (по умолчанию INET)
Listen Размер очереди прослушивания (по умолчанию 10)
SndBufSize Размер буфера TCP на отправку
RcvBufSize Размер буфера TCP на прием

Адресная маска может быть числовым адресом в записи с точками или сетевым именем.

DefaultCharSet=charset [нет короткого имени] Когда сообщение, имеющее 8-битные символы, но не в формате MIME, конвертируется в MIME (см. опцию EightBitMode) в заголовок Content-Type: должен быть включен набор символов. Этот набор символов обычно назначается из поля Charset= дескриптора почтовой программы. Если оно не установлено, используется значение этой опции. Если эта опция не установлена, используется значение "unknown-8bit".
DefaultUser=user:group [u] Выставляет идентификатор пользователя по умолчанию для почтовых программ равным user:group. Если group опущена, а user - имя пользователя (в противоположность числовому идентификатору пользователя), используется группа по умолчанию для этого пользователя из файла /etc/passwd. И user и group могут быть числами. Почтовые программы без флага S в описании почтовой программы будут работать от этого пользователя. По умолчанию 1:1. Значение также может быть задано как символическое имя пользователя6.
DeliveryMode=x [d] Производить доставку в режиме x. Легальные режимы:
i Доставлять интерактивно (синхронно)
b Доставлять в фоне (асинхронно)
q Просто класть сообщение в очередь (доставка во время обработки очереди)
d Отложить доставку и все преобразования (доставка во время обработки очереди)

По умолчанию "b", если не определена ни одна опция, и "i" - если определена, но без аргументов (т.е., "Od" эквивалентно "Odi"). Флаг командной строки -v выставляет ее в i.

DialDelay=sleeptime [нет короткого имени] Сетевые соединения Dial-on-demand могут видеть таймауты, если соединение открылось до установки звонка. Если этой опцией установлен интервал времени, а время соединения истекает во время первой попытки соединения, sendmail заснет на это время и попробует снова. Это должно дать вашей системе время для установки соединения с вашим поставщиком услуг. По умолчанию измеряется в секундах, поэтому "DialDelay=5" использует пятисекундную задержку. По умолчанию ноль (без повторной передачи).
DontBlameSendmail=option,option,... [нет короткого имени] Во избежание возможных попыток взлома, основанных на открытых на запись для группы и всех остальных пользователей файлах и каталогах, sendmail производит параноидальную проверкупри открытии большинства из используемых им файлов. Если, по некоторой причине, вам просто необходимо иметь каталог /etc открытым на запись для группы, то вам нужно отключить эту проверку (за счет снижения уровня безопасности вашей системы и большей ее уязвимости). Аргументами являются отдельные опции, отключающие проверку: Safe
AssumeSafeChown
ClassFileInUnsafeDirPath
ErrorHeaderInUnsafeDirPath
FileDeliveryToHardLink
FileDeliveryToSymLink
ForwardFileInUnsafeDirPath
ForwardFileInUnsafeDirPathSafe
ForwardFileIngroupWritableDirPath
GroupWritableAliasFile
GroupWritableDirPathSafe
GroupWritableForwardFileSafe
GroupWritableIncludeFileSafe
HelpFileinUnsafeDirPath
IncludeFileInUnsafeDirPath
IncludeFileInUnsafeDirPathSafe
IncludeFileIngroupWritableDirPath
LinkedAliasFileInWritableDir
LinkedClassFileInWritableDir
LinkedForwardFileInWritableDir
LinkedIncludeFileInWritableDir
LinkedMapInWritableDir
LinkedServiceSwitchFileInWritableDir
MapInUnsafeDirPath
RunProgramInUnsafeDirPath
RunWritableProgram
WorldWritableAliasFile
WriteMapToHardLink
WriteMapToSymLink
WriteStatsToHardLink
WriteStatsToSymLink
Safe - это умолчание. Выше имеется более подробное описание этих флагов. Использование этой опции не рекомендуется.
DontExpandCnames [нет короткого имени] Стандарты говорят, что адреса хостов, используемые в почтовом сообщении должны быть полностью каноническими. Например, если ваш хост имеет имя "Cruft.Foo.ORG", а также имеет псевдоним "FTP.Foo.ORG", всегда должно использоваться первое имя. Это навязывается во время канонификации имени хоста (просмотрах $[ ... $]). Если эта опция выставлена, протоколы игнорируются, и делаются "неправильные" вещи. Однако, IETF потихоньку продвигается к изменению этого стандарта, поэтому такое поведение может стать приемлемым. Но заметьте, что последующие передающие хосты все еще могут переписать адрес в настоящее каноническое имя.
DontInitGroups [нет короткого имени] Если установлена, sendmail будет избегать вызова initgroups(3).Если у вас работает NIS, это вызовет последовательный просмотр карты groups.byname, что может сильно перегрузить ваш сервер NIS в большом домене. Это даст то, что если только группа найденная для пользователей будет их главной группой, что сделает доступ к файлам несколько более ограниченным. Не имеет никакого эффекта, если система не имеет списков групп.
DontProbeInterfaces [нет короткого имени] Sendmail при запуске обычно находит имена для всех активных (на вашей машине) интерфейсов и добавляет их имена в класс известных псевдонимов хоста $=w. Если у вас большое количество виртуальных интерфейсов, или если обратный просмотр вашего DNS медленный, то это может занять некоторое время. Эта опция отключает такой просмотр. Однако, вы должны быть уверены, что вы включили все варианты имен в класс $=w с помощью любого другого механизма.
DontPruneRoutes [R] Обычно, sendmail пытается избежать любые ненужные явные маршруты при посылке сообщения об ошибке (как обсуждено в секции 5.2.6 RFC 1123). Например, при посылке сообщения об ошибке
<@known1,@known2,@known3:user@unknown>
sendmail обрежет "@known1,@known2" для того, чтобы сделать маршрут как можно более прямым. Однако, если выставлена опция R, это будет отключено, и почта будет послана по первому адресу в маршруте, даже если остальные адреса известны. Это может быть полезно, если вы заперты за файерволом.
DoubleBounceAddress=error-address [нет короткого имени] Если при посылке сообщения об ошибке происходит ошибка, послать отчет об ошибке по указанному адресу. Если не назначено, то по умолчанию это "postmaster".
EightBitMode= действие [8] Установить обработку восьмибитных данных. Существует два вида восьмибитных данных: объявленные как таковые использованием ESMTP объявления BODY=8BITMIME или флагом командной строки -B8BITMIME, и необъявленные 8-битные данные, то есть, так уж произошло, что они являются восьмибитными. Существует три основные операции, которые можно произвести: необъявленные 8-битные данные могут быть автоматически преобразованы в 8BITMIME, необъявленные 8-битные данные могут быть пропущены как есть, без преобразования в MIME ("просто послать 8"), и объявленные 8-битные данные могут бытьпреобразованы в 7-битные 7-bit для передачи в не-8BITMIME почтовую программу. Возможные действия:

sОтвергнуть необъявленные 8-битные данные ("strict")
mПреобразовать необъявленные 8-битные данные в MIME ("mime")
pПропустить необъявленные 8-битные данные ("pass")

Во всех случаях соответствующе объявленные 8BITMIME данные при необходимости будут преобразованы в 7BIT.

ErrorHeader=file-or-message [E] Предварять сообщения об ошибках указанным сообщением. Если эта опция начинается со слеша, то ее значение рассматривается как путь к файлу, содержащему сообщение (это рекомендуемая установка). Иначе, это буквальное сообщение. Файл ошибки может содержать имя, почтовый адрес, и/или телефонный номер ответственного за почту и поддержку конечных пользователей. Если опция отсутствует или нулевая, или указывает на несуществующий или не доступный для чтения файл, не печатается никакого сообщения.
ErrorMode=x [e] Разрешать ошибки, используя режим x. Значения для x:

p Печатать сообщения об ошибке (по умолчанию)
q Без сообщений, просто выдавать статус выхода
m Отправлять назад ошибки почтой
w Печатать ошибки (отправлять почтой, если пользователь не находится в системе)
e Отправлять назад ошибки почтой и всегда выдывать нулевой статус выхода

FallbackMXhost=fallbackhost [V] Если определена, fallbackhost работает как MX с очень низким приоритетом. Предназначена для узлов с плохим сетевым соединением.
ForkEachJob [Y] Если выставлена, запускать каждую работу из очереди как отдельный процесс. Используйте эту опцию, если у вас мало памяти, так как при обработке очереди имеется тенденция к потреблению значительного объема памяти.
ForwardPath=path [J] Устанавливает путь для поиска пользовательских файлов .forward. По умолчанию "$z/.forward". Некоторые узлы, использующие автомонтировщик, могут предпочесть изменить это на "/var/forward/$u" для поиска файла с именем, совпадающим с именем пользователя в системном каталоге. Она также может указывать на последовательность путей, разделенных двоеточиями; sendmail останавливается после первого же успешно и безопасно открытого файла. Например, "/var/forward/$u:$z/.forward" сначала будет искать в /var/forward/username, а затем в ~username/.forward (но только если первый файл не существует).
HelpFile=file [H] Определяет файл помощи для SMTP.
HoldExpensive [c] Если выходная почтовая программа отмечена как слишком дорогостоящая, не соединяться с ней немедленно. Это требует, чтобы организация очереди была вкомпилирована, потому что настоящая посылка почты будет зависеть от процесса обработки очереди
HostsFile=path [нет короткого имени] Путь к базе данных хостов, обычно "/etc/hosts". Эта опция нужна только когда sendmail канонифицирует адреса, а затем только когда во вхождении сервисного переключателя "files" имеется "hosts". В частности, этот файл никогда не используется при разрешении адреса хоста; это контролируется системной подпрограммой gethostbyname(3).
HostStatusDirectory=path [нет короткого имени] Местонахождение долгосрочной информации статуса хостов. Когда установлена, информация о статусах хостов (например, хост отключен или не принимает соединения) будет общей для всех процессов sendmail; обычно, эта информация сохраняется в течение одного прохода очереди. Эта опция требует для работы кэш соединений, по крайней мере, равный 1. Если опция начинается с ведущего "/", то это абсолютный путь; иначе, он относителен почтовому каталогу очереди. Вероятное значение для узлов, желающих иметь постоянный статус хостов - ".hoststat" (т.е., подкаталог каталога очереди).
IgnoreDots [i] Игнорировать точки в входящих сообщениях. Всегда отключена (то есть, точки всегда принимаются) при чтении почты SMTP.
LogLevel=n [L] Установить по умолчанию уровень протоколирования n. По умолчанию 9.
Mxзначение [нет длинного имени] Установить значение макроса x. Предназначена только для использования в командной строке. Предпочитается флаг -M.
MatchGECOS [G] Разрешить нечеткие совпадения в поле GECOS. Если этот флаг выставлен, и обычный просмотр имени пользователя проваливается (т.е., нет псевдонима с таким именем, и проваливается getpwnam), последовательно искать в файле паролей подходящее вхождение в поле GECOS. Здесь также требуется, чтобы во время компиляции было включено MATCHGECOS. Эта опция не рекомендуется.
MaxDaemonChildren=N [нет короткого имени] Если выставлена, sendmail будет отказываться от соединений, если он имеет больше чем N порожденных процессов, обрабатывающих входящую почту. Это не ограничивает количество исходящих соединений. Если не установлена, никаких ограничений нет - то есть, это будет контролироваться средней загрузкой системы.
MaxHopCount=N [h] Максимум счетчика пересылок. Сообщения, обработанные более чем N раз, считаются ходящими по кольцу и не принимаются. По умолчанию 25.
MaxHostStatAge=age [нет короткого имени] Пока еще не работает. Эта опция определяет, как долго жить информации о статусе хоста. Например, если определено, что хост отключен, то соединения к нему не будут производиться в течение указанного времени. По умолчанию исчисляется в минутах.
MaxMessageSize=N [нет короткого имени] указывает максимальный размер сообщения, сообщаемый в ответе ESMTP EHLO. Сообщения больше указанного размера не принимаются.
MaxQueueRunSize=N [нет короткого имени] Максимальное количество работ, обрабатываемых за один проход очереди. Если не установлено, то такого ограничения нет. Если у вас очень большие очереди, или очень маленький интервал прохода очереди, это может быть нестабильно. Однако, так как в каталоге очереди по порядку обрабатываются первые N сообщений, то это число должно быть достаточно большим, во избежание "потерянных работ" случающихся в каталоге очереди.
MaxRecipientsPerMessage=N [нет короткого имени] Максимальное количество получателей на одно сообщение, принимаемое в транзакции SMTP. Замечание: слишком низкое значение может помешать отправке почты из групп рассылки , использующих SMTP для начальной транзакции. Если не установлено, то не имеется никаких ограничений по количеству получателей на конверт.
MeToo [m] пошлите и мне, даже если я не вхожу в развернутые псевдонимы.
MinFreeBlocks=N [b] Перед приемом почты по SMTP требовать в файловой системе, содержащей очередь, по крайней мере N свободных блоков. Если пространства недостаточно, sendmail выдает на команду MAIL ответ 452. Это приглашает отправителя попробовать снова попозже.
MinQueueAge=age [нет короткого имени] Не обрабатывать работы в очереди, находящиеся в ней менее указанного интервала времени. Это предназначено для улучшения реакции посредством частых обработок очереди без пожирания системных ресурсов слишком частыми запусками работ. По умолчанию измеряется в минутах.
MustQuoteChars=s [нет короткого имени] Устанавливает список символов, которые должны быть квотированы при использовании в полном имени в части фразы синтаксиса "phrase <address>". По умолчанию "'.". Символы "@,;:\()[]" всегда добавляются к этому списку.
NoRecipientAction [нет короткого имени] Действие, предпринимаемое при получении сообщения, не имеющего ни одного правильного заголовка получателя (To:, Cc:, Bcc:, или ApparentlyTo: - последнее включено для обратной совместимости со старыми sendmail'ами). Может быть None для пропуска сообщения без изменений, что нарушает протокол, Add-To для добавки заголовка To: с любым получателем, найденным на конверте (что должно разоблачить получателей Bcc:), Add-Apparently-To для добавки заголовок Apparently-To: (только для обратной совместимости и официально убрано), Add-To-Undisclosed для добавки заголовка "To: undisclosed-recipients:;" чтобы сделать заголовок легальным без раскрытия чего-либо, или Add Bcc для добавки пустого заголовка Bcc:.
OldStyleHeaders [o] Подразумевает, что заголовки могут быть в старом формате, т.е., имена разграничиваются пробелами. Это включает адаптивный алгоритм: если адрес получателя содержит запятую, скобки, или угловые скобки, то подразумевается, что запятые уже существуют. Если этот флаг не включен, только запятые разграничивают имена. Заголовки всегда выходят с запятыми между именами. По умолчанию отключена.
OperatorChars=charlist [макрос $o] список символов, считающихся "операторами", то есть символами, разделяющими лексемы. Все символы операторов сами по себе являются лексемами; последовательности символов не являющихся операторами всегда являются лексемами. Символы пробела разделяют лексемы, но не сами лексемы - например, "AAA.BBB" содержит три лексемы, а "AAA BBB" - две. Если не назначено, то по умолчанию OperatorChars соответствуют ".:@[]"; в добавок, символы "()<>,;" всегда являются операторами.
PostmasterCopy=postmaster [P] Если установлено, копии сообщений об ошибках будут посланы названному postmaster'у. Посылается только заголовок сообщения. Так как многие ошибки являются проблемами пользователей, то на больших узлах это, вероятно, будет не очень хорошей идеей, содержащей признаки всех видов нарушения конфиденциальности, но, похоже, популярной у некоторых поставщиков систем. По умолчанию не посылает копии.
PrivacyOptions=opt,opt,... [p] Устанавливает опции конфиденциальности. "Конфиденциальность" на самом деле не факт; многие из них - просто способ настоять на более строгом соответствии протоколу SMTP. Опции можно выбрать из:

public Позволить открытый доступ
needmailhelo Требовать команду HELO или EHLO до MAIL
needexpnhelo Требовать команду HELO или EHLO до EXPN
noexpn Полностью запретить EXPN
needvrfyhelo Требовать команду HELO или EHLO до VRFY
novrfy Полностью запретить VRFY
noetrn Полностью запретить ETRN
noverb Полностью запретить VERB
restrictmailq Ограничить команду mailq
restrictqrun Ограничить флаг командной строки -q
noreceipts Не возвращать успешные DSN
goaway Запретить все основные запросы статуса SMTP
authwarnings Вкладывать в сообщение заголовок X-Authentication-Warning:
Псевдофлаг "goaway" выставляет все флаги, кроме "restrictmailq" и "restrictqrun". Если mailq ограничено, только члены группы, которой принадлежит каталог очереди, могут просматривать очередь. Если проходы очереди запрещены, только root и владелец каталога очереди могут запустить очередь. Authentication Warnings и предупреждения о различных условиях могут указать на попытки обмануть почтовую систему, типа использования нестандартного каталога очереди.
QueueDirectory=dir [Q] Использовать в качестве каталога очереди только указанный каталог.
QueueFactor=коэффициент [q] Использовать коэффициент как множитель функции преобразования для определения, когда просто положить работу в очередь вместо ее запуска. Это значение определяется разностью между текущей средней загрузкой и ограничением средней загрузки (опция QueueLA) для определения максимального приоритета сообщений, которые будут посланы. По умолчанию 600000.
QueueLA=LA [x] Когда средная загрузка системы превышает LA, просто откладывать сообщения в очередь (т.е. не пытаться их послать). По умолчанию 8.
QueueSortOrder=алгоритм [нет короткого имени] Использовать алгоритм для сортировки очереди. Использется только первый символ значения. Легальные значения: "host" (упорядочивать по имени первого хоста первого получателя), "time" (упорядочивать по времени отправки), и "priority" (упорядочивать по приоритету). Упорядочивание по хосту улучшает использование кэша соединений, но может привести к обработке сообщений с низким приоритетом, идущим на один хост вместо высокоприоритетных сообщений идущих на несколько хостов; скорее всего не должно использоваться при низкоскоростной сетевой связи. Упорядочивание по времени всегда не лучший выход, поскольку это позволит отправлять большие, огромные сообщения раньше небольших, персональных сообщений, но может быть приемлемо на некоторых хостах с очень быстрыми сетевыми соединениями. По умолчанию производится упорядочивание по приоритету.
QueueTimeout=timeout [T] Синоним для "Timeout.queuereturn". Используйте ту форму вместо формы "QueueTimeout".
ResolverOptions=options [I] Устанавливает опции разрешителя. Значения могут быть установлены использованием +flag и очищены использованием -flag; флаги могут быть: "debug", "aaonly", "usevc", "primary", "igntc", "recurse", "defnames", "stayopen", или "dnsrch". Может быть определена строка "HasWildcardMX" (без + или -) для выключения сопоставления записей MX при канонификациях имен. Заметь! До версии 8.7, эта опция указывала, что сервер имен должен отвечать при приеме адресов. Это было заменено проверкой пречисления метода "dns" во вхождении сервиса "hosts" в сервисного переключателя.
RunAsUser=user [нет короткого имени] Параметр user может быть именем пользователя (просматривается в /etc/passwd) или числовым идентификатором пользователя; также форма может иметь добавку ":group" (где группа может быть задана числом или символически). Если установлено не нулевое значение (т.е. не root), sendmail перейдет к этому идентификатору пользователя вскоре после запуска7. Это позволяет избежать определенного класса проблем безопасности. Однако, это означает, что все файлы ".forward" и ":include:" должны быть доступны на чтение для указанного пользователя, а в системах, не поддерживающих правильно бит suid, все файлы для записи должны быть открыты на запись для этого пользователя, а все программы будут выполнены этим пользователем. Это также не совместимо с опцией SafeFileEnvironment. Иными словами, это не добавит слишком много безопасности средней системе, а может разрушить ее (потому что пермиссии других файлов будут хуже). Однако, это может быть полезно на файерволах и в других местах, где пользователи не имеют бюджетов, а файлы псевдонимов хорошо содержатся.
RecipientFactor=коэффициент [y] Указанный коэффициент добавляется к приоритету (уменьшая, таким образом, приоритет работы) каждого получателя, т.е., это значение "наказывает" работы с большим количеством получателей. По умолчанию 30000.
RefuseLA=LA [X] Если средняя загрузка системы превышает LA, не принимать входящие соединения SMTP. По умолчанию 12.
RetryFactor=коэффициент [Z] Коэффициент добавляется к приоритету при каждой обработке работы. Таким образом, при каждом выполнении работы, ее приоритет будет уменьшен на указанное значение. Во многих системах это должно иметь положительный эффект. По умолчанию 90000.
SafeFileEnvironment=каталог [нет короткого имени] Если эта опция установлена, sendmail будет делать вызов chroot(2) в указанный каталог до каких-либо записей в файлы. Если имя файла, указанного пользователем начинается с каталога, эта часть пути будет обрезана до записи, так (например), если переменная SafeFileEnvironment установлена в "/safe", то записи "/safe/logs/file" и "/logs/file" на самом деле указывают на один файл. Вдобавок, если эта опция выставлена, sendmail отказывается производить доставку по символическим связям.
SaveFromLine [f] Сохранять строки "From" в стиле Unix в начале заголовков. Обычно они считаются избыточными и отбрасываются.
SendMIMEErrors [j] Если установлена, посылать сообщения об ошибках в формате MIME (см. RFC1521 и RFC1344). Если отключена, sendmail не будет возвращать в ответ на EHLO ключевое слово DSN и не будет делать обработку Delivery Status Notification, как описано в RFC1891.
ServiceSwitchFile=filename [нет короткого имени] Если ваша операционная система имеет абстракцию сервисного переключателя (например, /etc/nsswitch.conf в Solaris или /etc/svc.conf в Ultrix и DEC OSF/1), то будет опрашиваться этот сервис, а эта опция игнорироваться. В другом случае, это имя файла, обеспечивающего список методов, используемых для реализации определенных сервисов. Синтаксис - последовательности строк, каждая из которых - последовательность слов. Первое слово - имя сервиса, а последующие - типы сервисов. Сервисы, к которым sendmail обращается напрямую - "aliases" и "hosts". Типы сервисов могут быть "dns", "nis", "nisplus", или "files" (загвоздка лишь в том, что соответствующая поддержка должна быть вкомпилирована до ссылки на сервис). Если ServiceSwitchFile не определен, то по умолчанию это /etc/service.switch. Если этот файл не существует, по умолчанию переключатель:
aliases Files
hosts dns nis files
По умолчанию файл "/etc/service.switch".
SevenBitInput [7] Обрезать ввод до семи бит для совместимости со старыми системами. Это не должно быть необходимо.
SingleLineFromHeader [нет короткого имени] Если установлена, строки From: имеющие внутри себя новые строки, разворачиваются в одну строку. Это нужно для обхода заплатки в Lotus Notes, которая явно не понимает нормально завернутые заголовки RFC822.
SingleThreadDelivery [нет короткого имени] Если установлена, клиентская машина никогда не будет пытаться открыть два соединения SMTP к одному серверу одновременно, даже в различных процессах. То есть, если другой sendmail уже говорит с каким-нибудь хостом, новый sendmail не откроет другого соединения. Это свойство двояко; хотя это уменьшает загрузку на другой машине, это задерживает передачу почты (например, если один sendmail доставляет огромное сообщение, другие sendmail'ы не смогут послать даже маленькие сообщения). Также, это требует файловый дескриптор (для файла блокировки) для каждого соединения, поэтому вам, возможно, придется уменьшить значение опции ConnectionCacheSize во избежание исчерпания файловых дескрипторов на процессы. Требует опцию HostStatusDirectory.
SmtpGreetingMessage=сообщение [макрос $e] При запуске сервера SMTP выдается сообщение. По умолчанию "$j Sendmail $v ready at $b".
StatusFile=file [S] Протоколировать суммарную статистику в указанном файле. Если не установлена, суммарная статистика не сохраняется. Этот файл не изменяется в размере. Он может быть распечатан программой mailstats(8).
SuperSafe [s] Быть супернадежным, т.е. всегда записывать файл в очередь, даже если вы хотите попробовать немедленную доставку. Sendmail всегда организует файл в очереди до возвращения управления клиенту при любых обстоятельствах. Это всегда должно быть установлено.
TempFileMode=mode [F] Пермиссии для файлов в очереди. По умолчанию в восьмеричном представлении. По умолчанию 0600.
Timeout.type=timeout [r; содержит старую опцию T] Выставляет значения таймаутов. Конкретный таймаут указывается значением type. Распознаваемые таймауты, их значения по умолчанию, и их минимальные значения определенные в секции 5.3.2 RFC 1123:
initial Ожидание начального приветствия [5m, 5m]
helo Ответ на команду HELO или EHLO [5m, none]
mail Ответ на команду MAIL [10m, 5m]
rcpt Ответ на команду RCPT [1h, 5m]
datainit Ответ на команду DATA [5m, 2m]
datablock Чтение блока данных [1h, 3m]
datafinal Ответ на завершающую "." в данных [1h, 10m]
rset Ответ на команду RSET [5m, none]
quit Ответ на команду QUIT [2m, none]
misc Ответ на команды NOOP и VERB [2m, none]
ident Таймаут протокола IDENT [30s, none]
fileopen| Таймаут открытия файлов .forward и :include: [60s, none]
command| Чтение команды [1h, 5m]
queuereturn| Время до возврата сообщения [5d, 5d]
queuewarn| Время до посылки предупреждения [none, none]
hoststatus| Время "устаревания" статуса хоста [30m, none]
Все, кроме отмеченных знаком "|" применяются к клиентам SMTP. Если сообщение отсылается используя расширение NOTIFY SMTP, предупреждающее сообщение будет послано только если определен NOTIFY=DELAY. Таймауты queuereturn и queuewarn могут быть, кроме того, указаны меткой, основанной на поле Precedence: сообщения; она может быть "срочно" ("urgent") (указывается положительным ненулевым значением), "обычно" ("normal") (указывается нулевым значением), или "не срочное" ("nonurgent") (указывается отрицательным значением). Например, значение "Timeout.queuewarn.urgent=1h" указывает таймаут предупреждения для срочных сообщений равный одному часу.
TimeZoneSpec=tzinfo [t] Устанавливает информацию о местной временной зоне в tzinfo - например, "PST8PDT". На самом деле, если эта опция не выставлена, переменная окружения TZ очищается (поэтому используется системное умолчание); если установлена, но нулевая, используется пользовательская переменная TZ, если установлена и ненулевая, то переменная TZ выставляется в это значение.
TryNullMXList [w] Если эта система "лучший" (т.е., имеющий самое низкое предпочтение ("preference")) MX для заданного хоста, его правила конфигурации обычно должны обнаружить эту ситуацию, и разрешить эту ситуацию особо, пересылая почту в UUCP, считая ее локальной, или еще как. Однако, в некоторых случаях (типа фаерволов Internet) вы можете захотеть соединиться напрямую с тем хостом, как будто у него вообще нет никакой записи MX. Выставка этой опции заставляет sendmail делать именно это. Плохо то, что ошибки в вашей конфигурации будут диагностироваться как "host unknown" или "message timed out" вместо чего-либо более значимого. Эта опция не рекомендуется.
UnixFromLine=fromline [макрос $l] Определяет формат используемый, когда sendmail должен добавить строку From в стиле UNIX (то есть, строку, начинающуюся с "From<пробел>user"). По умолчанию "From $g $d". Не изменяйте это, до тех пор, пока не начнете использовать другой формат почтовых ящиков UNIX (что очень сомнительно).
UnsafeGroupWrites [нет короткого имени] Если установлена, файлы :include: и .forward, открытые на запись для группы считаются "небезопасными", то есть, они не могут ссылаться на программы или писать прямо в файлы. Файлы :include: и .forward, открытые на запись для всех также небезопасны.
UseErrorsTo [l] Если имеется заголовок "Errors-To:", отсылать сообщения об ошибках по адресу, указанному в нем. Обычно они идут к конвертному отправителю. Использование этой опции заставляет sendmail нарушать RFC 1123. Эта опция не рекомендуется и официально не поддерживается.
UserDatabaseSpec=udbspec [U] Определение пользовательской базы данных.
UserSubmission [нет короткого имени] Это начальное представление прямо из Mail User Agent. Может быть установлен в файле конфигурации, если вы имеете MUA, не пропускающие флаг -U или использующие расширение XUSR ESMTP, но некоторая ретранслируемая почта при этом может быть переписана неподходящим образом.
Verbose [v] Работать в "болтливом" режиме. Если эта опция установлена, sendmail устанавливает опции HoldExpensive (ранее c) и DeliveryMode (ранее d) так, что вся почта, доставляется полностью за одну работу так, что вы можете видеть полный процесс доставки. Опция Verbose никогда не должна выставляться в файле конфигурации; предназначена только для использования в командной строке.

Все опции могут быть указаны в командной строке, используя флаг -O или -o, но большинство может заставить sendmail освободиться от своих suid'ных полномочий. Опции, которые этого не причиняют: MinFreeBlocks [b], DeliveryMode [d], ErrorMode [e], IgnoreDots [i], LogLevel [L], MeToo [m], OldStyleHeaders [o], PrivacyOptions [p], Timeouts [r], SuperSafe [s], Verbose [v], CheckpointInterval [C], и SevenBitInput [7]. Также, M (определить макрос) при определении макросов r или s считается "безопасным".

5.7. P - Определение Старшинства

Значения для поля "Precedence:" могут быть определены использованием контрольной строки P. Синтаксис этого поля:

Pимя=число

Когда имя найдено в поле "Precedence:" класс сообщения выставляется в число. Более высокие числа означают более высокое старшинство. Числа менее нуля имеют специальное назначение - если происходит ошибка во время обработки сообщения, его тело не будет возвращено; это предназначается для "большой" почты, типа проходящей через списки рассылки. По умолчанию старшинство равно нулю. Например, наш список старшинств состоит из:

Pfirst-class=0
Pspecial-delivery=100
Plist=-30
Pbulk=-60
Pjunk=-100

Использование людьми, пишущие обработчики списков рассылки "Precedence: list" очень приветствуется. Старые версии sendmail (которые отвергали все возвраты ошибок из-за отрицательного старшинства) не распознают это имя, давая ему нулевое старшинство по умолчанию. Это позволяет владельцам списков рассылки видеть возвраты ошибок и в старых, и в новых версиях sendmail.

5.8. V - Уровень Версии Конфигурации

Заметь!: эти уровни версий не имеют ничего общего с номерами версий в файлах. Например, при написании файлов конфигурации версии 8 (в особенности, 8.7) использовались конфигурации уровня 6.

"Старые" файлы конфигурации определяются как уровень версии один. Фаулы уровня версии два делают следующие изменения:

  1. Канонификация имени хоста ($[ ... $]) добавляет точку, если имя распознано; это дает файлу конфигурации способ определить, совпало ли что-нибудь. (На самом деле, это просто инициализирует преобразование хоста с флагом "-a." - вы можете переустановить это на что угодно явным объявлением преобразования.)
  2. Расширение имени хоста по умолчанию постоянно при всех обработках; конфигурации версий уровня один в некоторых местах обработки выключали доменное расширение (то есть, добавляя имя локального домена). Конфигурации версий уровня два по идее включают последнюю точку для указания того, что это уже каноническое имя.
  3. Локальные имена, не являющиеся псевдонимами проходят через новое выделяющее правило пять; оно может быть использовано для добавления локального ретранслятора. Такое поведение может быть предотвращено посредством разрешения локального имени с начальным "@". То есть, допустим, то, что разрешается на локальную почтовую программу и имя пользователя "vikki" пройдет через набор правил пять, но имя пользователя "@vikki" потеряет "@", не пройдет через набор правил пять, или же будет обработано как в предыдущем примере. Здесь расчет на то, что это может быть использовано для реализации такого поведения, когда почта, посланная к "vikki" будет обработана центральным концентратором, а почта, посланная к "vikki@localhost" будет доставлена напрямую.

Файлы версии уровня три позволяют # начинать комментарии во всех строках. Исключения составляют экранированные обратным слешем знаки # и синтаксис $#.

Конфигурации версии уровня четыре, по историческим причинам, полностью эквивалентны уровню три.

Файлы конфигурации версии уровня четыре изменяют определение по умолчанию, что $w является просто первым компонентом имени хоста.

Файлы конфигурации версии уровня шесть переделывают многие опции локальной обработки (типа псевдонимизации и соответствия началу адреса для символов "|") во флаги почтовых программ; это обеспечивает детализированный контроль над специальными локальными обработками. Файлы конфигурации версии уровня шесть также могут включать длинные имена опций. Опция ColonOkInAddr (разрешающая двоеточия в местной части адресов) для конфигурационных файлов более низкого уровня по умолчанию on; Файл конфигурации требует некоторый дополнительный интеллект для правильной обработки структуры группы RFC 822.

Конфигурационные файлы седьмого уровня версии использовали новые имена опций для замены старых макросов ($e стало Smtp GreeetingMessage, $l стало UnixFromLine, и $o стало OperatorChars). Также, до седьмой версии, предполагался флаг F=q (использовать возвращаемое значение 250 вместо 252 для команды SMTP VRFY).

Строка V может опционально иметь /vendor для указания того, что это файл конфигурации использует специфические для частного поставщика изменения8. Вы можете использовать "/Berkeley" для подчеркивания, что этот файл конфигурации использует Berkeley разновидность sendmail.

5.9. K - Определение Файла Ключей

Специальные преобразования могут быть определены использованием строки:

Kmapname mapclass arguments

Где mapname - имя, под которым это преобразование используется в правилах перезаписи; mapclass - имя типа преобразования (эти имена вкомпилированы в sendmail); arguments интерпретируются в зависимости от класса; обычно, используется один аргумент, указывающий на файл, содержащий преобразование.

На преобразования ссылаются, используя синтаксис:

$( ключ преобразования $@ аргументы $: умолчание $)

где и аргументы и умолчание могут быть опущены. $@ аргументы могут встречаться много раз. Указанный ключ и аргументы передаются в соответствующую преобразующую функцию. Если она возвращает значение, то оно замещает ввод. Если она не возвращает значение и имеется определенное умолчание, the умолчание заменяет ввод. Иначе ввод не изменяется.

Аргументы передаются в преобразование для произвольного использования. Большинство классов преобразований могут интерполировать эти аргументы в их значения используя для указания соответствующего аргумента синтаксис "%n" (где n - цифра).

Аргумент "%0" обозначает ключ базы данных. Например, правило

R$- ! $+ $: $(uucp $1 $@ $2 $: %1 @ %0 . UUCP $)

Просматривает имя UUCP в (определенном пользователем) преобразовании UUCP; если не найдено, превращает его в форму ".UUCP". База данных должна содержать записи типа:

decvax %1@%0.DEC.COM
research %1@%0.ATT.COM

Отметьте, что операторы умолчания никогда не делают этого преобразования.

Встроенное преобразование с именем и классом "host" - это просмотр канонизации имени хоста. Таким образом, синтаксис:

$(host hostname$)

эквивалентен:

$[hostname$]

Существует множество определенных классов.

dbm Просмотр базы данных, используя библиотеку ndbm(3). Sendmail должен быть скомпилирован с определенной NDBM.
btree Просмотр базы данных с использованием интерфейса btree к библиотеке Berkeley db(3). Sendmail должен быть скомпилирован с определенной NEWDB.
hash Просмотр базы данных с использованием хэш-интерфейса к библиотеке Berkeley db(3). Sendmail должен быть скомпилирован с определенной NEWDB.
nis Просмотры NIS. Sendmail должен быть скомпилирован с определенной опцией NIS.
nisplus Просмотры NIS+. Sendmail должен быть скомпилирован с определенной опцией NISPLUS. Аргумент - имя таблицы, используемой для просмотров, а флаги -k и -v могут быть использованы для установки столбцов ключа и значения соответственно.
hesiod Просмотры Hesiod. Sendmail должен быть скомпилирован с определенной опцией HESIOD.
ldapx Просмотры каталогов LDAP X500. Sendmail должен быть скомпилирован с определенной опцией LDAPMAP. Преобразование поддерживает большинство стандартных аргументов и большинство аргументов командной строки программы ldapsearch.
netinfo Просмотры NeXT NetInfo. Sendmail должен быть скомпилирован с определенной опцией NETINFO.
text Просмотры текстовых файлов. Формат текстового файла определяется флагами -k (число ключевых полей), -v (число поля значений), и -z (разделитель полей).
stab Просмотры внутренней таблицы символов. Используется внутри для псевдонимизирования.
implicit По-настоящему должно бы называться "alias" - используется для просмотра файлов псевдонимов по умолчанию, и используется по умолчанию, если не определен класс для файлов псевдонимов.
user Просматривает пользователей, используя getpwnam(3). Для указания имени возвращаемого поля может быть использован флаг -v (хотя обычно используется только для проверки существования пользователя).
host Канонифицирует доменные имена хостов. Получив имя хоста, вызывает сервер имен для поиска канонического имени для этого хоста.
bestmx Возвращает лучшую запись MX для заданного в качестве ключа имени хоста. Всегда предпочитается текущая машина- то есть, текущая машина является одним из хостов, перечисленных в качестве записи MX с самым низким значением предпочтения, следовательно, имеется гарантия его возврата. Это может использоваться для определения, является ли эта машина целью записи MX, и почта может быть принята на этом основании. Если задан флаг -z, то возвращаются все имена MX, разделенные заданным разделителем.
sequence Аргументы в строке "K" - список преобразований; результирующее преобразование просматривает аргументы-преобразования, пока не найдет совпадение для указанного ключа. Например, если определение ключа:
Kmap1 ...
Kmap2 ...
Kseqmap sequence map1 map2
тогда просмотр "seqmap" сначала производится в map1. Если найдено, то происходит немедленный возврат. Иначе, тот же ключ используется для map2.
switch Прямо как преобразование "sequence", за исключением того, что порядок преобразований определяется сервисным переключателем. Аргумент - имя сервиса для просмотра; значения из сервисного переключателя добавляются к имени преобразования для создания новых имен преобразований. Например, рассмотрим определение ключа:
Kali switch aliases
вместе с вхождением сервисного переключателя:
aliases nis files

Это вызовет запрос по преобразованию "ali" для поиска преобразований с именами "ali.nis" и "ali.files" в этом порядке.

dequote Обрезает у имени двойные кавычки ("). Не обрезает обратные слеши, и не будет обрезать кавычки, если результирующая строка будет содержать не возможный для просмотра синтаксис (то есть, основные ошибки типа незакрытых угловых скобок; более сложные ошибки типа неизвестных хостов не проверяются). Предназначается для приема почты из систем типа DECnet, квотирующих странный синтаксис типа
"49ers::ubell"
Обычное использование - что-то типа:
Kdequote dequote
...
R$- $: $(dequote $1 $)
R$- $+ $: $>3 $1 $2
Для предотвращения неожиданных результатов необходима осторожность; например,
"|someprogram < input > output"
потеряет свои кавычки, но результат, скорее всего, будет отличаться от ожидаемого. К счастью, такие случаи достаточно редки.
Regex Определение преобразования в строке K содержит регулярное выражение. Любой ключевой ввод сравнивается с этим выражением, используя программы регулярных выражений стандарта POSIX regcomp(), regerr(), и regexec(). Если вам нужно узнать больше информации о сравнении регулярных выражений, смотрите документацию на эти программы. Если не определен флаг -m не производится никакой перезаписи ключа. Без него, если ключ отвергнут или использован -s, то он замещается подходящими подстроками,разделенными $| или строкой, определенной флагом -d. Флаги, имеющиеся в преобразовании:
  • n не
  • f чувствительность к регистру
  • b основные регулярные выражения (по умолчанию развернуто)
  • s совпадение подстроки
  • d устанавливает разделитель, используемый для -s
  • a добавить строку к ключу
  • m только проверка совпадения, не принимать/отказывать значение

Флаг -sflag выбыирает подстроки в результате просмотра. Например,

-s1,3,4
program Аргументы в строке K являются путями к программам и любые начальные параметры будут пропущены. При вызове преобразования, к начальным параметрам добавляется ключ, а программа запускается с от пользователя и группы по умолчанию. Первая строка стандартного вывода возвращается как значение просмотра. Это все имеет множество потенциальных проблем безопасности, и жутко тормозит, поэтому использоваться должно только тогда, когда действительно необходимо.

Большинство из них принимают в качестве аргументов одни и те же опциональные флаги и имя файла (или имя преобразования для NIS; имя файла является корнем пути к базе данных, так что ".db" или какое-либо другое расширение будет добавлено для получения настоящего имени базы данных). Известные флаги:

-o Указывает, что это преобразование опционально - то есть, если оно не может быть открыто, не выдается ни какой ошибки, а sendmail будет считать, что преобразование было, но было пустым.
-N, -O Если ни -N, ни -O не указаны, sendmail использует адаптивный алгоритм для определения смотреть или нет нулевые байты в конце ключей. Сначала пробуются оба; если находится ключ с нулевым байтом, он никогда снова не будет опробован без нулевого байта и наоборот. Если указан -N, то никогда не пробуется без нулевого байта, а если указан -O, то никогда не пробуется с нулевым байтом. Указание одного из них может увеличить скоромть совпадений, но никогда не является необходимым. Если указаны оба -N и -O, sendmail никогда не будет пробовать никакие совпадения - то есть, все будет считаться неудачным.
-ax Добавить строку x к успешным совпадениям. Например, преобразование по умолчанию host добавляет точку при успешном совпадении.
-Tx Добавить строку x при временной неудаче.
-f Не преобразовывать из верхнего в нижний регистр до просмотра ключа.
-m Только прверка совпадения (без замены значения). Если вы беспокоитесь о существовании ключа, а не о значении (например, при поиске преобразования NIS "hosts.byname"), этот флаг удержит преобразование от замены значения. Однако, аргумент -a все еще добавляется при совпадении, и умолчание все еще берется при несовпадении.
-kkeycol Имя ключевого столбца (для NIS+) или номер (для текстовых просмотров). Для преобразований LDAP это фильтрует строку, проходящую на printf с %s, где вставляется строка для "преобразования".
-vvalcol Имя столбца значения (для NIS+) или номер (для текстовых просмотров). Для преобразований LDAP это имя возвращаемого атрибута.
-zdelim Разделитель столбцов (для текстовых просмотров). Может быть одним знаком или одной из специальных строк "\n" или "\t" для указания новой строки или табуляции соответственно. Если полностью опущен, разделителем столбцов считается любая последовательность пробелов.
-t Обычно, когда преобразование пытается просмотреть имя хоста и сервер ошибочен (то есть, sendmail не может найти ни одного сервера имен; это не то же самое, что вхождение не было найдено в преобразовании), обработанное сообщение ставится в очередь для дальнейшей обработки. Флаг -t отключает такое поведение, позволяя считать, что если происходит временная ошибка (сервер отключен), то это была постоянная ошибка (вхождение не найдено). В частности, это полезно для просмотров DNS, когда чей-то еще неправильно сконфигурированный сервер имен может вызвать проблемы на вашей машине. Однако здесь необходима осторожность, чтобы не откинуть почту, которая могла бы быть разрешена корректно, если бы вы попытались снова. Общая стратегия - перенаправлять такую почту на другой, возможно, имеющий лучшее соединение, почтовый сервер.
-sspacesub Только для преобразования dequote, символ, используемый для замены символов пробела после успешного деквотирования.
-q Не удалять кавычки перед просмотром.
-A При перестройке файла псевдонимов, флаг -A заставляет соединяться дублированные вхождения в текстовой версии. Например, два вхождения:
list: user1, user2
list: user3

при присутствии флага -A будет считаться за одно вхождение

list: user1, user2, user3

Преобразование dbm добавляет строки ".pag" и ".dir" к заданному имени файла; преобразования hash и btree добавляют ".db". Например, описание преобразования

Kuucp dbm -o -N /usr/lib/uucpmap

Описывает опциональное преобразование класса "dbm" по имени "uucp"; оно всегда имеет нулевые байты в конце каждой строки, и данные находящиеся в /usr/lib/uucpmap.{dir,pag}.

Для постороения преобразований, ориентированных на три базы данных, может быть использована программа makemap(8). Она принимает следующие флаги:

-f Не переделывать верхний регистр в нижний при преобразовании.
-N Включать нулевые байты в ключах.
-o Добавить к существующему (старому) файлу.
-r Позволить замещение существующих ключей; обычно, при ошибке, заново вставляет существующий ключ.
-v Печатать происходящее.

Демон sendmail не должен перестартовываться для чтения новых преобразований до тех пор, пока вы не замените их на месте; используется блокировка файлов, так что преобразования не будут считаны, пока они не обновлены9.

Новые классы могут быть добавлены в подпрограмму setupmaps в файле conf.c.

5.10. Пользовательская База Данных

Если вы имеете версию sendmail с вкомпилированой поддержкой пользовательской базы данных, обработка адресов отправителя и получателя изменена.

Местонахождение это базы данных контролируется опцией UserDatabaseSpec.

5.10.1. Структура Пользовательской Базы Данных

База данных является сортированной (основанной на BTree) структурой. Пользовательские записи сохраняются с ключом:

user-name:field-name

Сортированный формат базы данных гарантирует, что пользовательские записи сгруппированы вместе. Мета-информация всегда сохраняется в ведущем столбце.

Имена полей определяют и синтаксис, и семантику значения. Определенные поля включают:

maildrop Адрес доставки для этого пользователя. Эта запись может иметь несколько значений. В частности, списки рассылки будут иметь одну запись maildrop на каждого пользователя в списке.
mailname Выходящее почтовое имя для этого пользователя. Для каждого выходящего имени должна быть соответствующая запись maildrop для этого имени, чтобы разрешить обратную почту. См. также
:default:mailname.
mailsender Каждое сообщение, посланное на этот адрес, будет иметь указанного конвертного отправителя. Предназначено для списков рассылки, и обычно будет именем соответствующего адреса -request. Очень похоже на owner-list синтаксис в файле псевдонимов.
fullname Полное имя пользователя.
office-address Офисный адрес пользователя.
office-phone Офисный телефон пользователя.
office-fax Офисный факс пользователя.
home-address Домашний адрес пользователя.
home-phone Домашний телефон пользователя.
home-fax Домашний факс пользователя.
project (Краткое) описание проекта, которым занимается указанное лицо. В Университете это часто просто имя научного руководителя.
plan Указатель на файл, откуда может быть взята информация о плане.

Ко времени написания этого документа, только несколько из этих полей на самом деле использовались в sendmail: maildrop и mailname. Запланирована программа finger, использующая остальные поля.

5.10.2. Семантика Пользовательской Базы Данных

Когда правила перезаписи передают адрес в локальную почтовую программу, имя пользователя пропускается через файл псевдонимов. Если не найдено ни одного псевдонима (или псевдоним указывает обратно на этот адрес), имя (с добавленным ":maildrop") используется как ключ в пользовательской базе данных. Если не найдено ни одного совпадения (или если maildrop указывает на тот же адрес), пробуется пересылка.

Если первая лексема имени пользователя возвращаемая набором правил - знак "@", просмотр пользовательской базы данных пропускается. Смысл этого в том, чтобы пользовательская база данных представляла собой набор умолчаний для группы (в нашем случае, Computer Science Division); почта, посылаемая на определенную машину должна игнорировать эти умолчания.

При отправке почты, имя отправителя просматривается в базе данных. Если этот пользователь имеет запись "mailname", значение этой записи используется как его выходящее имя. Например, я могу иметь запись:

eric:mailname Eric.Allman@CS.Berkeley.EDU

Это приведет к тому, что посланная мной почта будет исходить от Eric.Allman.

Если для пользователя найдена запись "maildrop", но не существует ни одной соответствующей записи "mailname", производится проверка записи ":default:mailname". Если она существует, то это имя считается именем хоста, подставляемого вместо локального хоста. Например, в нашем случае, мы можем установить его в "CS.Berkeley.EDU". в результате, все, кто известен в базе данных будет отправлять почту со штампом "user@CS.Berkeley.EDU", а те, кто в ней не перечислен будут использовать локальное имя хоста.

5.10.3. Создание Базы Данных10

Пользовательская база данных строится из текстового файла, используя утилиту makemap (в поставке в подкаталоге). Текстовый файл представляет собой последовательность строк, соответствующих записям userdb; каждая строка имеет ключ и значение, разделенные пробелом. Ключ всегда имеет формат, описанный выше - например:

eric:maildrop

Этот файл обычно устанавливается в системном каталоге; например, он может называться /etc/userdb. Для того, чтобы сделать из преобразования базу данных, запустите программу:

makemap btree /etc/userdb.db < /etc/userdb

Затем создайте файл конфигурации использующий это. Например, используя V8 M4 конфигурацию, включите в ваш файл .mc строку:

define(`confUSERDB_SPEC', /etc/userdb.db)

  1. На самом деле, это полностью эквивалентно $(host hostname$). В частности, может быть использовано умолчание $:. [назад]
  2. Вы можете захотеть использовать это для специальных "пользовательских" расширений. Например, в адресе "jgm+foo@CMU.EDU"; часть "+foo" - это не часть имени пользователя, и передается в локальную почтовую программу для местного использования. [назад]
  3. С версии 8.6, все эти макросы имеют разумные умолчания. Предыдущие версии требовали, чтобы они были определены. [назад]
  4. Например, в некоторых системах gethostname может возвратить "foo", которое будет преобразовано в "foo.bar.com" посредством gethostbyname. [назад]
  5. Старые версии sendmail не предопределяли $j вообще, так что, вплоть до 8.6, файлы конфигурации должны были определять $j. [назад]
  6. Старая опция g была комбинирована в опцию DefaultUser. [назад]
  7. При запуске в качестве демона, переходит к этому пользователюпосле принятия соединения, но до прочтения любой команды SMTP. [назад]
  8. И конечно, поставщики поощряются при включении самих себя в список распознаваемых поставщиков изменением подпрограммы setvendor в conf.c. Для регистрации вашей разновидности пошлите письмо sendmail@Sendmail.ORG. [назад]
  9. То есть, не создавайте новые преобразования и не кладите их командой mv(1) на место. Так как преобразования уже открыты, новые преобразования никогда не будут увидены. [назад]
  10. Известно, что эти инструкции не полны. Планируется, что будущая версия пользовательской базы данных будет включать вещи типа сервиса finger - и хорошую документацию. [назад]

Назад | Содержание | Вперед