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

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

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

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

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

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

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

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

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

5.1.1. Левосторонняя часть (LHS) Левосторонняя часть правил перезаписи содержит шаблон. Обычные слова просто напрямую сравниваются. Метасинтаксис вводится использованием знака доллара. Метасимволы это:
 
$*
Совпадение нуля или более лексем 
$+
Совпадение одного или более лексем 
$-
Совпадение ровно одной лексемы
$=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; она принимает сообщение, как будто все прошло успешно, но затем выбрасывает его без доставки. Нужно отметить, что эта почтовая программа не может быть выбрана в наборе правил 0. 5.1.4.1. check_relay Набор правил check relay вызывается после того, как демон принял соединение. Он не вызывается при запуске sendmail с опцией -bs. Он проверяет 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.4.5. check_eoh Набор правил check_eoh проверяет number-of-headers $| size-of-headers где $| - метасимвол, разделяющий числа. Эти числа могут быть использованы для сравнения размеров арифметического преобразования. Набор правил запускается после прочтения всех заголовков. Его можно использовать для сопоставления информации, полученной из этих заголовков посредством преобразования макросом хранения (storage macro). Одно из возможных применений - проверка отсутствия заголовка. Например:                 Kstorage macro                 HMessage-Id: $>CheckMessageId                 SCheckMessageId                 # Record the presence of the header                 R$*            $: $(storage {MessageIdCheck} $@ OK $) $1                 R< $+ @ $+ >   $@ OK                 R$*            $#error $: 553 Header Error                 Scheck_eoh                 # Check the macro                 R$*            $: < $&{MessageIdCheck} >                 # Clear the macro for the next message                 R$*            $: $(storage {MessageIdCheck} $) $1                 # Has a Message-Id: header                 R< $+ >        $@ OK                 # Allow missing Message-Id: from local mail                 R$*            $: < $&{client_name} >                 R< >           $@ OK                 R< $=w >       $@ OK                 # Otherwise, reject the mail                 R$*            $#error $: 553 Header Error Помните, что Message-Id: необязательный заголовок и не гарантирует индикацию нежелательной рассылки (спама). Этот набор правил и его не  обязательно использрвать. 5.1.4.6. check_etrn Набор правил check_etrn проверяет параметр команды SMTP ETRN. Он может принять или отказать в приёме команды. 5.1.4.7. check_expn Набор правил check_expn проверяет параметр имя пользователя команды SMTP EXPN. Он может принять или отказать в приёме адреса. 5.1.4.8. check_vrfy Набор правил check_vrfy проверяет параметр имя пользователя команды SMTP VRFY. Он может принять или отказать в приёме команды. 5.1.4.9. trust_auth Набор правил check_expn проверяет параметр AUTH= команды SMTP MAIL. Используется для определения степени доверия этому параметру. Для вынесения решения, набор правил может использовать различные макросы ${auth_*}. Если результатом будет почтовая программа "error", то параметру AUTH= не доверяют и, следовательно, не передают на следующий ретранслятор (relay). 5.1.4.10. tls_client Набор правил tls_client вызывается, когда sendmail выступает в качестве сервера, после выполнения команды STARTTLS, и из chesk_mail. Параметром является значение ${verify} и STARTTLS или MAIL, соответственно. Если результатом работы набора правил будет почтовая программа "error", клиенту будет возвращён соответствующий код ошибки. 5.1.4.11. tls_server Набор правил tls_server вызывается, когда sendmail выступает в качестве клиента, после выполнения команды STARTTLS. Параметром является значение ${verify}. Если результатом работы набора правил будет почтовая программа "error", соединение обрывается (считается недоставляемым с постоянной или временной ошибкой). 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
Домашний каталог получателя.
$_
Подтвержденный адрес отправителя.
${auth_authen} Идентификационные удостоверения клиента, как определено идентификацией (выставляются при успешности)
${auth_author} Подлинность авторизации, то есть, параметр AUTH= команды SMTP MAIL (если есть).
${auth_type} Механизм, использующийся для идентификации (выставляется при успешности).
${auth_ssf} Длина ключа (в битах) симметричного алгоритма шифрования, используемого на уровне безопасности механизма SASL.
${bodytype} Тип тела сообщения (7BIT или 8BITMIME), определенный из конверта.
${cert_issuer} DN (отличительное имя) CA (серифицирующего авторитета) подписавшего данный сертификат (выпустившего сертификат).
${cert_subject} DN представленного сертификата (называемое объектом сертификации).
${cipher} Алгоритм шифрования, используемый для соединения, например, EDH-DSS-DES-CBC3-SHA,  EDH-RSA-DES-CBC-SHA, DES-CBC-MD5, DES-CBC3-SHA.
${cipher_bits} Длина ключа (в битах) симметричного алгоритма шифрования, используемый для TLS соединения.
${client_addr} IP адрес клиента SMTP. Определяется только в сервере SMTP.
${client_name} Имя хоста клиента SMTP. Может быть заключённым в квадратные скобки IP-адресом в виде [ nnn.nnn.nnn.nnn ], если клиентский IP-адрес не разрешается, или, если разрешается, но IP-адрес разрешенного имени хоста не соответствует оригинальному IP-адресу. Определяется только в сервере SMTP.
${client_port} Номер порта клиента SMTP. Определяется только в сервере SMTP.
${client_resolve} Содержит результат, разрешенный для ${client_name} : OK, FAIL, FORGED, TEMP. Определяется только в сервере SMTP.
${currHeader} Значение заголовка в виде строки в кавычках (возможно, обрезанная до MAXNAME).
${daemon_addr} IP-адрес  демона, слушающего соединения. До тех пор, пока не назначен, он будет "0.0.0.0".
${daemon_family} Семейство сетевых протоколов, если демон принимает сетевые соединения. Возможные значения включают "inet", "inet6", "iso", "ns", "x.25".
${daemon_flags} Флаги для демона, как определено частью Modifier= из DaemonPortOptions, где флаги разделены пробелами, а флаги в верхнем регистре удваиваются. То есть, Modifier=Ea будет представлен в виде "EE a" в ${daemon_flags}, что требуется для тестирования флагов в наборах правил.
${daemon_info} Некоторая информация о демоне в виде текстовой строки. Например, "SMTP+queueing@00:30:00".
${daemon_name} Имя демона из DaemonPortOptions, подопции Name=. Если эта подопция не выставлена, то используется "Daemon#", где # - номер демона.
${daemon_port} Порт, на котором демон принимает соединения. Пока не установлен DaemonPortOptions, скорее всего будет "25".
${delivery_mode} Текущий режим доставки, используемый sendmail'ом. в начале выставляется в значение опции DeliveryMode.
${envid} Идентификационный номер конверта, переданный в sendmail как часть конверта.
${hdrlen} Длина значения заголовка, сохранённого в ${currHeader} (до возможного обрезания). Если это значение больше или равно MAXNAME, то заголовок был обрезан.
${hdr_name} Имя поля заголовка для которого вызван текущий набор правил проверки заголовка. Это полезно для набора правил проверки заголовка по умолчанию для получения имени заголовка.
${if_addr} IP-адрес интерфейса входящего соединения, если он не в закольцованной? (loopback) сети. (IMHO, если не 127.0.0.1 - Прим. переводчика).
${if_family} Семейство IP на интерфейсе входящего соединения, если он не в закольцованной? (loopback) сети.
${if_name} Имя интерфейса входящего соединения. Этот макрос может быть использования для SmtpGreetingMessage и HReceived для виртуального хостинга. Например:
O SmtpGreetingMessage=$?{if_name}${if_name}$|$j$. MTA
${mail_addr} Адресная часть определённой триады из адеса данного для команды SMTP MAIL. Определяется только в SMTP-сервере.
${mail_host} Хост из  определённой триады из адеса данного для команды SMTP MAIL. Определяется только в SMTP-сервере.
${mail_mailer} Почтовая программа из  определённой триады из адеса данного для команды SMTP MAIL. Определяется только в SMTP-сервере.
${msg_size} Значение параметра SIZE=, то есть, обычно, размер сообщения (в диалоге ESMTP), до того как сообщение было собрано, соответственно размер сообщения как подсчитано sendmail'ом (и может быть использованов check_compat).
${ntries} Количество попыток доставки.
${opMode} Текущий режим работы (из флага -b).
${queue_interval} Интервал прохода очереди заданный флагом -q. Например, -q30m выставит ${queue_interval} в "00:30:00".
${rcpt_addr} Адресная часть определённой триады из адеса данного для команды SMTP RCPT. Определяется только в SMTP-сервере.
${rcpt_host} Хост из  определённой триады из адеса данного для команды SMTP RCPT. Определяется только в SMTP-сервере.
${rcpt_mailer} Почтовая программа из  определённой триады из адеса данного для команды SMTP RCPT. Определяется только в SMTP-сервере.
${server_addr} Адрес сервера текущего исходящего SMTP соединения.
${server_name} Имя сервера текущего исходящего SMTP соединения.
${tls_version} Версия TLS/SSL используемая для соединения, например TLSv1, SSLv3, SSLv2.
${verify} Результат проверки представленного сертификата. Возможные значения:
 
OK Успешная проверка
NO Сертификат не был представлен
FAIL Сертификат представлен, но не может быть проверен, например, отсутствует подписавший CA.
NONE STARTTLS не был выполнен.
TEMP Произошла временная ошибка
PROTOCOL Произошла какая-то ошибка протокола
SOFTWARE STARTTLS обмен был неуспешен, что является фатальной ошибкой для эьой сессии, e-mail будет поставлен в очередь.

Существует три типа дат, которые могут быть использованы. Макросы $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
F|program
Первая форма определяет класс c соответствующим любому из названных слов. Если phrase1 или phrase2 - это другой класс, например $=S, содержимое класса S добавляется к классу c. Можно разбивать на несколько строк; на пример, две формы: CHmonet ucbmonet и CHmonet
CHucbmonet
эквивалентны. Форма "F" читает элементы класса c из названного файла или программы. Каждый элемент дролжен быть перечислен в отдельном файле. Для указания опционального файла, используйте "-o" между именем класса и именем файла, например:. Fc -o /path/to/file Если файл не может быть использован, sendmail не будет жаловаться, а просто проигнорирует это.

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

Некоторые классы имеют для 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
Выставлен в набор всех имен, о которых знает хост. Может быть использован для совпадений с локальными именами хостов.
$={persistentMacros} Выставляется в макрос, который должен будет сохраняться во время проходов очереди. При добавлении имен макросов в этот класс нужно быть осторожным.

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 Максимальный размер сообщения для этой почтовой программы
maxmessages Максимальное количество доставок сообщений на соединение.
Linelimit Максимальная длина линии в теле сообщения
Directory Рабочий каталог для почтовой программы
Userid Идентификаторы пользователя и группы для запуска
Nice Инкремент nice(2) для почтовой программы
Charset Набор символов по умолчанию для 8-битных символов
Type Информация о типе MTS (используется для сообщений об ошибках)
Wait Максимальное время ожидания почтовой программы.
/ Корневой каталог почтовой программы.

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

Нижеописанные флаги могут быть установлены в описании почтовой программы. Любые другие флаги могут свободно использоваться для условных заголовков в сообщениях для определенных почтовых программ. Флаги, отмеченные |,не интерпретируются бинарником 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
Эта почтовая программа слишком медленна, поэтому лучше избежать этого соединения; любое необходимое соединение произойдет во время обработки очереди. Также см. HoldExpensive.
E
Избегать строки, начинающиеся с "From" в сообщении с знаком ">".
f
Почтовая программа хочет флаг -f from, но только если это операция пересылки в сети (то есть, почтовая программа выдаст ошибку, если выполняющий пользователь не имеет специальных прав).
F|
Эта почтовая программа хочет строку заголовка "From:".
g
Обычно, sendmail посылает внутренне созданную почту (например, сообщения об ошибках) используя нулевой обратный адрес, как это требуется RFC 1123. Однако, некоторые почтовые программы не принимают нулевой обратный адрес. Если это необходимо, вы можете установить флаг g, чтобы sendmail не следовал стандартам; сообщения об ошибках будут посланы от MAILER-DAEMON (на самом деле, значение макроса $n).
h
Символы верхнего регистра в именах хостов ( части $@ триады для почтовой программы, полученной из набора правил 0) для этой почтовой программы должны быть сохранены.
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 для другого возможного разрешения. Это предназначено для перенаправления почты в другое альтернативное место доставки.
6
Обрезать заголовки до 7-ми бит.
7
Обрезать весь вывод до семи бит. Стоит по умолчанию, если установлен флаг L. Заметьте, что очистка этой опции не достаточна, чтобы через sendmail полностью проходили восьмибитные данные. Если опция 7 выставлена, а она в основном всегда выставлена, то восьмибитные данные на входе будут обрезаться. Нужно отметить, что эта опция затрагивает только сообщения, к которым не применялось MIME преобразование 8->7 бит.
8
Если выставлена, то эта почтовая программа принимает для отсылки восьмибитные данные; обычная попытка MIME преобразования 8->7 бит будет пропущена.
9
Если выставлена, производить ограниченные MIME преобразования 7->8 бит. Эти преобразования ограничены данными типа text/plain.
:
Проверить адреса, не начинаются ли они с ":include:"; если это так, преобразовать их к почтовой программе "*include*".
|
Проверить адреса, не начинаются ли они с "|"; если это так, преобразовать их к почтовой программе "prog".
/
Проверить адреса, не начинаются ли они с "/"; если это так, преобразовать их к почтовой программе "*file*".
@
Просмотреть адреса в пользовательской базе данных.
%
Не пытаться производить первичную доставку или во время прохода очереди получателю сообщения, пока сообщение в очереди не будет выбрано использованием одного из модификаторов прохода очереди -qI/-qR/-qS или запроса ETRN.

Конфигурационные файлы до уровня 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" заставляет выкидывать любую почту, посланную к ней, но в то же время считать, что она была успешно доставлена. Эта почтовая программа не может быть использована в наборе правил 0, а только в различных наборах правил, проверяющих адрес.

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

Mprog, P=/bin/sh, F=lsoDq9, T=DNS/RFC822/X-Unix, A=sh -c $u
M*file*, P=[FILE], F=lsDFMPEouq9, T=DNS/RFC822/X-Unix, A=FILE $u
M*include*, P=/dev/null, F=su, A=INCLUDE $u
Наборы перезаписи 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".

Поле m= устанавливает максимальное количество сообщений в попытке доставки в одном соединении SMTP или LMTP.

Поле /= определяет новый корневой каталог для почтовой программы. Путь расширяется макросом и затем передаётся в системный вызов "chroot". Корневой каталог изменяется до принятия во внимание поля Directory или смены идентификатора пользователя.

Поле Wait= определяет максимальное время ожидания ответа почтовой программы после отсылки в неё всех данных. Это применяется к почтовым программам, которые были ответвлены sendmail'ом.

5.5. H - Определение Заголовка Формат строк заголовка, вставляемых sendmail в сообщение, определяется строкой H. Синтаксис этой строки: Hhname: htemplate
H[?mflags?]hname: htemplate
H[?${macro}?]hname: htemplate
Строки-продолжения в этом определении отражаются прямо в выходящее сообщение. Htemplate расширяется макросом до подстановки в сообщение. Если определена mflags (окруженная знаками вопроса), как минимум один из указанных флагов должен иметь место в определении почтовой программы для этого заголовка для автоматического вывода. Если определен ${macro} (окруженный знаками вопроса), заголовок будет автоматически выведен, если установлен макрос. Если один из этих заголовков имеется на входе, он отражается на выход не зависимо от этих флагов или макросов.

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

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

HHeader: $>Ruleset
HHeader: $>+Ruleset

Указанный набор правил (Ruleset) вызывается для указанного заголовка Header, и может возвращать $#error для отказа от сообщения, или $#discard для сброса сообщения (как и в остальных наборах правил check_*). Набор правил получает заголовок тело-поля как аргумент, то есть не заголовок имя-поле; см. также ${hdr_name} и ${currHeader}. Заголовок рассматривается как структурированное поле, то есть, комментарии (в кавычках) перед обработкой удаляются, если не используется вторая форма $>+. Только один набор правил может быть ассоциирован с заголовком; sendmail будет тихо игнорировать несколько вхождений.

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

HMessage-Id: $>CheckMessageId

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

Приведут к отказу от любого сообщения, имеющего заголовок в любой из следующих форм: Message-Id: <>
Message-Id: любой текст
Message-Id: <легальный текст@домен> дополнения
Набор правил по умолчанию, вызываемый для заголовков, не имеющих специально определенного для них набора правил может быть определён так: H*: $>Ruleset или H*: $>+Ruleset 5.6. O - Опция Назначения Существует большое количество глобальных опций, которые могут быть назначены из файла конфигурации. Опции представляются целыми словами; некоторые, для обратной совместимости, можно также представлять в виде отдельных букв. Синтаксис таков: Oопция=значение Это назначает опции опция указанное значение. Заметьте, что между буквой "O" и именем опции должен быть пробел. Раньше это было так: Ooзначение где опция o - один символ. В зависимости от опции, значение может быть строкой, целым числом, булевым (с допустимыми значениями "t", "T", "f", или "F"; по умолчанию TRUE), или интервалом времени.

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

AliasFile=spec, spec, ...

[A] Определяет возможный файл(ы) псевдонимов. Каждый spec должен быть в виде "class: info" где class: опционально и по умолчанию равно "implicit". В зависимости от того, как скомпилирован sendmail, возможные классы - это "implicit" (искать в вкомпилированном списке типов файлов псевдонимов, для обратной совместимости), "hash" (если определено NEWDB), "btree" (если определено NEWDB), "dbm" (если определено NDBM), "stab" (внутренняя таблица символов - обычно не используется, кроме случаев, если у вас нет других средств просмотра баз данных), "sequence" (использует последовательность предварительно объявленных преобразований), "ldap" (если определено LDAPMAP), или "nis" (если определено NIS). Если указан список spec'ов, sendmail просматривает их по порядку. AliasWait=timeout [a] Если установлено, при запуске ждать до timeout (мо умолчанию в минутах) появления вхождения "@:@" в базе данных псевдонимов. Если оно не появляется в течение этого интервала, перестроить базу данных (если выставлена опция AutoRebuildAliases) или сделать предупреждение. AllowBogusHELO [нет короткого имени] Если выставлена, позволяется команда HELO SMTP не включающая имени хоста. Выставка этой опции нарушает секцию 5.2.5 RFC 1123, но необходима для работы с некоторыми клиентами SMTP. Если значение имеется, оно все равно проверяется на легитимность. AuthMechanisms [нет короткого имени] Список механизмов удостоверения подлинности для AUTH (разделённый пробелами). Объявленный список механизмов будет логическим умножением этого списка и списка доступных механизмов определённых библиотекой Cyrus SASL. AuthOptions [нет короткого имени] Когда использовать параметр AUTH= для команды MAIL FROM;

        A  Только если проверка подлинности успешна.

По умолчанию пытаться всякий раз, когда доступна SMTP AUTH.

AutoRebuildAliases [D] Если выставлена, при необходимости и возможности перестраивать базу данных псевдонимов. Если эта опция не выставлена, sendmail никогда не будет перестраивать базу данных псевдонимов, пока это не будет явно запрошено использованием -bi. Заметьте: Эта опция открывает потенциальную возможность атаки типа "отказ от обслуживания" (DoS). В будущих версиях эта опция будет убрана. BlankSub=c [B] Устанавливает символ замены пробелов c. Неквотированные пробелы в адресах заменяются этим символом. По умолчанию пробел (т.е. замена не производится). CACERTPath [нет короткого имени] Путь к каталогу с сертификатами для CA. CACERTFile [нет короткого имени] Файл, содержащий сертификат одного CA. CheckAliases [n] Проверять RHS псевдонимов при перестройке базы данных псевдонимов. CheckpointInterval=N [C] Контрольные точки очереди каждые N (по умолчанию 10) посланных адресов. Если ваша система падает во время получения большого списка, это предотвратит повторную передачу на все адреса, кроме последних. ClassFactor=fact [z] Указанный коэффициент (factor) умножается на класс сообщения (определенный полем Precedence: в пользовательском заголовке и строками P в файле конфигурации) и вычитается из приоритета. Таким образом, сообщения с более высоким Priority: будут предпочитаться. По умолчанию 1800. ClientCertFile [нет короткого имени] Файл, содержащий сертификат клиента, то есть, этот сертификат будет использован когда sendmail будет выступать в качестве клиента. ClientPortOptions [O] Устанавливает опции SMTP клиента. Опции представляют собой пары ключ=значение, разделенные запятыми. Известные ключи:
 
Port Имя/Номер исходящего порта соединения (по умолчанию - любой свободный порт)
Addr Маска адреса (по умолчанию - INADDR_ANY)
Family Семейство адресов (по умолчанию - INET)
SndBufSize Размер буфера TCP на отсылку
RcvBufSize Размер буфера TCP на приём
Modifier Опции (флаги) для демона
Маска адреса может быть числовым адресом или доменным именем. Модификатором может быть следующая буква:

h        использовать для команды HELO имя интерфейса.

Если используется модификатор "h", то в команде HELO/EHLO используется имя соответствующего выходного интерфейса (или выбранного через параметр Connection или по-умолчанию).

ClientKeyFile [нет короткого имени] Файл, содержащий частный члюч, принадлежащий сертификату клиента. 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 минут. ConnectOnlyTo=address [нет короткого имени] Может использоваться для настройки адреса соединения (в целях тестирования). ConnectionRateThrottle=N [нет короткого имени] Если установлено положительное значение, позволить более чем N входящих демонов соединений на протяжении одной секунды. Это предназначено для сглаживания пиков и уменьшения средней загрузки. По умолчанию ноль (никаких ограничений). ControlSocketName=name [нет короткого имени] Имя управляющего сокета для управления демоном. Работающий демон sendmail может управляться через именованный сокет. Доступные команды: help, restart, shutdown и status. Команда status возвращает текущее количество порожденных демоном "детей", их максимальное количество, свободное дисковое пространство (в блоках) в каталоге очереди и среднюю загрузку машины, представленную в виде целого числа. Если эта оция не установлена, то управляющий сокет не будет доступен. Пользователи Solaris и ядер до 4.4BSD должны прочитать заметки в sendmail/README. DHParameters Файл с параметрами DH для STARTTLS. Требуется только если используется DSA/DH. DaemonPortOptions=options [O] Устанавливает опции сервера SMTP. Каждое вхождение DaemonPortOptions приводит к дополнительному входящему сокету. Опции - пары ключ=значение. Известные ключи:
Name Имя демона, определяемое пользователем (по умолчанию - "Daemon#")
Port Имя/номер рабочего порта (по умолчанию "smtp")
Addr Адресная маска (по умолчанию INADDR_ANY)
Family Семейство адресов (по умолчанию INET)
Listen Размер очереди прослушивания (по умолчанию 10)
Modifier Опции (флаги) для демона
SndBufSize Размер буфера TCP на отправку
RcvBufSize Размер буфера TCP на прием
Поле Name используется для сообщений об ошибках и протоколирования. Адресная маска может быть числовым адресом в записи с точками или сетевым именем. Ключ Family по умолчанию INET (IPv4). Пользователи IPv6, которые хотят принимать соединения IPv6 должны добавить дополнительную чтрочку в DaemonPortOptions Family=inet6. Модификатор может быть последовательностью (без разделителей) из следующих букв:
 
a всегда требовать идентификацию
b привязываться к интерфейсу, через который была получена почта
c производить канонификацию имени хоста (.cf)
f требовать полностью квалифицированное имя хоста (.cf)
u разрешить неквалифицированные адреса (.cf) 
C не производить канонификацию имени хоста
E запретить ETRN (смотри RFC 2476)
То есть, определение агента почтовой передачи (mail submission agent, MSA), всегда требующего идентификацию будет выглядеть так:

O DaemonPortOptions=Name=MSA, Port=587, M=Ea

Модификаторы, отмеченные ".cf" имеют эффект только в стандартном файле конфигурации, в котором они доступны через ${daemon_flags}. Флаги "c" и "C" могут изменить умолчание для канонификации имени хоста в файле sendmail.cf. Смотри соответствующую документацию для FEATURE(nocanonify). Модификатор "f" запрещает адреса в виде user@host если они не представлены напрямую. Флаг "u" разрешает неквалифицированный адрес отправителя. Флаг "b" заставляет sendmail для исходящих соединений привязываться к интерфейсу, через который была получена почта. Внимание: Используйте "b", только если выходящая почта может быть смаршрутизирована через интерфейс исходящего соединения к её месту назначения. Принеправильной конфигурации этого параметра не будет никаких попыток исправить проблему. Его нужно использовать только для виртуального хостинга, где каждый виртуальный интерфейс может соединиться с любым возможным адресом. Он перебъёт любые возможные установки через ClientPortOptions. Заметьте, sendmail будет слушать на новом сокете при каждом встреченном в конфигурационном файле DaemonPortOptions.
DefaultAuthInfo [нет короткого имени] Имя файла, содержащего идентификационную информацию по умолчани. для исходящих соединений. Этот файл должен содержать ID пользователя, ID авторизации, пароль (в чистом тексте) и область использования в отдельных строках и должен быть открыт на чтение только пользователю root (или доверенному пользователю). Если область не определена, используется $j. DefaultCharSet=charset [нет короткого имени] Когда сообщение, имеющее 8-битные символы, но не в формате MIME, конвертируется в MIME (см. опцию EightBitMode) в заголовок Content-Type: должен быть включен набор символов. Этот набор символов обычно назначается из поля Charset= дескриптора почтовой программы. Если оно не установлено, используется значение этой опции. Если эта опция не установлена, используется значение "unknown-8bit". DataFileBufferSize [нет короткого имени] устанавливает порог, в байтах, при котором файл данных очереди из памяти переходит на диск. По умолчанию 4096 байт. DeadLetterDrop=file [нет короткого имени] Определяет положение общесистемного файла dead.letter, ранее жёстко находящегося в /usr/tmp/dead.letter. Если эта опция не установлена (по умолчанию), sendmail не будет пытаться сохранять общесистемный файл dead.letter в случае, если он не может откинуть почту пользователю или постмастеру. Вместо этого, он переименует qf-файл как это и было раньше, когда файл dead.letter не мог быть открыт. 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
DontWarnForwardFileInUnsafeDirPath
ErrorHeaderInUnsafeDirPath
FileDeliveryToHardLink
FileDeliveryToSymLink
ForwardFileInUnsafeDirPath
ForwardFileInUnsafeDirPathSafe
ForwardFileIngroupWritableDirPath
GroupWritableAliasFile
GroupWritableDirPathSafe
GroupWritableForwardFileSafe
GroupWritableIncludeFileSafe
HelpFileinUnsafeDirPath
IncludeFileInUnsafeDirPath
IncludeFileInUnsafeDirPathSafe
IncludeFileIngroupWritableDirPath
LinkedAliasFileInWritableDir
LinkedClassFileInWritableDir
LinkedForwardFileInWritableDir
LinkedIncludeFileInWritableDir
LinkedMapInWritableDir
LinkedServiceSwitchFileInWritableDir
MapInUnsafeDirPath
NonRootSafeAddr
RunProgramInUnsafeDirPath
RunWritableProgram
TrustStickyBit
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-битные для передачи в не-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 с очень низким приоритетом. Предназначена для узлов с плохим сетевым соединением. Сообщения, которые невозможно доставить из-за временных ошибках адреса (например, ошибках DNS) дакже уйдут на FallbackMX хост. 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. Если никакого имения файла не определено, используется "helpfile". HoldExpensive [c] Если выходная почтовая программа отмечена как слишком дорогостоящая, не соединяться с ней немедленно. Это требует, чтобы организация очереди была вкомпилирована, потому что настоящая посылка почты будет зависеть от процесса обработки очереди HostsFile=path [нет короткого имени] Путь к базе данных хостов, обычно "/etc/hosts". Эта опция нужна только когда sendmail канонифицирует адреса, а затем только когда во вхождении сервисного переключателя "files" имеется "hosts". В частности, этот файл никогда не используется при разрешении адреса хоста; это контролируется системной подпрограммой gethostbyname(3). HostStatusDirectory=path [нет короткого имени] Местонахождение долгосрочной информации статуса хостов. Когда установлена, информация о статусах хостов (например, хост отключен или не принимает соединения) будет общей для всех процессов sendmail; обычно, эта информация сохраняется в течение одного прохода очереди. Эта опция требует для работы кэш соединений, по крайней мере, равный 1. Если опция начинается с ведущего "/", то это абсолютный путь; иначе, он относителен почтовому каталогу очереди. Вероятное значение для узлов, желающих иметь постоянный статус хостов - ".hoststat" (т.е., подкаталог каталога очереди). IgnoreDots [i] Игнорировать точки в входящих сообщениях. Всегда отключена (то есть, точки всегда принимаются) при чтении почты SMTP. LDAPDefaultSpec=spec [нет короткого имени] Устанавливает сецификацию преобразования по умолчанию для LDAP. Значение должно содержать только специфичные для LDAP установки типа "-h host -p port -d bindDN". Значения будут использованы для всех преобразований LDAP, если они не будут перекрыты отдельной спецификацией. Эта опция должна быть определена до любого определения преобразования LDAP. LogLevel=n [L] Установить по умолчанию уровень протоколирования n. По умолчанию 9. Mxзначение [нет короткого имени] Установить значение макроса x. Предназначена только для использования в командной строке. Предпочитается флаг -M. MatchGECOS [G] Разрешить нечеткие совпадения в поле GECOS. Если этот флаг выставлен, и обычный просмотр имени пользователя проваливается (т.е., нет псевдонима с таким именем, и проваливается getpwnam), последовательно искать в файле паролей подходящее вхождение в поле GECOS. Здесь также требуется, чтобы во время компиляции было включено MATCHGECOS. Эта опция не рекомендуется. MaxAliasRecursion [нет короткого имени] Максимальная глубина рекурсии псевдонимов (по умолчанию 10). MaxDaemonChildren=N [нет короткого имени] Если выставлена, sendmail будет отказываться от соединений, если он имеет больше чем N порожденных процессов, обрабатывающих входящую почту. Это не ограничивает количество исходящих соединений. Если не установлена, никаких ограничений нет - то есть, это будет контролироваться средней загрузкой системы. MaxHeaderLength=N [нет короткого имени] Максимальная суммарная длина всех заголовков. Может использоваться для предотвращения атак типа "отказ от обслуживания". По умолчанию ограничения нет. MaxHopCount=N [h] Максимум счетчика пересылок. Сообщения, обработанные более чем N раз, считаются ходящими по кольцу и не принимаются. По умолчанию 25. MaxMessageSize=N [нет короткого имени] указывает максимальный размер сообщения, сообщаемый в ответе ESMTP EHLO. Сообщения больше указанного размера не принимаются. MaxMimeHeaderLength=N[/M] [нет короткого имени] Устанавливает максимальную длину значений конкретных полей заголовка MIME в N символов. Для некоторых таких заголовков с заимствованными параметрами, максимальная длина каждого параметра равна M, если она определена. Если /M не определена, будет использована половина значения N. по умолчанию эти значения равны 0, что означает отсутствие проверки. 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 соответствуют ".:@[]"; в добавок, символы "()<>,;" всегда являются операторами. OperatorCars должны быть установлены в кофигурационном файле до любых наборов правил. PidFile=filename [нет короткого имени] Имя файла, содержащего идентификатор процесса (pid). (по умолчанию _PATH_SENDMAILPID). Имя файла расширяется макросом до его открытия. 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 и предупреждения о различных условиях могут указать на попытки обмануть почтовую систему, типа использования нестандартного каталога очереди. ProcessTitlePrefix=строка [нет короткого имени] Предварить название процесса в списке "ps" строкой. Строка будет обработана макросом. QueueDirectory=dir [Q] Использовать указанный каталог в качестве каталога очереди. Чтобы использовать несколько очередей, добавьте к значению звёздочку. Например, /var/spool/mqueue/q* будет использовать все каталоги или символические ссылки на каталоги, начинающиеся с q в /var/spool/mqueue как каталоги очереди. Не изменяйте структуру каталогов очередей во время работы sendmail. QueueFactor=коэффициент [q] Использовать коэффициент как множитель функции преобразования для определения, когда просто положить работу в очередь вместо ее запуска. Это значение определяется разностью между текущей средней загрузкой и ограничением средней загрузки (опция QueueLA) для определения максимального приоритета сообщений, которые будут посланы. По умолчанию 600000. QueueLA=LA [x] Когда средная загрузка системы превышает LA, просто откладывать сообщения в очередь (т.е. не пытаться их послать). По умолчанию 8 умноженное на количество рабочих процессоров в системе (если это количество может быть определено). QueueSortOrder=алгоритм [нет короткого имени] Использовать алгоритм для сортировки очереди. Использется только первый символ значения. Легальные значения: "host" (упорядочивать по имени первого хоста первого получателя), "filename" (упорядочивать по имени файла очереди), "time" (упорядочивать по времени отправки), и "priority" (упорядочивать по приоритету). Упорядочивание по хосту улучшает использование кэша соединений, но может привести к обработке сообщений с низким приоритетом, идущим на один хост вместо высокоприоритетных сообщений идущих на несколько хостов; скорее всего не должно использоваться при низкоскоростной сетевой связи. Упорядочивание по имени файла сокращает издержки на чтение всех элементов очереди перед запуском прохода очереди. Упорядочивание по времени всегда не лучший выход, поскольку это позволит отправлять большие, огромные сообщения раньше небольших, персональных сообщений, но может быть приемлемо на некоторых хостах с очень быстрыми сетевыми соединениями. По умолчанию производится упорядочивание по приоритету. QueueTimeout=timeout [T] Синоним для "Timeout.queuereturn". Используйте ту форму вместо формы "QueueTimeout". RandFile [нет короткого имени] Имя файла, содежащего случайные данные или имя сокета UNIX при использовании EGD. (Требуемый) префикс "egd:" или "file:" указывает на тип. Если не выставлен флаг компиляции HASURANDOMDEV, то STARTTLS требует это имя файла (см. sendmail/README). ResolverOptions=options [I] Устанавливает опции разрешителя. Значения могут быть установлены использованием +flag и очищены использованием -flag; флаги могут быть: "debug", "aaonly", "usevc", "primary", "igntc", "recurse", "defnames", "stayopen", или "dnsrch". Может быть определена строка "HasWildcardMX" (без + или -) для выключения сопоставления записей MX при канонификациях имен. Заметь! До версии 8.7, эта опция указывала, что сервер имен должен отвечать при приеме адресов. Это было заменено проверкой пречисления метода "dns" во вхождении сервиса "hosts" в сервисного переключателя. RrtImpliesDsn [R] Если эта опция выставлена, то заголовок "Return-Receipt-To:" вызывает запрос DSN, который согласно RFC1891посылается конвертному отправителю, а не по адресу, данному в заголовке. RunAsUser=user [нет короткого имени] Параметр user может быть именем пользователя (просматривается в /etc/passwd) или числовым идентификатором пользователя; также форма может иметь добавку ":group" (где группа может быть задана числом или символически). Если установлено не нулевое значение (т.е. не root), sendmail перейдет к этому идентификатору пользователя вскоре после запуска7. Это позволяет избежать определенного класса проблем безопасности. Однако, это означает, что все файлы ".forward" и ":include:" должны быть доступны на чтение для указанного пользователя, и все файлы для записи должны быть открыты на запись для этого пользователя. Также все программные доставки будут отмечены небезопасными, пока не будет выставлена опция DontBlameSendmail=NonRootSafeAddr, в этом случае доставка будет выполнена от пользователя. Это также несовместимо с опцией 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 (см. RFC2045 и RFC1344). Если отключена, sendmail не будет возвращать в ответ на EHLO ключевое слово DSN и не будет делать обработку Delivery Status Notification, как описано в RFC1891. ServerCertFile [нет короткого имени] Файл, содержащий сертификат сервера, то есть этот сертификат будет использован, когда sendmail будет выступать в качестве сервера. 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] Выставляет значения таймаутов. Смотри раздел 4.1. TimeZoneSpec=tzinfo [t] Устанавливает информацию о местной временной зоне в tzinfo - например, "PST8PDT". На самом деле, если эта опция не выставлена, переменная окружения TZ очищается (поэтому используется системное умолчание); если установлена, но нулевая, используется пользовательская переменная TZ, если установлена и ненулевая, то переменная TZ выставляется в это значение. TrustedUser=user [нет короткого имени] Параметр user может быть именем пользователя (ищется в /etc/passwd) или числовым идентификатором пользователя (uid). Доверенный пользователь для владения файлами и запуска демона. Если значение установлено, сгенерированная база данных псевдонимов и контрольный сокет (если сконфигурирован) автоматически будут принадлежать этому пользователю. 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] Определение пользовательской базы данных. Verbose [v] Работать в "болтливом" режиме. Если эта опция установлена, sendmail устанавливает опции HoldExpensive (ранее c) и DeliveryMode (ранее d) так, что вся почта, доставляется полностью за одну работу так, что вы можете видеть полный процесс доставки. Опция Verbose никогда не должна выставляться в файле конфигурации; предназначена только для использования в командной строке. XscriptFileBufferSize=threshold [нет короткого имени] Устанавливает порог, в байтах, когда файл расшифровки? (transcript) из памяти переходит на диск. По умолчанию 4096 байт. Все опции могут быть указаны в командной строке, используя флаг -O или -o, но большинство может заставить sendmail освободиться от своих suid'ных полномочий. Опции, которые этого не причиняют: SevenBitInput [7], EightBitMode [8], MinFreeBlocks [b], CheckpointInterval [C], DeliveryMode [d], ErrorMode [e], IgnoreDots [i], SendMimeErrors [j], LogLevel [L], MeToo [m], OldStyleHeaders [o], PrivacyOptions [p], SuperSafe [s], Verbose [v], QueueSortOrder, MinQueueAge, DefaultCharSet, DialDelay, NoRecipientAction, ColonOkInAddr, MaxQueueRunSize, SingleLineFromHeader и AllowBogusHELO. На самом деле, PrivacyOptions [p], заданная из командной строки добавляется к уже указанным в файле sendmail.cf, то есть они не могут быть переназначены. Также, 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 - Уровень Версии Конфигурации Для обеспечения совместимости со старыми файлами конфигурации, была добавлена строка 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.
ldap Просмотры каталогов LDAP X500. Sendmail должен быть скомпилирован с определенной опцией LDAPMAP. Преобразование поддерживает большинство стандартных аргументов и большинство аргументов командной строки программы ldapsearch. Заметьте, что по умолчанию, если один запрос соответствует многим значениям, будет возвращено олько первое значение, если не установлен флаг преобразования -z (разделитель значений). Также, флаг преобразования -1 при множестве совпадений даст результат, как будто не было ни одного совпадения.
netinfo Просмотры NeXT NetInfo. Sendmail должен быть скомпилирован с определенной опцией NETINFO.
nsd Преобразование nsd для IRIX 6.5 и старше. Представлено и поддерживается Bob Mende из SGI, mende@sgi.com
text Просмотры текстовых файлов. Формат текстового файла определяется флагами -k (число ключевых полей), -v (число поля значений), и -z (разделитель полей).
ph Преобразование запросов PH. Представлено и поддерживается Mark Roth, roth@uiuc.edu. Дополнительная информация на страничке "http://www-dev.cso.uiuc.edu/sendmail/".
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.

syslog Ключ протоколируется через syslogd(8). Просмотр возвращает пустую строку.
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 только проверка совпадения, не принимать/отказывать значение
-D не производить просмотр в режиме отложенной доставки

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

-s1,3,4

Заметьте, для совпадения $ в строке, нужно использовать \$$. Если шаблон содержит пробелы, они должны быть заменены пустым подстановочным символом, если это не сам пробел.

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

Kstorage macro

...

# set macro ${MyMacro} to the ruleset match
R$+                $: $(storage {MyMacro} $@ $1 $) $1
# set macro ${MyMacro} to the empty string
R$*                $: $(storage {MyMacro} $@  $) $1
# clear macro ${MyMacro}
R$-                $: $(storage {MyMacro}  $) $1

arith Выполняет простые арифметические операции. Операции задаются ключём, в настоящее время поддерживаются +, -, *, /, l (для меньше чем), и =. Два операнда задаются как аргументы. просмотр возвращает результат подсчёта, то есть TRUE или FALSE для сравнений, во всех остальных случаях целые числа. Все возможные опции для преобразований игнорируются. Простой пример:

Kcomp arith

...

Schech_etrn
R$*                $: $(comp l $@ $&{load_avg} $@ 7 $) $1
RFALSE         $# error ...

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

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

list: user1, user2
list: user3

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

list: user1, user2, user3

Следующие добавочные флаги присутствуют только в преобразованиях LDAP:
 

-R Не следовать автоматически по ссылкам(?). Чтобы использовать этот флаг, sendmail должен быть скомпиллирован с -DLDAP_REFERRALS.
-n Только получить имена атрибутов.
-rderef Установить опцию разименования(? - dereference) псевдонимов в never, always, search или find
-sscope Назначить границы поиска - base, one (один уровень), или sub (поддерево).
-hхост Имя сервера LDAP. Некоторые библиотеки LDAP для надёжности позволяют использовать множество имён хостов, разделенных пробелами. В добавок, каждый из перечисленных хостов может заканчиваться двоеточием и номером порта вместо порта LDAP по умолчанию.
-bбаза База поиска LDAP
-pпорт Порт сервиса LDAP
-lвремя Ограничение времени на запросы LDAP.
-Zразмер Ограничение размера (количества совпадений) для запросов LDAP
-dDN уникальное имя, используемое для входа на сервер LDAP
-Mметод метод аутентификации в сервере LDAP. Должен быть одним из LDAP_AUTH_NONE, LDAP_AUTH_SIMPLE, или LDAP_AUTH_KRBV4
-Ppasswordfile Файл, содержащий секретный ключ для метода аутентификации LDAP_AUTH_SIMPLE или имени файла с билетом Kerberos для LDAP_AUTH_KRBV4.
-1 Поиск в LDAP будет успешным, если будет единственное совпадение.

Преобразование 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 указывает на тот же адрес), пробуется пересылка.

Если первая лексема имени пользователя возвращаемая набором правил 0 - знак "@", просмотр пользовательской базы данных пропускается. Смысл этого в том, чтобы пользовательская база данных представляла собой набор умолчаний для группы (в нашем случае, 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/mail/userdb.db < /etc/mail/userdb Затем создайте файл конфигурации использующий это. Например, используя V8 M4 конфигурацию, включите в ваш файл .mc строку: define(`confUSERDB_SPEC', /etc/mail/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 - и хорошую документацию. [назад]



╘2001 Александр С. Плотников