Sendmail Installation and Operation Guide

Подробности Файлов Инсталляции

Этот раздел описывает файлы, необходимые для установки sendmail.

/Etc/aliases

Системные псевдонимы содержатся в "/etc/aliases". Пример этого файла имеется в "lib/aliases", в нем имеются некоторые псевдонимы, которые должны быть определены: cp lib/aliases /etc/aliases edit /etc/aliases
Вы должны добавить в этот файл любые псевдонимы, необходимые в вашей системе.
Обычно sendmail смотрит на версии этих файлов в виде баз данных, хранящихся и в "/etc/aliases.dir" и в "/etc/aliases.pag" или "/etc/aliases.db", в зависимости от используемой вами пакета баз данных. Путь к этому файлу определяется опцией AliasFile в файле sendmail.cf.

/Etc/rc или /etc/init.d/sendmail

При перезагрузке системы необходимо запускать демон sendmail . Этот демон обеспечивает две функции: он слушает сокет SMTP на случай соединений (чтобы получать почту с удаленных систем), а также периодически обрабатывает очередь, чтобы, как только удаленные хосты станут доступны, доставить на них почту.
Добавьте в ваш "/etc/rc" (или "/etc/rc.local" в зависимости от системы) в то место, где он запускает демоны (для систем на основе BSD) , или в один из файлов запуска, обычно это "/etc/init.d/sendmail" ( в системах на основе System-V), следующие строчки: if [ -f /usr/sbin/sendmail -a -f /etc/sendmail.cf ]; then (cd /var/spool/mqueue; rm -f [lnx]f*) /usr/sbin/sendmail -bd -q30m & echo -n ' sendmail' /dev/console fi
Команды "cd" и "rm" здесь даются для того, чтобы гарантировать, что все файлы-замки (lock files) были уничтожены; посторонние файлы-замки могут остаться, если система вдруг "упадет" посреди обработки сообщения. Строка, которая на самом деле запускает sendmail , имеет два флага: "-bd" заставляет его слушать на порту SMTP, а "-q30m" заставляет его производить обработку очереди каждые полчаса.
Некоторые используют более сложный сценарий запуска, удаляющий файлы qf нулевой длины, и файлы df, для которых нет ни одного файла qf. Пример сложного сценария запуска представлен на рис.1. # remove zero length qf files for qffile in qf* do if [ -r $qffile ] then if [ ! -s $qffile ] then echo -n " Комплексный сценарий запуска
Если ваша версия UNIX не поддерживает Berkeley TCP/IP, не включайте флаг -bd.

/Etc/sendmail.cf

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

/Etc/sendmail.st

Если вы хотите собирать статистику о количестве прошедшей почты, вы должны создать файл "/etc/sendmail.st": cp /dev/null /etc/sendmail.st chmod 666 /etc/sendmail.st
Этот файл не увеличивается. Он распечатывается программой "mailstats/mailstats.c." Настоящий путь к этому файлу определяется опцией S в файле sendmail.cf.

Файлы Конфигурации

sendmail не может работать без файла конфигурации. Конфигурация определяет механизмы доставки почты, понимаемые этим узлом, как перенаправлять почту на удаленные почтовые системы, и многие другие настроечные параметры. Этот файл конфигурации подробнее описан в дальнейших частях этого документа.
Поначалу конфигурация sendmail может напугать и запутать вас. Мир сложен, и почтовая конфигурация - всего лишь его отражение. Комплект поставки включает конфигурационный пакет, основанный на m4, скрывающий большинство из сложностей.
Файлы конфигурации, по сравнению с предыдущими версиями, стали проще, во многом из-за того, что и мир стал проще; в частности, текстовые файлы хостов официально устранены, и теперь нет необходимости "прятать" хосты за зарегистрированным шлюзом в Internet.
Эти файлы также учитывают, что большинство ваших соседей используют UUCP адресацию на основе доменов; что означает, что вместо именования хостов как "host!user" они будут использовать "host.domain!user". Файлы конфигурации могут быть переделаны так, чтобы работать помимо этого, но это намного сложнее.
Наши файлы конфигурации обрабатываются m4 для облегчения внесения локальных изменений; каталог cf в поставке sendmail содержит исходные файлы. Этот каталог содержит несколько подкаталогов:
cf И зависящие, и не зависящие от узла описания хостов. Это могут быть литерные имена хостов (например, "ucbvax.mc"), если хосты являются шлюзами, или более общие описания (типа "generic-solaris2.mc" - как общее описание хостов, соединенных по SMTP под управлением ОС Solaris 2.x. ). Файлы, имена которых заканчиваются на .mc ("Master Configuration") являются входными описаниями; выходные находятся в соответствующих файлах .cf . Общая структура этих файлов описывается ниже.
domain Зависящие от узла описания поддоменов. Это все связано с тем, как ваша организация хочет осуществлять адресацию. Например, domain/ CS.Berkeley.EDU.m4 - это наше описание для хостов в поддомене CS.Berkeley.EDU. На них ссылаются, используя m4 макрос DOMAIN в файле .mc.
feature Определения специфических особенностей, которые могут быть нужны какому-либо определенному хосту в вашем узле. На них ссылаются, используя m4 макрос FEATURE. Например - use_cw_file (говорит sendmail считать при запуске файл /etc/sendmail.cw, чтобы найти список локальных имен).
hack Локальные особенности. На него ссылаются, используя m4 макрос HACK. Лучше всего не использовать
m4 Независимые от узла m4 (1) файлы, содержащие общую для всех конфигурационных файлов информацию. Этот каталог можно рассматривать как каталог "#include".
mailer Определения почтовых программ, на которые ссылаются используя m4 макрос MAILER. Типы почтовых программ, известных в этой поставке: fax, local, smtp, uucp, и usenet. Например, чтобы включить поддержку почтовых программ основанных на UUCP, используйте "MAILER(uucp)".
ostype Определения, описывающие среды различных операционных систем (например, местонахождения поддерживаемых файлов). На них ссылаются используя m4 макрос OSTYPE.
sh Файлы оболочки, используемые процессом постройки m4 . С этим у вас не должно быть проблем.
siteconfig Локальная информация о связях UUCP. Этот каталог был замещен mailertable ; все новые конфигурации должны использовать mailertable для осуществления маршрутизации UUCP (и всего остального).

Если вы в новом домене (т.е., компании), вам, возможно, захочется создать файл cf/domain для вашего домена. В основном он состоит из описаний ретрансляторов (relay definitions) и особенностей, которые бы использовались на всех узлах: например, описание домена Berkeley определяет ретрансляторы для BitNET и UUCP. Они очень специфичны для Berkeley и должны быть доменными именами internet. Пожалуйста, проверьте их приемлемость для вашего домена.
Поддомены в Berkeley также представлены в каталоге cf/domain. Например, домен CS.Berkeley.EDU - поддомен Computer Science, EECS.Berkeley.EDU- поддомен Electrical Engineering and Computer Sciences , а S2K.Berkeley.EDU - это поддомен Sequoia 2000. Возможно, вам захочется добавить соответствующие вашему домену файлы.
Вам нужно будет использовать или создать файлы .mc для ваших хостов в подкаталоге cf/cf . Это детально описано в файле cf/README.

Компиляция Sendmail

Все исходные файлы для sendmail находятся в подкаталоге src. Для компиляции sendmail перейдите в каталог src и запустите ./Build
Это оставит бинарные файлы в соответствующе названном каталоге, например obj.BSD-OS.2.1.i386.

Компилляция и установка

После описанного выше системного конфигурирования, вы должны скомпилировать и установить систему. Во многих системах лучший для этого способ - сценарий "Build ": ./Build
Он использует uname (1) для выбора подходящего для вашей системы Makefile.
Если вы устанавливаете все на стандартные места, то произвести установку можно с помощью ./Build install
Это должно установить бинарный файл в /usr/sbin и создать связи /usr/bin/newaliases и /usr/bin/mailq с /usr/sbin/sendmail. В системах 4.4BSD это также сформатирует и установит инструкции (man pages).

Основная установка

Есть два основных шага при установке sendmail. Во-первых, вы должны скомпилировать и установить бинарные файлы. Это будет достаточно просто, если sendmail уже перенесен в вашу операционную систему. Во-вторых, вы должны - построить рабочий файл конфигурации. Это файл читается sendmail при запуске, и в нем описываются все известные ему почтовые программы, как ему анализировать адреса, как переписывать заголовок сообщения, а также настройки различных опций. Хотя файл конфигурации достаточно сложен, обычно конфигурацию можно построить используя основанный на M4 язык конфигурации.
Остаток этого раздела описывает установку sendmail в том случае, если вы используете одну из существующих конфигураций, и можете использовать стандартные параметры установки. Все пути к файлам и примеры заданы от корня поддерева sendmail, для 4.4BSD обычно /usr/src/usr.sbin/sendmail.
Если вы загружаете его с ленты, продолжайте со следующего раздела. Если в вашей системе уже имеется работающий бинарный файл, то вы вполне можете сразу переходить к разделу 1.2.

Подгонка Build

Команде Build можно задавать параметры. Во многих случаях они используются только после создания каталога obj.* . Эти команды включают:
-L libdirs Список каталогов для поиска библиотек
-I incdirs Список каталогов для поиска включаемых файлов
-E envar= значение Назначить перед компиляцией переменной окружения указанное значение. Обычно используется для выставки ABI в Irix.
-c Перед запуском создать новое дерево obj.*
-f siteconfig Считать указанный файл конфигурации узла. Если этот параметр не указан, Build включает все файлы из $BUILD-TOOLS/Site/site.$oscf.m4 и $BUILD-TOOLS/Site/site.config.m4 , где $BUILDTOOLS обычно ../BuildTools , а $oscf - то же имя, что используется в каталоге obj.* . Ниже имеется описание файла конфигурации узла.
-S Пропустить автоконфигурацию. Build не будет автоматически находить библиотеки. Все библиотеки и определения преобразований должны быть указаны в файле конфигурации узла.

Все остальные параметры передаются в программу make.

Подгонка Makefile

XXX Все это должно быть в разделе Файл Конфигурации Узла.
sendmail поддерживает два различных формата для локальных (находящихся на диске) версий баз данных, в особенности базы данных aliases . По крайней мере, одна из них должна быть определена, если это вообще возможно.
NDBM Формат "new DBM", доступный в настоящее время почти во всех системах. До 4.4BSD это был предпочтительный формат. Он позволяет такие сложные вещи, как множество баз данных и закрытие открытой на этот момент базы данных.
NEWDB Новый пакет базы данных от Berkeley. Если он у вас есть, то используйте его. Он позволяет длинные записи, множество открытых баз данных, кэширование в памяти и многое другое. Вы можете определить его вместе с NDBM; если вы так сделаете, то старые базы данных будут считываться, но когда будет создаваться новая база данных, то она будет уже в формате NEWDB. В случае, если у вас определены NEWDB, NDBM, и NIS, и имя файла aliases будет содержать подстроку "/yp/", при выполнении команды newalias, sendmail создаст и новую и старую версии файла алиасов. Это требуется из-за того, что система Sun NIS/YP считывает версию DBM файла алиасов. Это ужасно, но работает.

Если ни одна из них не определена, sendmail при каждом запуске будет считывает файл алиасов в память. Этого нужно избегать, так как это может быть достаточно медленно. Существует также несколько методов доступа к удаленным базам данных:
NISSun's Network Information Services (бывший YP).
NISPLUSSun's NIS+ services.
NETINFONeXT's NetInfo service.
HESIODHesiod service (from Athena).

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

Создание Файла Конфигурации Узла

Эта секция еще не готова. Пока что лучше всего смотреть файл BuildTools/README.

/Usr/bin/hoststat

Команда hoststat также должна быть всего лишь ссылкой на sendmail , таким же образом, что и newaliases . Эта команда выдает статус последней почтовой транзакции со всеми удаленными хостами. Флаг -v не даст обрезать показываемый статус. Он работает только если выставлена опция HostStatusDirectory.

/Usr/bin/mailq

Если sendmail запущен как "mailq," то это будет равнозначно запуску sendmail с флагом -bp (т.е., sendmail распечатает содержание почтовой очереди, см далее). Он должен быть ссылкой на /usr/sbin/sendmail.
  • В 4.4BSD и более новых системах это обычно /usr/sbin; многие системы устанвливают его в /usr/lib. И насколько я понимаю это /usr/ucblib в System V Release 4. [назад]

  • Некоторые поставщики поставляют его так, что его владельцем является bin; это может создать дыру в безопасности, которая не связана напрямую с sendmail. Другие каталоги, которые должны иметь ограничения по владельцу и пермиссиям - это /bin, /usr/bin, /etc, /usr/etc, /lib, и /usr/lib. [назад]

  • На самом деле, пути могут различаться, от системы к системе; /etc - наиболее предпочтительный каталог. Некоторые старые системы устанавливают его в /usr/lib/sendmail.cf, и я также видел его в /usr/ucblib и /etc/mail. Если вы хотите поместить его в другое место, добавьте к передаваемым в компилятор флагам флаг D_PATH_SENDMAIL.CF=\"/file/name\". Перемещать этот файл не рекомендуется: другие программы и сценарии знают об этом местонахождении. [назад]

  • Системные библиотеки могут взаимодействовать с другими файлами; в частности, системные библиотечные подпрограммы, вызываемые sendmail, возможно могут обращаться к /etc/passwd и /etc/resolv.conf. [назад]

  • |


    /Usr/bin/newaliases

    Команда newaliases должна быть всего лишь ссылкой на sendmail: rm -f /usr/bin/newaliases ln -s /usr/sbin/sendmail /usr/bin/newaliases
    Он должен быть создан там, где его найдет системный путь поиска.

    /Usr/bin/purgestat

    Эта команда также является ссылкой на sendmail . Она обнуляет всю информацию, сохраненную в дереве HostStatusDirectory.

    /Usr/lib/sendmail.hf

    Это файл помощи, используемый командой SMTP HELP . Он должен быть скопирован из "lib/sendmail.hf": cp lib/sendmail.hf /usr/lib
    Настоящий путь к этому файлу определяется опцией HelpFile в файле sendmail.cf.

    /Usr/sbin/sendmail

    Бинарный файл sendmail находится в /usr/sbin . Он может иметь бит смены владельца на пользователя root. В целях безопасности, владельцем каталогов /, /usr, и /usr/sbin должен быть root, а их пермиссии должны быть 755

    /Var/spool/mqueue/.hoststat

    Это обычное значение опции HostStatusDirectory , содержащей один файл на хост, с которым этот sendmail недавно разговаривал. Обычно это подкаталог mqueue.

    /Var/spool/mqueue

    Для хранения почтовой очереди должен быть создан каталог /var/spool/mqueue . Этот каталог должен иметь пермиссии 700 и принадлежать пользователю root.
    Настоящий путь к этому каталогу определяется оцией Q в файле sendmail.cf.

    Системный Протокол

    Apparently-To:

    RFC 822 требует в каждом сообщении иметь по крайней мере одно поле получателя (строку To:, Cc:, или Bcc:). Если сообщение приходит без указания какого-либо получателя в сообщении, sendmail добавит заголовок на основе опции "NoRecipientAction". Одним из возможных действий будет добавка в заголовок строки "Apparently-To:" для каждого получателя, о котором он знает.
    Заголовок Apparently-To: не стандартен и удален.

    База Данных Пользовательской Информации

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

    База Данных Псевдонимов

    После получения адресов получателей из соединения SMTP или командной строки, они обрабатываются согласно набору правил 0, которые должны определить тройку {mailer, host, user}. Если флаги выбранные mailer'ом включают флаг A (aliasable), часть тройки user рассматривается как ключ (т.е., левосторонняя) в базе данных псевдонимов (aliases). Если имеется совпадение, адрес удаляется из очереди на отсылку, а все адреса с правой стороны псевдонима добавляются вместо найденного псевдонима. Эта операция является рекурсивной, поэтому псевдонимы, найденные в правосторонней части псевдонима обрабатываются таким же образом.
    База данных псевдонимов существует в двух видах. Один - текстовая форма, содержащаяся в файле /etc/aliases. Псевдонимы имеют следующий вид name: name1, name2, ...
    Только локальные имена могут быть псевдонимизированы; например, eric@prep.ai.MIT.EDU: eric@CS.Berkeley.EDU
    не возымеет ожидаемого эффекта (если это не на prep.ai.MIT.EDU, но я им точно не нужен).Псевдонимы могут быть продолжены началом любых строк-продолжений с пробелом или табуляцией. Пустые строки и строки, начинающиеся со знака диез ("#") считаются комментариями.
    Вторая форма обрабатывается библиотекой ndbm(3). Эта форма находится в файлах /etc/aliases.db (если используется NEWDB) или /etc/aliases.dir и /etc/aliases.pag (если используется NDBM). Эта именно та форма, которую использует sendmail при определении псевдонимов. Эта технология используется для увеличения производительности.
    Управление порядком поиска выставляется непосредственно сервисным переключателем. По существу, вхождение OAswitch:aliases
    всегда добавляется как первое вхождение псевдонимов; также, первое имя файла псевдонимов без класса (например, без "nis:" вначале) будет использовано как имя файла для вхождения "files" в переключателе псевдонимов. Например, если конфигурация содержит OA/etc/aliases,
    а сервисный переключатель содержит aliases nis files nisplus
    то псевдонимы будут сначала искаться в базе данных NIS, затем в /etc/aliases, а затем в базе данных NIS+.
    Вы также можете использовать файлы псевдонимов на основе NIS. Например, определение: OAliasFile=/etc/aliases OAliasFile=nis:mail.aliases@my.nis.domain
    будет сначала искать файл /etc/aliases, а затем карту с именем "mail.aliases" в "my.nis.domain". Внимание: если вы строите свой собственный файл псевдонимов на основе NIS, обязательно поставьте флаг -l для makedbm(8) для преобразования заглавных букв в ключах в строчные; иначе псевдонимы с заглавными буквами в именах не будут совпадать с входящими адресами.
    Дополнительные флаги могут быть добавлены после двоеточия, точно как строка K; например: OAliasFile=nis:-N mail.aliases@my.nis.domain
    будет искать соответствующую карту NIS и всегда иметь ноль байт в ключе. Также OAliasFile=nis:-f mail.aliases@my.nis.domain
    удержит sendmail от преобразования ключа в символы нижнего регистра перед просмотром псевдонимов.

    Дисковая Информация о Соединении

    О каждой удаленной системе, с которой было соединение, sendmail сохраняет в памяти большое количество информации. Теперь стало возможным сохранять некоторую часть этой информации на диске, используя опцию HostStatusDirectory , которая может одновременно использоваться несколькими процессами sendmail. Это позволяет немедленно ставить почту в очередь, или пропустить ее при обработке очереди, если недавно было неудачное соединение с удаленной машиной.
    Дополнительно, включение опции SingleThreadDelivery даст дополнительный эффект доставки почты к месту назначения одной цепочкой. Это может очень помочь, если на удаленной машине работает сервер SMTP, который легко перегружается, или может работать только с одним соединением за раз. Она применяется ко всем хостам, поэтому установите ее, если на вашем узле для доставки почты используется одна машина, на которой работает дополнительное программное обеспечение, увеличивающее загрузку машины, что может привести к замедлению доставки почты на другие хосты. Установите эту опцию, если вы имеете на вашем узле одну почтовую машину, и на ней еще работают приложения, которые могут увеличить ее загрузку, замедлив обработку почты. Если эта опция выставлена, то вам, возможно, захочется выставить опцию MinQueueAge, чтобы ваша очередь обрабатывалась достаточно часто; в результате работы, пропущенные по причине того, что другой процесс sendmail разговаривал с тем же хостом, вскоре были опробованы снова, а не отложены на долгое время.
    Информация о хостах сохраняется на диске в подкаталоге .hoststat каталога mqueue. Удаление этого каталога с его подкаталогами равносильно команде purgestat и вполне безопасно. Информация из этих каталогов может быть просмотрена командой hoststat, которая покажет имя хоста, последний доступ и статус этого доступа. Звездочка в самой левой колонке означает, что процесс sendmail в настоящее время имеет блокировку на доставку почты на этот хост.
    В целях оптимизации таймаутов, информация, сохраняемая на диске, обслуживается таким же образом, что и информация, хранимая в памяти. По умолчанию, информация об ошибках хостов действительна в течение 30 минут. Это значение может быть изменено опцией Timeout.hoststatus.
    Информация о соединении, сохраненная на диске, может быть очищена в любой момент командой purgestat, или запуском sendmail с ключом -bH. Информацию о соединении можно просмотреть командой hoststat, или запуском sendmail с ключом -bh.

    Errors-To:

    Если во время обработки происходит ошибка, этот заголовок заставит отослать сообщение об ошибке по указанному адресу. Это предназначено для списков рассылки.
    Заголовок Errors-To: был создан в плохие старые времена, когда UUCP не понимал различий между содержимым и заголовком; Это было встроено для того, чтобы указать, что должно быть теперь пропущено как адрес отправителя сообщения. Это должно уйти, но пока еще используется, если выставлена опция UseErrorsTo.
    Заголовок Errors-To: официально уже убран, и в последующих выпусках должен отсутствовать.

    Формат

    Каждая строка в системном протоколе состоит из временной отметки, имени машины, создавшей ее (для протоколирования с нескольких машин через локальную сеть), слова "sendmail:", и самого сообщения . Большинство сообщений являются последовательностью пар имя=значение.
    После обработки сообщения обычно протоколируются две строки. Первая отмечает получение сообщения; на каждое сообщение будет ровно одна такая строка. Некоторые поля могут быть пропущены, если они не содержат интересной информации. Поля такие:
    from Конвертный адрес отправителя size Размер сообщения в байтах class Класс (т.е. числовой приоритет) сообщения pri Начальный приоритет сообщения (используется для сортировки очереди) nrcpts Количество почтовых получателей для этого сообщения (после обработки псевдонимов и перенаправлений) msgid Идентификационный номер сообщения (из заголовка) proto Протокол, использовавшийся при получении этого сообщения (например, ESMTP или UUCP) relay Машина, от которой было получено сообщение
    На каждую попытку доставки сообщения записываетя еще одна строка (так что каждое сообщение таких строк может быть несколько, например, если оно отложено, или если имеется несколько получателей). Поля в этой строке таковы: to Список получателей для этой почтовой программы, разделенный запятыми. ctladdr "Контрольный пользователь", то есть, имя пользователя, чьи параметры мы используем при доставке. delay Общее время задержки между получением и доставкой сообщения. xdelay Время, понадобившееся для попытки доставки (обычно показывает скорость соединения). mailer Имя почтовой программы, использовавшейся для доставки к данному получателю. relay Имя хоста, принявшего сообщение для данного получателя (или отказавшего в доставке). stat Статус доставки.
    Не все эти поля присутствуют для всех сообщений; например, для локальных сообщений отсутствует поле relay.

    Печать Очереди

    Содержимое очереди можно распечатать, используя команду mailq (или указав sendmail флаг -bp): mailq
    Результатом ее выполнения будет список идентификаторов сообщений, находящихся в очереди, размеров сообщений, даты поступления сообщения в очередь, и отправитель с получателями.

    Перестроение Базы Данных Псевдонимов

    Версия базы данных в виде hash или dbm может быть перестроена выполнением команды newaliases
    Это эквивалентно заданию sendmail флага -bi: /usr/sbin/sendmail -bi
    Если в конфигурации определена опция RebuildAliases (раннее D), sendmail будет перестраивать базу данных псевдонимов автоматически, если она может быть старой. Автоматическая перестройка может быть опасной на сильно загруженных машинах с большими файлами псевдонимов; если перестроение базы займет больше чем таймаут перестройки базы (опция AliasWait, ранее a, нормальное значение которой равно пяти минутам), то вполне возможно, что будут запущены одновременно несколько процессов перестройки.
    Если вы определили несколько баз данных псевдонимов, флаг -bi перестроит все типы баз данных, которые он понимает (например, он может перестраивать базы данных NDBM, но не может базы данных NIS).

    Почтовая Очередь

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

    Поддержка Протокола IDENT

    sendmail поддерживает протокол IDENT, определенный в RFC 1413. Хотя это улучшает идентификацию автора сообщения в электронной почте посредством производства "обратного звонка" в систему, откуда исходит сообщение для определения владельца соединения, это не идеально; протокол IDENT можно достаточно легко обмануть. Следующее описание было взято из RFC 1413:
    6. Положения Безопасности
    Информации, возвращаемой этим протоколом можно доверять настолько, насколько можно доверять хосту ИЛИ организации, в которой находится этот хост. Например, PC в открытой лаборатории имеет немного, если вообще имеет вообще что-либо запрещающее пользователю указать этому протоколу возвращать любой идентификатор, какой он захочет. Точно так же, если хост был скомпрометирован, возвращаемая им информация может быть полностью ошибочна и неверна.
    Протокол Идентификации не предназначен для авторизации или управления доступом. В лучшем случае, он обеспечивает некоторую дополнительную проверочную информацию в отношении соединения TCP. В худшем, он обеспечит дезориентирующую, неверную или злобно некорректную информацию.
    Использование информации, полученной из этого протокола для чего-либо иного, чем удостоверение, очень не советуется. В особенности, использование Идентификационного Протокола для выноса решений о доступе - как в качестве главного метода (т.е. единственной проверки) так и в качестве дополнения к другим методам может привести к ослаблению нормальной безопасности хоста.
    Сервер Идентификации может обнаружить информацию о пользователях, сущностях, объектах или процессах, которая обычно может быть рассмотрена как конфиденциальная. Сервер Идентификации обеспечивает сервис, являющийся грубым аналогом сервисов CallerID, обеспечиваемых некоторыми телефонными компаниями, а многие из таких же частных определений и аргументов, применяемых в сервисе CallerID, подходят к Идентификации. Если вы не будете запускать сервер "finger" по причинам сохранения тайны, то вы можете не захотеть использовать этот протокол.


    В некоторых случаях ваша система может не работать нормально с поддержкой IDENT из-за ошибки в реализации TCP/IP. Симптомы будут таковы: для некоторых хостов соединение SMTP будет закрываться почти емедленно. Если это действительно так происходит, или вы не хотите использовать IDENT, вы должны установит таймаут IDENT равным нулю; это отключит протокол IDENT.

  • Кроме Ultrix, не поддерживающего в syslog различные средства.


  • Этот формат может быть немного другим, если ваш поставщик изменил синтаксис.


  • Это обычное значение опции HostStatusDirectory; конечно же, если вы этого захотите, она может указывать на любое место в вашей файловой системе.


  • На самом деле, любая почтовая программа, имеющая выставленный почтовый флаг "A" будет позволять псевдонимизирование; обычно это ограничено локальной почтовой программой.


  • Пакет gdbm не работает.


  • Для того, чтобы можно было произвести это действие, в файле конфигурации требуется опция AliasWait. Обычно она должна быть определена.


  • Пользовательская пересылка (файлы .forward)

    Как альтернативу базе данных псевдонимов, каждый пользователь может создать в своем домашнем каталоге файл с именем ".forward". Если такой файл существует, sendmail перенаправляет почту для этого пользователя по списку адресов, указанных в файле .forward. Например, если домашний каталог пользователя "mckusick" содержит файл .forward содержащий: mckusick@ernie kirk@calder
    то любая почта, поступившая для "mckusick" будет перенаправлена по указанным адресам.
    На самом деле, файл конфигурации определяет последовательность проверяемых имен файлов. По умолчанию, это пользовательский файл .forward, но может быть определен по-другому, используя опцию ForwardPath. Если вы ее измените, вы должны будете проинформировать ваших основных пользователей об изменении; .forward очень хорошо вошло в коллективное подсознание.

    Потенциальные проблемы

    Существует несколько проблем, которые могут случиться с базой данных псевдонимов. Все они происходят из того, что процесс sendmail может начать использовать DBM-версию псевдонимов, когда она будет построена только частично. Это может случиться при двух условиях: один процесс использует базу данных, в то время как второй ее перестраивает, или процесс, занимающийся перестройкой базы данных, умирает (из-за того, что его убили, или система вдруг упала) до полного завершения перестройки.
    sendmail имеет три метода, чтобы попытаться избавиться от этих проблем. Первый - он игнорирует прерывания во время перестройки базы данных; это позволяет избежать случая, когда кто-нибудь прекращает процесс, оставляя частично перестроенную базу данных. Второй - он блокирует исходный файл базы данных во время перестройки - но это может не работать поверх NFS или если файл защищен на запись. Третий - в конце перестройки он добавляет псевдоним в виде @: @
    (что вообще-то нелегально). Перед тем, как sendmail будет использовать базу данных, он произведет проверку на наличие этого вхождения .

    Precedence

    Заголовок Precedence: может быть использован как грубое управление приоритетом сообщения. Он перестраивает порядок в очереди и может быть сконфигурирован на изменение значений таймаутов для сообщения.

    Сервисный Переключатель

    Реализация системных сервисов, таких, как определение имени хоста и пользователя управляется сервисным переключателем. Если операционная система хоста поддерживает такой переключатель, то sendmail будет использовать родную версию. Ultrix, Solaris, и DEC OSF/1 - примеры таких операционных систем. И хотя HP-UX 10 имеет поддержку сервисного переключателя, но, так как API не поддерживается библиотеками, sendmail в этот раз не использует родной сервисный переключатель.
    Если операционная система не поддерживает сервисный переключатель (например, SunOS, HP-UX, BSD), то sendmail будет использовать свою реализацию. Опция ServiceSwitchFile указывает на имя файла, содержащего определения сервисов. Каждая строка содержит имя сервиса и возможные реализации этого сервиса. Например, файл: hosts dns files nis aliases files nis
    попросит sendmail просматривать имена хостов сначала в Domain Name System. Если запрошенное имя хоста не найдено, он попробует локальные файлы, если и там не найдет, то попробует NIS. Точно также, при просмтре псевдонимов, сначала он попробует локальные файлы, а затем NIS.
    Сервисные переключатели не полностью интегрированы. Например, несмотря на то, что в вышеописанном примере имя хоста необходимо смотреть в NIS, в SunOS этого не произойдет, из-за того, что системная реализация gethostbyname(3) не понимает этого. Если имеется достаточно причин, sendmail может использовать свои реализации gethostbyname(3), gethostbyaddr(3), getpwent(3), и других системных подпрограмм, которые необходимы для его нормальной работы.

    Системный Протокол

    Системный протокол поддерживается программой syslogd(8). Все сообщения от sendmail протоколируются посредством LOG_MAIL.

    Состояние Сброса

    Вы можете попросить sendmail запротоколировать сброс открытых файлов и кэша соединений, послав ему сигнал SIGUSR1. Результаты протоколируются по очередности LOG_DEBUG.

    Специальные Строки Заголовка

    Несколько строк заголовка имеют особые интерпретации, определенные файлом конфигурации. Остальные имеют интерпретации, которые встроены в sendmail и не могут быть изменены без изменения кода. Здесь описаны эти встроенные интерпретации.

    Уровни

    Если у вас установлен syslogd(8) или его эквивалент, то вы можете производить протоколирование. Имеется большое количество информации, которое можно запротоколировать. Протокол организован как последовательность уровней. На самом нижнем уровне протоколируются только самые странные ситуации. На самом высоком уровне даже самые обычные и неинтересные события записываются для потомства. Согласно соглашению, уровни протоколирования ниже десятого обычно считаются "полезными"; уровни протоколирования выше 64 зарезервированы для целей отладки. Уровни с 11 по 64 зарезервированы для многословной информации, что могут захотеть некоторые узлы.
    Полное описание уровней протоколирования дано в разделе 4.6.

    Ускорение Очереди

    sendmail должен обрабатывать очередь автоматически через определенный интервал. Алгоритм такой: прочитать и отсортировать очередь, а затем обработать все сообщения по порядку. При попытке запустить работу, sendmail сначала проверяет, не заблокирована ли она. Если блокировка имеется, то он игнорирует эту работу.
    Не производится ни одной попытки удостовериться в том, что только один обработчик очереди существует в любое время, поэтому нет никакой гарантии, что работа не будет производиться вечно (однако, sendmail имеет некоторую эвристику, чтобы попытаться прекратить работу, занимающую абсурдно большое количество времени; технологически, это нарушает требования RFC 821, но одобряется в RFC 1123). Согласно алгоритму блокировки, одна работа не может заморозить всю очередь. Однако, недружественный принимающий хост, или программа приема, которая никогда ничего не возвращает, может собрать большое количество процессов в вашей системе. К несчастью, нет никакого общего решения для разрешения подобных проблем.
    В некоторых случаях, вы можете заметить, что основной хост второй день как упал, и у вас накопилась невероятно большая очередь. В результате sendmail большую часть времени будет проводить, сортируя эту очередь. Эта ситуация может быть исправлена, если вы уберете очередь в какое-то временное место и создадите новую очередь. Старую очередь можно будет обработать позже, когда хост-нарушитель опять начнет работать.
    Чтобы это сделать, вполне возможно перенести весь каталог очереди: cd /var/spool mv mqueue omqueue; mkdir mqueue; chmod 700 mqueue
    Затем вы должны убить работающий демон (потому что он все еще будет продолжать обрабатывать старый каталог очереди) и создать нового демона.
    Чтобы обработать старую очередь, запустите следующую команду: /usr/sbin/sendmail -oQ/var/spool/omqueue -q
    Флаг -oQ определит альтернативный каталог очереди, а флаг -q скажет о том, что нужна всего лишь обработка каждого сообщения в очереди. Если у вас имеется тяга к вуайеризму, вы можете использовать флаг -v, чтобы посмотреть, что будет происходить.
    Когда в очереди наконец-то не останется ни одного сообщения, вы сможете удалить этот каталог: rmdir /var/spool/omqueue

    Владельцы Списков

    Если при посылке на определенный адрес, скажем ,"x", произойдет ошибка, sendmail будет искать псевдоним вида "owner-x" для получения ошибки. Это обычно полезно для списков рассылки, где подписчик сам не имеет управления поддержкой списка; в этом случае, держатель списка может быть владельцем списка. Например: unix-wizards: eric@ucbarpa, wnj@monet, nosuchuser, sam@matisse owner-unix-wizards: unix-wizards-request unix-wizards-request: eric@ucbarpa
    заставит "eric@ucbarpa" получать ошибки, которые произойдут, когда кто-нибудь посылает в unix-wizards и попадает под вхождение "nosuchuser" в списке.
    Владельцы списков также изменяют почтовый адрес отправителя. Используется содержимое псевдонима владельца, если оно указывает на одного пользователя, иначе будет использоваться само имя псевдонима. По этой причине, и в соответствии с соглашениями Internet, адрес "owner-" обычно указывает на адрес "-request"; это позволяет сообщениям следовать типичным соглашениям Internet об использовании "listrequest" как обратный адрес.

    Интервал Очереди

    АРГУМЕНТЫ

    Полный список аргументов для sendmail детально описан в Приложении A. Некоторые важные аргументы описаны здесь.

    Интервал Очереди

    Количество времени между разветвлением процесса для обработки очереди определяется флагом -q. Если вы работаете в режиме приема, назначенного i или b, то это значение может быть относительно большим, как и в том случае, если ваш хост долго был отключен. Если вы запускаете sendmail в режиме q, то это значение должно быть относительно небольшим, потому что оно определяет максимальное время нахождения сообщения в очереди. (Смотри также опцию MinQueueAge.)
    Секция 5.3.1.1 RFC 1123 говорит, что это значение должно быть как минимум 30 минут (но, если вы работаете в режиме "queue-only", то это не важно).

    Использование Другого Файла Конфигурации

    Альтернативный файл конфинурации может быть определен флагом -C; например, /usr/sbin/sendmail -Ctest.cf -oQ/tmp/mqueue
    использует файл конфигурации test.cf вместо обычного /etc/sendmail.cf. Если флаг -C не имеет значения, то по умолчанию он использует файл sendmail.cf в текущем каталоге.
    Когда вы используете этот флаг, sendmail не использует пермиссии смены uid на root, поэтому обычно, во время тестирования, для каталога подкачки используют каталог, который открыт всем на запись (типа /tmp) (опция QueueDirectory или Q).

    Изменение Значений Опций

    Опции могут быть преодолены использованием в командной строке флагов -o или -O. Например, /usr/sbin/sendmail -oT2m
    выставляет опцию T (таймаут) на две минуты только для этого запуска; эквивалентная строка, использующая длинное имя опции такова: /usr/sbin/sendmail -OTimeout.queuereturn=2m
    Некоторые опции имеют ограничения по безопасности. sendmail позволяет вам выставить их, но с этого момента убирает свои пермиссии смены uid на root.

    Отладка

    Существует большое количество втроенных в sendmail флагов отладки. Каждый флаг отладки имеет номер и уровень, где большие уровни означают большее количество выдаваемой информации. Существует соглашение, что уровни выше девятого "абсурдны", то есть, они выдают так много информации, что обычно вы ее даже не захотите увидеть, за исключение отладки конкретного куска кода. Флаги отладки выставляются опцией -d; синтаксис таков:
    debug-flag:-d debug-list
    debug-list:debug-option [ , debug-option ]*
    debug-option:debug-range [ . debug-level ]
    debug-range:integer | integer - integer
    debug-level:integer

    где пробелы используются только для облегчения чтения. Например,
    -d12 Выставляет флаг 12 на уровень 1
    -d12.3 Выставляет флаг 12 на уровень 3
    -d3-17 Выставляет флаги с 3 по 17 на уровень1
    -d3-17.4 Выставляет флаги с 3 по 17 на уровень 4

    Для полного списка доступных отладочных флагов, вы должны посмотреть в исходный код (они слишком динамичны, чтобы быть отраженными в этой документации).

    Протоколирование Траффика

    Многие реализации SMTP не полностью реализуют протокол. Например, некоторые SMTP для персональных компьютеров не понимают строк-продолжений в кодах возврата. Это может быть очень трудно отследить. Если вы подозреваете такую проблему, вы можете включить протоколирование траффика, используя флаг -X. Например, /usr/sbin/sendmail -X /tmp/traffic -bd
    будет вести протокол всего траффика в файле /tmp/traffic.
    Это протоколирует большое количество данных очень быстро, и при нормальной работе вы НИКОГДА не должны ее использовать. После запуска такого демона, заставьте странную реализацию послать сообщение на ваш хост. Весь траффик сообщений из и в sendmail, включая входящий траффик SMTP, будет запротоколирован в этом файле.

    Режим Демона

    Если вы позволяете принимать почту через соединение IPC, у вас должен работать демон. Он должен запускаться из файла /etc/rc с флагом -bd. Флаги -bd и -q могут быть скомбинированы в одном вызове: /usr/sbin/sendmail -bd -q30m
    В качестве альтернативы можно запускать sendmail из inetd(8) (используя флаг -bs, чтобы сказать sendmail использовать SMTP на его стандартном вводе и выводе). Это будет работать и позволит вам завернуть sendmail в программу обработки TCP, но может быть несколько медленнее из-за того, что файл конфигурации будет перечитываться при получении любого входящего сообщения. Если вы так сделаете, то вам все равно понадобится работающий sendmail для обработки очереди: /usr/sbin/sendmail -q30m

    Существующая Информация о Статусе Хоста

    При включенном HostStatusDirectory, информация о статусе хостов находится на диске, и поэтому может быть использована одновременно несколькими процессами sendmail. Статус последнего соединения с каждым удаленным хостом может быть просмотрен командой: sendmail -bh
    Эта информация может быть обнулена командой: sendmail -bH
    Опустошение информации предотвращает ее загрузку новыми процессами sendmail, но не обнуляет уже имеющуюся у запущенных процессов информацию о статусе.
  • То есть, он выставляет свой эффективный uid соответственно настоящему uid; таким образом, если вы запускаете его как root, или из root'овского файла crontab, или во время запуска системы, пермиссии root будут учтены.



  • Тестирование Файлов Конфигурации

    При построениии таблицы конфигурации, вы можете произвести некоторое тестирование, используя "тестовый режим" sendmail. Например, вы можете запустить sendmail так: sendmail -bt -Ctest.cf
    что заставит sendmail прочитать файл конфигурации "test.cf" и войти в тестовый режим. В этом режиме, вы вводите строки типа: rwset address
    где rwset - набор правил перезаписи, который вы хотите использовать, а address - это адрес, к которому вы хотите его применить. Тестовый режим покажет вам шаги при обработке, показав в конце окончательно полученный адрес. Вы можете использовать список правил перезаписи, разделенный запятыми, для последовательного применения на входе. Например: 3,1,21,4 monet:bollard
    сначала применит набор правил три на адрес "monet:bollard." Затем к выходу набора правил три будет применен набор правил один, затем точно также наборы правил двадцать один и четыре.
    Если вам нужна большая детализация, вы можете также использовать флаг "-d21" для включения режима отладки. Например, sendmail -bt -d21.99
    включит невероятное количество информации; адрес из одного слова может выдать в результате несколько страниц нужной информации.
    Необходимо предупредить, что внутренне sendmail применяет набор правил 3 ко всем адресам. В тестовом режиме, вы должны делать это вручную. Например, старые версии позволяли вам использовать 0 bruce@broadcast.sony.com
    Эта версия требует, чтобы вы использовали: 3,0 bruce@broadcast.sony.com
    Начиная с версии 8.7, в тестовом режиме стали доступны и некоторые другие вещи:
    +o.DxзначениеУказывает макросу x иметь указанное значение. Это полезно, когда отлаживаемые правила используют синтаксис $&x.
    +o.CcзначениеДобавляет указанное значение к классу c.
    +o.Sнабор_правилРаспечатывает содержимое указанного набора правил.
    +o-ddebug-specЭквивалентно флагу командной строки.


    Ускорение Очереди

    В некоторых случаях, вы можете заметить, что по какой-либо причине ваша очередь застряла. Вы можете ускорить очередь, используя флаг -q (без значения). При этом очень интересно использовать флаг -v (verbose), чтобы посмотреть, что будет происходить: /usr/sbin/sendmail -q -v
    Вы также можете ограничить количество работ с определенным идентификатором очереди, отправителем или получателем, используя один из модификаторов очереди. Например, "-qRberkeley" ограничит работу по обработке очереди только сообщениями со строчкой "berkeley" в любом из адресов получателей. Точно также, "-qSstring" ограничит обработку сообщениями с определенными отправителями, а "-qIstring" ограничит ее конкретными идентификаторами очереди.

    Настройка

    Доступ к Серверу Имен

    Управление просмотром адресов хостов назначается вхождением сервиса hosts в вашем файле сервисного переключателя. Если ваша система имеет встроенную поддержку сервисного переключателя (например, Ultrix, Solaris, или DEC OSF/1) то вполне вероятно, что ваша система уже нормально сконфигурирована. В ином случае, sendmail проконсультируется с файлом /etc/service.switch, который должен быть создан. Sendmail использует только два вхождения: hosts и aliases, хотя системные программы могут использовать иные сервисы (особенно сервис passwd для просмотра имени пользователя с помощью getpwname).
    Однако, некоторые системы (типа SunOS) будут производить просмотр DNS независимо от установленных значений сервисного переключателя. В частности, системная подпрограмма gethostbyname(3) используется для просмотра имен хостов, а многие версии поставщиков пытаются использовать комбинации DNS, NIS, и просмотр файла /etc/hosts без консультации с сервисным переключателем. Sendmail не пытается обойти эту проблему, и просмотр DNS будет сделан в любом случае. Если же у вас вообще не сконфигурирован сервер имен, например, у вас чисто UUCP узел, sendmail будет получать сообщения "connection refused" при попытке соединения с сервером имен. Если вхождение hosts переключателя имеет перечисленным в любом месте списка сервис "dns", sendmail будет считать это временной неудачей и поставит сообщение в очередь для последующей обработки; другими словами, он игнорирует данные сервера имен.
    Такая же технология используется при решении о просмотре MX. Если вы хотите иметь поддержку MX, вы должны иметь "dns" перечисленным как сервис во вхождении hosts переключателя.
    Опция ResolverOptions (I) позволяет вам изменять опции сервера имен. Командная строка принимает последовательность флагов, как описано в resolver(3) (с удаленным первым "RES_"). Каждый из них может быть предварен опциональным "+" или "-". Например, строка O ResolverOptions=+AAONLY -DNSRCH


    включает опцию AAONLY (принимать только авторитативные сообщения) и выключает опцию DNSRCH (поиск по доменному пути). По умолчанию большинство флагов библиотеки разрешителя отключены, включены только DNSRCH, DEFNAMES, и RECURSE. Вы также можете включить "HasWildcardMX", чтобы указать, что существует масочная запись MX, соответствующая вашему домену; это отключает сопоставление MX при канонификации имен, что может привести к неверной канонификации.

    Версия конфигурации уровня 1 выключает DNSRCH и DEFNAMES для просмотров, делаемых при доставке, но оставляет их включенными во всех остальных случаях. Версия 8 sendmail игнорирует их при канонификационных просмотрах (при использовании $[ ... $]), и всегда делает поиск. Если вы не хотите автоматического расширения имен, не вызывайте $[ ... $].

    Правила поиска для $[ ... $] - это что-то непохожее, чем необычное. Если просматриваемое имя имеет хотя бы одну точку, оно всегда будет опробовано без изменений. Если это не удастся, будет опробован уменьшенный путь поиска, и в конце концов будет опробовано неизмененное имя (но только для имен без точек, потому что имена с точками уже были опробованы). Это позволяет именам типа "utc.CS" совпадать с узлами в Чехословакии, а не с узлами в вашем местном отделении Computer Science. Они также предпочитают записи типов A и CNAME записям типа MX- поэтому, если находится запись MX, о ней делается заметка, но просмотр продолжается. Таким образом, если вы имеете масочную запись MX, соответствующую вашему домену, то это не будет распознано, как будто все имена совпадают с ней.

    Для полного выключения доступа к серверу имен в, системах без поддержки сервисного переключателя (типа SunOS), вы должны будете перекомпилировать sendmail с -DNAMED_BIND=0 и удалив -lresolv из списка искомых при линковании библиотек.

    Файловые Режимы

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

    Флаги Конфиденциальности

    Опция PrivacyOptions (p) позволяет вам установить конкретные "конфиденциальные" флаги. На самом деле, многие из них не дадут вам экстра конфиденциальности, а только лишь настоят на том, чтобы клиентские сервера SMTP использовали команду HELO до использования конкретных команд, или добавлением дополнительных заголовков, для распознания попыток подкачки.
    Опция принимает последовательности имен флагов; крайняя конфиденциальность - включение всех этих флагов. Например: O PrivacyOptions=needmailhelo, noexpn
    Настоит на том, чтобы команда HELO или EHLO была использована до принятия команды MAIL и отключает команду EXPN.
    Флаги подробно описаны в разделе 5.6.

    И Мне Тоже Пришлите

    Обычно, sendmail удаляет (конвертного) отправителя из любого списка расширений. Например, если "matt" посылает письмо в список, содержащий "matt" как одного из своих членов, то он, скорее всего, не захочет получить копию своего же сообщения. Если в командной строке есть флаг -m (мне тоже), или в файле конфигурации выставлена опция MeToo (m), это свойство не используется. Некоторые узлы любят запускать демон SMTP с -m.
  • В некоторых системах по умолчанию нуль, чтобы окончательно отключить протокол. [назад]

  • Эта проверка включает просмотр каждого адреса сервером имен; что добавляет сетевые задержки, но в некоторых случаях может быть приемлемо. [назад]



  • Интервал Очереди

    Аргумент для флага -q определяет, как часто поддемон будет обрабатывать очередь. Обычно это значение меняется от пятнадцати минут до одного часа. Секция 5.3.1.1 RFC 1123 рекомендует устанавливать его равным как минимум 30 минутам.

    Кэширование Соединения

    При обработке очереди, sendmail будет пытаться держать несколько последних соединений открытыми, во избежание потерь при запуске и остановке. Это применяется только к IPC соединениям.
    При попытке открыть соединение, первым проверяется кэш. Если найдено открытое соединение, оно проверяется на предмет активности посылкой команды RSET. Если произойдет ошибка, то соединение будет закрыто и заново открыто.
    Кэшем соединений управляют два параметра. Опция ConnectionCacheSize (k) определяет количество позволенных одновременно открытых соединений. Если оно равно нулю, соединения будут закрываться, как только это станет возможным. По умолчанию оно равно одному. Его можно установить такого размера, как вам потребуется; оно будет ограничивать количество системных ресурсов, используемых sendmail при обработке очереди. Никогда не устанавливайте это значение больше 4.
    Опция ConnectionCacheTimeout (K) определяет максимальное время бездеятельности любого кэшированного соединения. Когда время простоя превысит это значение, соединение будет закрыто. Это число должно быть небольшим (до 10 минут), чтобы вы не занимали системные ресурсы других машин. Значение по умолчанию пять минут.

    Максимальный размер сообщения

    Во избежание переполнения вашей системы большим сообщением, может быть выставлена опция MaxMessageSize, указывающая абсолютное ограничение размера любого сообщения. Это будет сообщено в диалоге ESMTP и проверено при передаче сообщения.

    Настройка

    В зависимости от потребностей вашего узла, вы можете захотеть изменить те или иные конфигурационные параметры. Большинство из них устанавливаются опциями в файле конфигурации. Например, строка "O Timeout.queuereturn=5d" устанавливает опции "Timeout.queuereturn" значение "5d" (пять дней).
    Многие из этих опций имеют такие значения по умолчанию, которые подходят к большинству узлов. Однако, на узлах с большой почтовой нагрузкой может понадобиться некоторая соответствующая настройка под их почтовую загрузку. В частности, на узлах, через которые проходит большое количество небольших почтовых сообщений, доставляемых многим получателям, может понадобиться подправить параметры, связанные с приоритетами очереди.
    Все версии sendmail до 8.7 имели имена опций, состоящие из одного символа. С 8.7, опции имеют длинные (состоящие из нескольких символов) имена. Хотя старые короткие имена до сих пор принимаются, многие новые опции не имеют коротких эквивалентов.
    Этот раздел описывает только те опции, которые вам, вероятно, захочется изменить; более детальное описание опций дано в .

    Ограничение Загрузки

    Sendmail можно попросить принимать и откладывать в очередь (но не доставлять) почту, если средняя загрузка системы становиться слишком большой. Для этого используется опция QueueLA (x). Когда средняя загрузка системы превышает значение опции QueueLA, устанавливается режим q (только очередь), если опция QueueFactor (q) деленная на разность средней загрузки системы и значения опции QueueLA плюс единица, превысит приоритет сообщения - то есть, сообщение откладывается в очередь, если, и только если: pri > { QueueFactor } / { LA - { QueueLA } + 1 }
    По умолчанию опция QueueFactor равна 600000, так что каждая единица средней загрузки стоит 600000 пунктов приоритета (как описано выше).
    Для крутых случаев, опция RefuseLA (X) определяет среднюю загрузку, при которой sendmail будет отказываться принимать сетевые соединения. Локально созданная почта (включая входящую почту UUCP) будет приниматься.

    Отключение Проверок Безопасности

    Sendmail очень сильно обращает внимание на режимы доступа к файлам, которые он читает и в которые пишет. Например, по умолчанию, он отказывается читать большинство файлов, открытых на запись для группы на основании того, что они могут быть искажены кем-либо из группы, а не владельцем; он даже откажется прочитать файлы в каталогах, открытых на запись для группы.
    Если вы совершенно уверены, что ваша конфигурация находится в безопасности, и вы хотите, чтобы sendmail не производил таких проверок, вы можете отключить конкретные проверки, используя опцию DontBlameSendmail. Эта опция берет одно или более имен, для которых проверка отключена. В последующем описании под "небезопасным каталогом" считается каталог, в который может писать кто-либо еще кроме владельца. Значения могут быть такие:
    Safe Никакой специальной обработки
    AssumeSafeChown Считать, что системный вызов chown запрещен пользователю root. Из-за того, что некоторые версии Unix разрешают обычным пользователям отдавать свои файлы другим пользователям на некоторых файловых системах, sendmail часто не может считать, что данный файл был создан владельцем, в частности, если он находится в откытом на запись каталоге. Вы можете выставить этот флаг, если вы знаете, что отдача файлов в вашей системе запрещена.
    ClassFileInUnsafeDirPath Во время чтения файлов класса (используя строку F в файле конфигурации), разрешать файлы, находящиеся в небезопасных каталогах.
    ErrorHeaderInUnsafeDirPath Разрешить файлу названному в опции ErrorHeader находиться в небезопасном каталоге.
    GroupWritableDirPathSafe Изменить определение "небезопасного каталога" так, чтобы каталоги, открытые на запись для группы считались безопасными. Каталоги, открытые на запись для всех всегда считаются небезопасными.
    GroupWritableForwardFileSafe Разрешить файлы forward открытые на запись для группы.
    GroupWritableIncludeFileSafe Разрешить файлы :include: открытые на запись для группы.
    GroupWritableAliasFile Разрешить файлы псевдонимов открытые на запись для группы.
    HelpFileInUnsafeDirPath Разрешить файлу, названному в опции HelpFile находиться в небезопасном каталоге
    WorldWritableAliasFile Принимать файлы псевдонимов, открытые на запись для всех.
    ForwardFileInGroupWritableDirPath Разрешить файлы .forward находящиеся в каталогах, открытых на запись для группы.
    IncludeFileInGroupWritableDirPath Разрешить файлы :include: находящиеся в каталогах, открытых на запись для группы.
    ForwardFileInUnsafeDirPath Разрешить файлы .forward находящиеся в небезопасных каталогах.
    IncludeFileInUnsafeDirPath Разрешить файлы :include: находящиеся в небезопасных каталогах
    ForwardFileInUnsafeDirPathSafe Разрешить файлам .forward находящимся в небезопасных каталогах включать ссылки на программы и файлы.
    IncludeFileInUnsafeDirPathSafe Разрешить файлам :include: находящимся в небезопасных каталогах включать ссылки на программы и файлы.
    MapInUnsafeDirPath Разрешить файлы преобразований (например, файлы hash, btree, и dbm) в небезопасных каталогах.
    LinkedAliasFileInWritableDir Разрешить файл псевдонимов, являющийся ссылкой в каталоге, открытом на запись.
    LinkedClassFileInWritableDir Разрешить файлы классов, являющиеся ссылками в каталогах, открытых на запись.
    LinkedForwardFileInWritableDir Разрешить файлы .forward, являющиеся ссылками в каталогах, открытых на запись.
    LinkedIncludeFileInWritableDir Разрешить файлы :include:, являющиеся ссылками в каталогах, открытых на запись.
    LinkedMapInWritableDir Разрешить файлы преобразований, являющиеся ссылками в каталогах, открытых на запись.
    LinkedServiceSwitchFileInWritableDir Разрешить файлу сервисного переключателя быть ссылкой, даже если каталог открыт на запись.
    FileDeliveryToHardLink Разрешить доставку в файлы, являющиеся жесткими ссылками.
    FileDeliveryToSymLink Разрешить доставку в файлы, являющиеся символическими ссылками.
    RunProgramInUnsafeDirPath Поехали, давайте еще и запускать программы в каталогах, открытых на запись:
    RunWritableProgram Ну, давайте еще и запускать те программы, в которые может писать и группа, и вообще кто угодно.
    WriteMapToHardLink Разрешить запись в преобразования, являющиеся жесткими ссылками.
    WriteMapToSymLink Разрешить запись в преобразования, являющиеся символическими ссылками.
    WriteStatsToHardLink Разрешить файлу статуса быть жесткой ссылкой.
    WriteStatsToSymLink Разрешить файлу статуса быть символической ссылкой.


    Перемещение Пользовательских Файлов Перенаправления

    Некоторые узлы монтируют домашние каталоги пользователей с локальных дисков их рабочих станций, потому, что локальный доступ быстрее. Однако при этом замедляется просмотр файлов .forward. В некоторых случаях, почта может быть доставлена неправильно, из-за отключения файлового сервера. Быстродействие может быть особенно медленным, если вы используете автоматическое монтирование.
    Опция ForwardPath (J) позволяет вам назначить путь к файлам перенаправления. Например, строка файла конфигурации O ForwardPath=/var/forward/$u:$z/.forward.$w
    Сначала будет искать файл с именем, совпадающим с именем пользователя в /var/forward; если он не найден, или к нему нет доступа, в домашнем каталоге пользователя будет искаться файл ".forward.machinename". Только узел настоящих извращенцев может также искать по отправителю, используя $r, $s, или $f.
    Если вы создаете каталог типа /var/forward, он должен иметь пермиссии 1777 (то есть, должен быть выставлен sticky bit). Пользователи должны создавать файлы с пермиссиями 644. Заметьте, что для разрешения файлов перенаправления в каталоге, открытом всем на запись, вы должны использовать флаги ForwardFileInUnsafeDirPath и ForwardFileInUnsafeDirPathSafe с опцией DontBlameSendmail.

    Приоритеты Очереди

    Каждому сообщению при первичной обработке назначается приоритет, состоящий из размера сообщения (в байтах) минус класс сообщения (определяемый из заголовка Precedence:) умноженный на "рабочий коэффициент класса" и количества получателей, умноженного на "рабочий коэффициент получателя". Приоритет используется для построения порядка очереди. Более высокое значение приоритета подразумевает, что сообщение будет обработано позднее при проходе очереди.
    Размер сообщения здесь используется для того, чтобы более большие сообщения обрабатывались после относительно небольших. Класс сообщения позволяет пользователям посылать "высокоприоритетные" сообщения включая поле "Precedence:" в свои сообщения; Значение этого поля просматривается в строках P файла конфигурации. Вследствие того, что количество получателей сообщения может влиять на загрузку, оно также включено в приоритет.
    Коэффициенты получателя и класса могут быть установлены в файле конфигурации, используя опции RecipientFactor (y) и ClassFactor (z) соответственно. По умолчанию, они равны: 30000 (для коэффициента получателя) и 1800 (для коэффициента класса). Первичный приоритет таков: pri = msgsize - (class умноженный на ClassFactor) + (nrcpt умноженное на RecipientFactor)
    (Запомните, более высокое значение этого параметра на самом деле означает, что работа будет обработана с низким приоритетом.)
    Приоритет работы скорректирован при каждой обработке сообщения (то есть, при каждой попытке его доставки) использованием "рабочего коэффициента времени", установленного опцией RetryFactor (Z). Он добавляется к приоритету, поэтому обычно он уменьшает старшинство работы, на основании того, что работа, не выполненная много раз, вполне может быть не выполнена опять. Опция RetryFactor по умолчанию равна 90000.

    Режим Доставки

    Существует большое количество режимов доставки, в которых может работать sendmail, указанных конфигурационной опцией DeliveryMode (d). Эти режимы определяют, как быстро почта будет доставлена. Доступные режимы:
    iИнтерактивная доставка (синхронная)
    bДоставка в фоне (асинхронная)
    qТолько очередь (не доставлять)
    dОтложить попытку доставки (не доставлять)

    Есть и компромиссы. Режим "i" дает отправителю быстрейшую обратную связь, но может замедлить некоторые почтовые программы намного больше необходимого. Режим "b" доставляет быстро, но может наплодить кучу процессов, если ваша почтовая программа тратит много времени на доставку сообщений. Режим "q" минимизирует загрузку вашей машины, но доставка сообщений будет задержана до наступления очередного интервала. Режим "d" идентичен режиму "q", за исключением того, что он также предотвращает работу всех просмотров; он предназначен для узлов "dial on demand", где просмотр DNS может стоить реальные деньги. Некоторые простые сообщения об ошибках (например, host unknown during the SMTP protocol) в этом режиме будут задержаны. По умолчанию обычно используется режим "b".
    Если вы запускаете sendmail в режиме "q" (только очередь), "d" (отсрочка), или "b" (доставка в фоне), то он не будет разворачивать псевдонимы и следовать файлам .forward, вплоть до первого получения почты. Это ускоряет ответ на команду RCPT. Режим "i" не может быть использован сервером SMTP.

    Suid или не suid?

    Sendmail может вполне безопасно сделан setuid на root. Тогда, когда он собирается запустить с помощью exec(2) почтовую программу, он проверяет, равен ли userid нулю; если равен, то он переустанавливает userid и groupid на значения по умолчанию (выставляемые равенством U= в строке почтовой программы; если это равенство не установлено, используется опция DefaultUser). Это может быть преодолено выставкой флага S у почтовой программы для доверенных почтовых программ, которые могут быть запущены от root. Однако, это заставит обработку почты быть засчитанной sa(8) как потребление пользователем root системных ресурсов, вместо того, чтобы засчитать это пользователю, посылающему почту.
    Если вы не делаете sendmail setuid'ным на root, он все равно будет работать, но вы потеряете большиую часть функциональности и конфиденциальности, а так же вам придется открыть всем на запись каталог очереди. Также вы можете сделать sendmail setuid'ным на какого-либо псевдопользователя (например, создав пользователя "sendmail" и сделав sendmail setuid'ным на него) что исправит проблему конфиденциальности, но не вопросы функциональности. Также, это не будет являться гарантией безопасности: например, пользователь root посылает почту, и демон будет часто работать от пользователя root.
    В качестве компромисса можно сделать sendmail setuid'ным на пользователя root, но выставить опцию RunAsUser. В результате это заставит sendmail стать указанным пользователем сразу же после запуска, требующего привилегии пользователя root (главным образом, открытия порта SMTP). Если вы используете опцию RunAsUser, каталог очереди (обычно /var/spool/mqueue) должен принадлежать этому пользователю, а все файлы и базы данных (включая пользовательские файлы .forward, файлы псевдонимов, файлы :include, и внешние базы данных) должны быть открыты для этого пользователя на чтение. RunAsUser скорее всего наиболее подходит для конфигурации на брандмауэрах, не имеющих регулярных заходов пользователей.

    Свободное Пространство

    В системах, имеющих один из системных вызовов семейства statfs(2) (включая statvfs и ustat), вы можете указать минимальное количество свободных блоков в файловой системе очереди, используя опцию MinFreeBlocks (b). Если в файловой системе, содержащей очередь, доступно меньше, чем указанное количество блоков, сервер SMTP будет отказываться от почты кодом ошибки 452. Такой отказ приглашает клиентов SMTP попытаться установить соединение позднее.
    Не устанавливайте значение этой опции слишком высоким; это может повлечь отказ от почты в тех случаях, когда она может быть спокойно обработана.

    Таймауты Чтения

    Все таймауты имеют имена типа "Timeout.подопция". Все распознаваемые подопции, их значения по умолчанию, и минимальные значения, позволяемые секцией 5.3.2 RFC 1123 таковы:
    connect Время ожидания открытия SMTP соединения (системный вызов connect(2)) [0, неопределенное]. Если оно равно нулю, то используется значение из ядра системы. Эта опция ни в каком случае не может иметь значение больше, чем это позволяет ядро, но может быть меньше. Это сделано, чтобы обойти ядра, позволяющие абсурдно длительный таймаут соединения (в некоторых случаях 90 минут).
    iconnect То же самое, что connect, кроме того, что оно применяется только для первичной попытки соединения с хостом для заданного сообщения [0, неопределенное]. Концепция такова: это значение должно быть очень небольшим (несколько секунд); хосты с хорошим соединением и отвечающие хосты, таким образом, будут обслужены немедленно. Медленные хосты не будут задерживать остальные доставки на стадии начальной попытки доставки.
    initial Ожидание начального приветственного сообщения 220 [5m, 5m].
    helo Ожидание ответа на команду HELO или EHLO [5m, неопределенное]. Это может потребовать просмотра имени хоста, поэтому пять минут, возможно, вполне приемлемый минимум.
    mail| Время ожидания ответа на команду MAIL [10m, 5m].
    rcpt| Время ожидания ответа на команду RCPT [1h, 5m]. Это значение должно быть большим, из-за того, что оно может указывать на список, и его расширение может занять много времени (смотри ниже).
    datainit| Время ожидания ответа на команду DATA [5m, 2m].
    datablock| Ожидание прочтения блока данных (то есть, тела сообщения). [1h, 3m]. Это значение должно быть большим, потому что оно также применяется к программам, которые могут достаточно медленно выводить данные в sendmail.
    datafinal| Время ожидания ответа на точку, завершающую сообщение. [1h, 10m]. Если это значение короче, чем время, необходимое получателю для получения сообщения, будет сделана повторная передача. Это описывается в RFC 1047.
    rset Время ожидания ответа на команду RSET [5m, неопределенное].
    quit Время ожидания ответа на команду QUIT [2m, неопределенное].
    misc Время ожидания ответа на различные (но короткие) команды, типа NOOP (нет операции) и VERB (переход в подробный режим). [2m, неопределенное].
    command| Для сервера SMTP, время ожидания следующей команды. [1h, 5m].
    ident Время ожидания ответа на запрос IDENT [30s, неопределенное].
    hoststatus Сколько времени информация о хосте (например, о том, что он отключен) будет кэширована, прежде чем она устареет [30m, неопределеное].
    <


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

    Многие из минимальных значений в RFC 1123 слишком малы. Sendmail был разработан для протоколов RFC 822, которые не определяют таймауты чтения; следовательно, версии sendmail до 8.1 не гарантируют быстрого ответа на сообщения. В частности, команда "RCPT" определяющая список рассылки будет расширена и проверит весь список полностью; большой список на медленной системе может запросто занять времени больше, чем пять минут . Я рекомендую таймаут в один час - так как обрыв соединения во время фазы RCPT достаточно редки, длительный таймаут не обременителен, но может сильно помочь в уменьшении загрузки сети и повторных сообщений.

    Например, строки: O Timeout.command=25 O Timeout.datablock=3h

    Устанавливает серверу SMTP таймаут на команды 25 минут и таймаут на ввод блока данных 3 часа.

    Таймауты Сообщений

    Если сообщение будет находиться в очереди несколько дней, то время его обработки закончится. Это делается для того, чтобы быть уверенным, что отправитель, по крайней мере, предупрежден о невозможности доставки сообщения. Обычно таймаут равен пяти дням. Иногда удобно также посылать предупреждение, если сообщение находится в очереди на протяжении нескольких часов (подразумевается, что обычно у вас хорошая связь; если же обычно отсылка ваших сообщений занимает несколько часов, то вам не захочется получать такие сообщения, так как это вполне нормальное событие). Эти таймауты выставляются опциями Timeout.queuereturn и Timeout.queuewarn в файле конфигурации (раньше оба значения выставлялись опцией T).
    Так как эти опции глобальны, и вы не знаете заранее, сколько времени хост вне вашего домена будет отключен, рекомендуемый таймаут составляет пять дней. Это позволяет получателю исправить проблему, даже если она случилась в самом начале длительных выходных. Секция 5.3.1.1 RFC 1123 говорит, что этот параметр должен быть "как минимум 4-5 дней".
    Значение Timeout.queuewarn может быть вложено в опцию T указанием времени, по истечении которого должно быть послано предупреждение; два таймаута разделяются слешем. Например, строка OT5d/4h
    говорит о том, что посылка сообщения должна быть прекращена через пять дней, а предупреждение должно быть послано через четыре часа. Это значение должно быть достаточно большим, чтобы несколько раз попытаться доставить сообщение.

    Таймауты

    Все временные интервалы устанавливаются с использованием масштабного синтаксиса. Например, "10m" означает десять минут, в то время как "2h30m" означает два с половиной часа. Вот полный набор масштабов:
    sСекунды
    mМинуты
    hЧасы
    dДни
    wНедели


    Уровни Протоколирования

    Sendmail'у может быть указан уровень протоколирования. По умолчанию стандартной таблицей конфигурации используется уровень 9. Имеются следующие уровни:
    0 Минимальный протокол
    1 Серьезные системные ошибки и потенциальные проблемы безопасности
    2 Потери соединений (сетевые проблемы) и ошибки протокола
    3 Другие серьезные ошибки, неправильные адреса, временные ошибки forward/include, таймауты соединений.
    4 Несущественные неисправности, устаревание базы данных псевдонимов, отказы соединений из-за проверочных наборов правил (check_rulests)
    5 Статистика сбора сообщений
    6 Создание сообщений об ошибках, командах VRFY и EXPN.
    7 Ошибки доставки (хост или пользователь не известен и т.д.)
    8 Успешные доставки и перестроения базы псевдонимов.
    9 Отложенные сообщения (из-за того, что хост отключен и т.д.)
    10Расширение базы данных (просмотры псевдонимов, перенаправлений и пользователей)
    11Ошибки NIS и окончание обработок
    12Протоколирование всех соединений SMTP.
    13Протоколирование плохих пользовательских оболочек, файлов с несоответствующими пермиссиями, и других спорных ситуаций.
    14Протоколирование всех отказов от соединений
    15Протоколирование всех входящих и исходящих команд SMTP.
    20Протоколирует попытки обработки заблокированных файлов в очереди. Это не ошибки, но может быть полезно, если ваша очередь становится перегруженной.
    30Потерянные блокировки (только если вы используете lockf вместо flock).

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

    Ветвление во время проходов очереди

    Указанием опции ForkEachJob (Y), можно заставить sendmail ветвиться перед каждым отдельным сообщением во время прохода очереди. Это защитит вас от потребления sendmail большого количества памяти, что очень полезно, если у вас не очень много памяти. Однако если опция ForkEachJob не выставлена, sendmail во время прохода очереди будет помнить об отключенных хостах, что может повысить производительность системы.
    Если опция ForkEachJob не выставлена, sendmail не может использовать кэшированные соединения.

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

    Набор правил check relay вызывается

    Набор правил check relay вызывается после приема соединения. Он проверяет client.host.name $| client.host.address
    где $| - метасимвол, разделяющий две части. Это правило может отказать в соединении из различных мест.

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

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

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

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

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

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

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

    Можно определить классы или фразы для соответствия левосторонней части правил перезаписи, где "фраза" - это последовательность символов, не содержащая символов пробела. Например, для предотвращения отправки сообщений самому себе, может быть создан класс всех локальных имен для данного узла. Это может быть определено как в файле конфигурации, так и читаться из другого файла. Классы имеют имена, состоящие из одной буквы или слова в {скобках}. Имена классов, начинающиеся с букв нижнего регистра и специальных символов, зарезервированы для использования системой. Классы, определенные в файлах конфигурации могут быть заданы заглавными буквами для коротких имен, или начинаться с заглавной буквы для длинных имен.
    Синтаксис: Ccphrase1 phrase2... Fcfile
    Первая форма определяет класс c соответствующим любому из названных слов. Ее можно разбивать на несколько строк; на пример, две формы: CHmonet ucbmonet
    и CHmonet CHucbmonet
    эквивалентны. Форма "F" читает элементы класса c из названного file.
    Можно получить доступ из правил к элементам классов, используя $= или $~, (сопоставить вхождения не входящие в класс) совпадающие только с отдельным словом; вхождения из нескольких слов в классе, в этом контексте, игнорируются.
    Некоторые классы имеют для sendmail внутреннее значение:

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

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

    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 Allman) Sendmail надлежащим образом квотирует имена, имеющие специальные знаки, если используется первая форма.
    $r Протокол, использовавшийся для получения сообщения. Выставляется из флага командной строки -p или кодом сервера SMTP.
    $s Имя хоста отправителя. Выставляется из флага командной строки -p или кодом сервера SMTP.
    $t Числовое представление текущего времени.
    $u Пользователь-получатель.
    $v Номер версии бинарного файла sendmail.
    $w| Hostname этого узла. Корневое имя для этого хоста (смотри ниже всякие нерулезности).
    $x Полное имя отправителя.
    $z Домашний каталог получателя.
    $_ Подтвержденный адрес отправителя.
    ${bodytype} Тип тела сообщения (7BIT или 8BITMIME), определенный из конверта.
    ${client_addr} IP адрес клиента SMTP. Определяется только в сервере SMTP.
    ${client_name} Имя хоста клиента SMTP
    ${client_port} Номер порта клиента SMTP. Определяется только в сервере SMTP.
    ${envid} Идентификационный номер конверта, переданный в sendmail как часть конверта.
    ${opMode} Текущий режим работы (из флага -b).
    <


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

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

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

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


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

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

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

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

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

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

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

    Формат строк заголовка, вставляемых sendmail в сообщение, определяется строкой H. Синтаксис этой строки: H[?mflags?]hname: htemplate
    Строки-продолжения в этом определении отражаются прямо в выходящее сообщение. Макрос htemplate раскрывается до подстановки в сообщение. Если определена mflags (окруженная знаками вопроса), как минимум один из указанных флагов должен иметь место в определении почтовой программы для этого заголовка для автоматического вывода. Если один из этих заголовков имеется на входе, он отражается на выход не зависимо от этих флагов.
    Некоторые заголовки имеют специальную семантику, описываемую позднее.
    Вторичный синтаксис позволяет производить проверку заголовков в том виде, как они были считаны. Для включения проверки, используйте: HHeader: $>Ruleset
    Указанный набор правил (Ruleset) вызывается для указанного заголовка Header, и может возвращать $#error для отказа от сообщения, или $#discard для сброса сообщения (как и в остальных наборах правил check_*). Заголовок рассматривается как структурированное поле, то есть, комментарии (в кавычках) перед обработкой удаляются.
    Например, следующие строки в конфигурации: HMessage-Id: $>CheckMessageId R< $+ @ $+ >$@ OK R$* $#error $: Illegal Message-Id header
    Приведут к отказу от любого сообщения, имеющего заголовок в любой из следующих форм: Message-Id: <> Message-Id: любой текст Message-Id: <легальный текст@домен> дополнения

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

    Специальные преобразования могут быть определены использованием строки: Kmapname mapclass arguments
    Где mapname - имя, под которым это преобразование используется в правилах перезаписи; mapclass - имя типа преобразования (эти имена вкомпилированы в sendmail); arguments интерпретируются в зависимости от класса; обычно, используется один аргумент, указывающий на файл, содержащий преобразование.
    На преобразования ссылаются, используя синтаксис: $( ключ преобразования $@ аргументы $: умолчание $)
    где и аргументы и умолчание могут быть опущены. $@ аргументы могут встречаться много раз. Указанный ключ и аргументы передаются в соответствующую преобразующую функцию. Если она возвращает значение, то оно замещает ввод. Если она не возвращает значение и имеется определенное умолчание, the умолчание заменяет ввод. Иначе ввод не изменяется.
    Аргументы передаются в преобразование для произвольного использования. Большинство классов преобразований могут интерполировать эти аргументы в их значения используя для указания соответствующего аргумента синтаксис "%n" (где n - цифра).
    Аргумент "%0" обозначает ключ базы данных. Например, правило R$- ! $+ $: $(uucp $1 $@ $2 $: %1 @ %0 . UUCP $)
    Просматривает имя UUCP в (определенном пользователем) преобразовании UUCP; если не найдено, превращает его в форму ".UUCP". База данных должна содержать записи типа: decvax %1@%0.DEC.COM research %1@%0.ATT.COM
    Отметьте, что операторы умолчания никогда не делают этого преобразования.
    Встроенное преобразование с именем и классом "host" - это просмотр канонизации имени хоста. Таким образом, синтаксис: $(host hostname$)
    эквивалентен: $[hostname$]
    Существует множество определенных классов.

    dbm Просмотр базы данных, используя библиотеку ndbm(3). Sendmail должен быть скомпилирован с определенной NDBM.
    btree Просмотр базы данных с использованием интерфейса btree к библиотеке Berkeley db(3). Sendmail должен быть скомпилирован с определенной NEWDB.
    hash Просмотр базы данных с использованием хэш-интерфейса к библиотеке Berkeley db(3). Sendmail должен быть скомпилирован с определенной NEWDB.
    nis Просмотры NIS. Sendmail должен быть скомпилирован с определенной опцией NIS.
    nisplus Просмотры NIS+. Sendmail должен быть скомпилирован с определенной опцией NISPLUS. Аргумент - имя таблицы, используемой для просмотров, а флаги -k и -v могут быть использованы для установки столбцов ключа и значения соответственно.
    hesiod Просмотры Hesiod. Sendmail должен быть скомпилирован с определенной опцией HESIOD.
    ldapx Просмотры каталогов LDAP X500. Sendmail должен быть скомпилирован с определенной опцией LDAPMAP. Преобразование поддерживает большинство стандартных аргументов и большинство аргументов командной строки программы ldapsearch.
    netinfo Просмотры NeXT NetInfo. Sendmail должен быть скомпилирован с определенной опцией NETINFO.
    text Просмотры текстовых файлов. Формат текстового файла определяется флагами -k (число ключевых полей), -v (число поля значений), и -z (разделитель полей).
    stab Просмотры внутренней таблицы символов. Используется внутри для псевдонимизирования.
    implicit По-настоящему должно бы называться "alias" - используется для просмотра файлов псевдонимов по умолчанию, и используется по умолчанию, если не определен класс для файлов псевдонимов.
    user Просматривает пользователей, используя getpwnam(3). Для указания имени возвращаемого поля может быть использован флаг -v (хотя обычно используется только для проверки существования пользователя).
    host Канонифицирует доменные имена хостов. Получив имя хоста, вызывает сервер имен для поиска канонического имени для этого хоста.
    bestmx Возвращает лучшую запись MX для заданного в качестве ключа имени хоста. Всегда предпочитается текущая машина- то есть, текущая машина является одним из хостов, перечисленных в качестве записи MX с самым низким значением предпочтения, следовательно, имеется гарантия его возврата. Это может использоваться для определения, является ли эта машина целью записи MX, и почта может быть принята на этом основании. Если задан флаг -z, то возвращаются все имена MX, разделенные заданным разделителем.
    sequence Аргументы в строке "K" - список преобразований; результирующее преобразование просматривает аргументы-преобразования, пока не найдет совпадение для указанного ключа. Например, если определение ключа: Kmap1 ... Kmap2 ... Kseqmap sequence map1 map2тогда просмотр "seqmap" сначала производится в map1. Если найдено, то происходит немедленный возврат. Иначе, тот же ключ используется для map2.
    switch Прямо как преобразование "sequence", за исключением того, что порядок преобразований определяется сервисным переключателем. Аргумент - имя сервиса для просмотра; значения из сервисного переключателя добавляются к имени преобразования для создания новых имен преобразований. Например, рассмотрим определение ключа: Kali switch aliasesвместе с вхождением сервисного переключателя: aliases nis files
    Это вызовет запрос по преобразованию "ali" для поиска преобразований с именами "ali.nis" и "ali.files" в этом порядке.
    dequote Обрезает у имени двойные кавычки ("). Не обрезает обратные слеши, и не будет обрезать кавычки, если результирующая строка будет содержать не возможный для просмотра синтаксис (то есть, основные ошибки типа незакрытых угловых скобок; более сложные ошибки типа неизвестных хостов не проверяются). Предназначается для приема почты из систем типа DECnet, квотирующих странный синтаксис типа "49ers::ubell"Обычное использование - что-то типа: Kdequote dequote ... R$- $: $(dequote $1 $) R$- $+ $: $>3 $1 $2Для предотвращения неожиданных результатов необходима осторожность; например, "|someprogram < input > output"потеряет свои кавычки, но результат, скорее всего, будет отличаться от ожидаемого. К счастью, такие случаи достаточно редки.
    Regex Определение преобразования в строке K содержит регулярное выражение. Любой ключевой ввод сравнивается с этим выражением, используя программы регулярных выражений стандарта POSIX regcomp(), regerr(), и regexec(). Если вам нужно узнать больше информации о сравнении регулярных выражений, смотрите документацию на эти программы. Если не определен флаг -m не производится никакой перезаписи ключа. Без него, если ключ отвергнут или использован -s, то он замещается подходящими подстроками,разделенными $| или строкой, определенной флагом -d. Флаги, имеющиеся в преобразовании:
  • n не

  • f чувствительность к регистру

  • b основные регулярные выражения (по умолчанию развернуто)

  • s совпадение подстроки

  • d устанавливает разделитель, используемый для -s

  • a добавить строку к ключу

  • m только проверка совпадения, не принимать/отказывать значение

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


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

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

    при присутствии флага -A будет считаться за одно вхождение list: user1, user2, user3
    <


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

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

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

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

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

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

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

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

    При любом из этих совпадений, они назначаются символу $n для замены в правосторонней части, где n - индекс в LHS. Например, если LHS: $-:$+
    применена к входу: UCBARPA:eric
    Правило совпадет, и значения переданные в RHS будут такими: $1 UCBARPA $2 eric
    Дополнительно, LHS может включать $@ для совпадения нулевыми лексемами. Это не граница $n в RHS, и обычно используется только в одиночестве, чтобы соответствовать нулевому входу.

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

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

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

    В этой строке определяются почтовые программы и их интерфейсы. Формат такой: Mname, {field=value}*
    Где name - имя почтовой программы (используется только внутренне), а пары "field=name" определяют атрибуты почтовой программы. Поля такие:

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

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

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


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

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

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

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

    Почтовая программа, называющаяся "local" должна быть определена в каждом файле конфигурации. Она используется для доставки локальной почты, и обслуживается особо несколькими образами. В добавок, три другие почтовые программы, называющиеся "prog", "*file*", и "*include*" могут быть определены для настройки доставки сообщений в программы, файлы и списки :include: соответственно. Их умолчания: Mprog, P=/bin/sh, F=lsD, A=sh -c $u M*file*, P=/dev/null, F=lsDFMPEu, A=FILE M*include*, P=/dev/null, F=su, A=INCLUDE

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


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

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

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

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

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

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

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


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

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

    DialDelay=sleeptime [нет короткого имени] Сетевые соединения Dial-on-demand могут видеть таймауты, если соединение открылось до установки звонка. Если этой опцией установлен интервал времени, а время соединения истекает во время первой попытки соединения, sendmail заснет на это время и попробует снова. Это должно дать вашей системе время для установки соединения с вашим поставщиком услуг. По умолчанию измеряется в секундах, поэтому "DialDelay=5" использует пятисекундную задержку. По умолчанию ноль (без повторной передачи).
    DontBlameSendmail=option,option,... [нет короткого имени] Во избежание возможных попыток взлома, основанных на открытых на запись для группы и всех остальных пользователей файлах и каталогах, sendmail производит параноидальную проверкупри открытии большинства из используемых им файлов. Если, по некоторой причине, вам просто необходимо иметь каталог /etc открытым на запись для группы, то вам нужно отключить эту проверку (за счет снижения уровня безопасности вашей системы и большей ее уязвимости). Аргументами являются отдельные опции, отключающие проверку: Safe

    AssumeSafeChown

    ClassFileInUnsafeDirPath

    ErrorHeaderInUnsafeDirPath

    FileDeliveryToHardLink

    FileDeliveryToSymLink

    ForwardFileInUnsafeDirPath

    ForwardFileInUnsafeDirPathSafe

    ForwardFileIngroupWritableDirPath

    GroupWritableAliasFile

    GroupWritableDirPathSafe

    GroupWritableForwardFileSafe

    GroupWritableIncludeFileSafe

    HelpFileinUnsafeDirPath

    IncludeFileInUnsafeDirPath

    IncludeFileInUnsafeDirPathSafe

    IncludeFileIngroupWritableDirPath

    LinkedAliasFileInWritableDir

    LinkedClassFileInWritableDir

    LinkedForwardFileInWritableDir

    LinkedIncludeFileInWritableDir

    LinkedMapInWritableDir

    LinkedServiceSwitchFileInWritableDir

    MapInUnsafeDirPath

    RunProgramInUnsafeDirPath

    RunWritableProgram

    WorldWritableAliasFile

    WriteMapToHardLink

    WriteMapToSymLink

    WriteStatsToHardLink

    WriteStatsToSymLink

    Safe - это умолчание. Выше имеется более подробное описание этих флагов. Использование этой опции не рекомендуется.
    DontExpandCnames [нет короткого имени] Стандарты говорят, что адреса хостов, используемые в почтовом сообщении должны быть полностью каноническими. Например, если ваш хост имеет имя "Cruft.Foo.ORG", а также имеет псевдоним "FTP.Foo.ORG", всегда должно использоваться первое имя. Это навязывается во время канонификации имени хоста (просмотрах $[ ... $]). Если эта опция выставлена, протоколы игнорируются, и делаются "неправильные" вещи. Однако, IETF потихоньку продвигается к изменению этого стандарта, поэтому такое поведение может стать приемлемым. Но заметьте, что последующие передающие хосты все еще могут переписать адрес в настоящее каноническое имя.
    DontInitGroups [нет короткого имени] Если установлена, sendmail будет избегать вызова initgroups(3).Если у вас работает NIS, это вызовет последовательный просмотр карты groups.byname, что может сильно перегрузить ваш сервер NIS в большом домене. Это даст то, что если только группа найденная для пользователей будет их главной группой, что сделает доступ к файлам несколько более ограниченным. Не имеет никакого эффекта, если система не имеет списков групп.
    DontProbeInterfaces [нет короткого имени] Sendmail при запуске обычно находит имена для всех активных (на вашей машине) интерфейсов и добавляет их имена в класс известных псевдонимов хоста $=w. Если у вас большое количество виртуальных интерфейсов, или если обратный просмотр вашего DNS медленный, то это может занять некоторое время. Эта опция отключает такой просмотр. Однако, вы должны быть уверены, что вы включили все варианты имен в класс $=w с помощью любого другого механизма.
    DontPruneRoutes [R] Обычно, sendmail пытается избежать любые ненужные явные маршруты при посылке сообщения об ошибке (как обсуждено в секции 5.2.6 RFC 1123). Например, при посылке сообщения об ошибке <@known1,@known2,@known3:user@unknown> sendmail обрежет "@known1,@known2" для того, чтобы сделать маршрут как можно более прямым. Однако, если выставлена опция R, это будет отключено, и почта будет послана по первому адресу в маршруте, даже если остальные адреса известны. Это может быть полезно, если вы заперты за файерволом.
    DoubleBounceAddress=error-address [нет короткого имени] Если при посылке сообщения об ошибке происходит ошибка, послать отчет об ошибке по указанному адресу. Если не назначено, то по умолчанию это "postmaster".
    EightBitMode= действие [8] Установить обработку восьмибитных данных. Существует два вида восьмибитных данных: объявленные как таковые использованием ESMTP объявления BODY=8BITMIME или флагом командной строки -B8BITMIME, и необъявленные 8-битные данные, то есть, так уж произошло, что они являются восьмибитными. Существует три основные операции, которые можно произвести: необъявленные 8-битные данные могут быть автоматически преобразованы в 8BITMIME, необъявленные 8-битные данные могут быть пропущены как есть, без преобразования в MIME ("просто послать 8"), и объявленные 8-битные данные могут бытьпреобразованы в 7-битные 7-bit для передачи в не-8BITMIME почтовую программу. Возможные действия:
    <


    sОтвергнуть необъявленные 8-битные данные ("strict")
    mПреобразовать необъявленные 8-битные данные в MIME ("mime")
    pПропустить необъявленные 8-битные данные ("pass")
    Во всех случаях соответствующе объявленные 8BITMIME данные при необходимости будут преобразованы в 7BIT.

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


    public Позволить открытый доступ
    needmailhelo Требовать команду HELO или EHLO до MAIL
    needexpnhelo Требовать команду HELO или EHLO до EXPN
    noexpn Полностью запретить EXPN
    needvrfyhelo Требовать команду HELO или EHLO до VRFY
    novrfy Полностью запретить VRFY
    noetrn Полностью запретить ETRN
    noverb Полностью запретить VERB
    restrictmailq Ограничить команду mailq
    restrictqrun Ограничить флаг командной строки -q
    noreceipts Не возвращать успешные DSN
    goaway Запретить все основные запросы статуса SMTP
    authwarnings Вкладывать в сообщение заголовок X-Authentication-Warning:

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

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

    Значения для поля "Precedence:" могут быть определены использованием контрольной строки P. Синтаксис этого поля: Pимя=число
    Когда имя найдено в поле "Precedence:" класс сообщения выставляется в число. Более высокие числа означают более высокое старшинство. Числа менее нуля имеют специальное назначение - если происходит ошибка во время обработки сообщения, его тело не будет возвращено; это предназначается для "большой" почты, типа проходящей через списки рассылки. По умолчанию старшинство равно нулю. Например, наш список старшинств состоит из: Pfirst-class=0 Pspecial-delivery=100 Plist=-30 Pbulk=-60 Pjunk=-100
    Использование людьми, пишущие обработчики списков рассылки "Precedence: list" очень приветствуется. Старые версии sendmail (которые отвергали все возвраты ошибок из-за отрицательного старшинства) не распознают это имя, давая ему нулевое старшинство по умолчанию. Это позволяет владельцам списков рассылки видеть возвраты ошибок и в старых, и в новых версиях sendmail.

    Почтовые Программы 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: это должно использоваться только в случае, если у вас для этого имеется серьезная причина.

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

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

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

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

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

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

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

    Ядром синтаксического анализа адресов являются правила перезаписи. Они являются упорядоченной системой обработки. Sendmail просматривает набор правил перезаписи, ища совпадения в левосторонней части (LHS) правила. Если правило подходит, адрес замещается правосторонней частью (RHS) правила.
    Имеется несколько наборов правил перезаписи. Некоторые из наборов используются внутренне, и должны иметь специфическую семантику. Другие наборы не имеют специальной семантики, и могут быть использованы определениями почтовых программ или другими наборами перезаписи.
    Синтаксис этих двух команд такой: Sn
    Устанавливает текущий набор правил в n. Если вы начинаете набор не в первый раз, это добавляет к старому определению. Rlhs rhs comments
    Поля должны быть разделены как минимум одним символом табуляции; поля могут содержать пробелы. lhs - это шаблон, применяемый на входе. Если он подходит, вывод переписывается на rhs. Комментарии игнорируются.
    Макрорасширения в виде $x выполняются при чтении файла конфигурации. Расширения вида $&x выполняются во время работы, используя какой-либо менее общий алгоритм. Это предназначено только для ссылочных внутренне определенных макросов, типа $h, изменяющихся во время работы.

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

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

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

    Когда правила перезаписи передают адрес в локальную почтовую программу, имя пользователя пропускается через файл псевдонимов. Если не найдено ни одного псевдонима (или псевдоним указывает обратно на этот адрес), имя (с добавленным ":maildrop") используется как ключ в пользовательской базе данных. Если не найдено ни одного совпадения (или если maildrop указывает на тот же адрес), пробуется пересылка.
    Если первая лексема имени пользователя возвращаемая набором правил - знак "@", просмотр пользовательской базы данных пропускается. Смысл этого в том, чтобы пользовательская база данных представляла собой набор умолчаний для группы (в нашем случае, Computer Science Division); почта, посылаемая на определенную машину должна игнорировать эти умолчания.
    При отправке почты, имя отправителя просматривается в базе данных. Если этот пользователь имеет запись "mailname", значение этой записи используется как его выходящее имя. Например, я могу иметь запись: eric:mailname Eric.Allman@CS.Berkeley.EDU
    Это приведет к тому, что посланная мной почта будет исходить от Eric.Allman.
    Если для пользователя найдена запись "maildrop", но не существует ни одной соответствующей записи "mailname", производится проверка записи ":default:mailname". Если она существует, то это имя считается именем хоста, подставляемого вместо локального хоста. Например, в нашем случае, мы можем установить его в "CS.Berkeley.EDU". в результате, все, кто известен в базе данных будет отправлять почту со штампом "user@CS.Berkeley.EDU", а те, кто в ней не перечислен будут использовать локальное имя хоста.

    Пользовательская база данных строится из

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

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

    Затем создайте файл конфигурации использующий это. Например, используя V8 M4 конфигурацию, включите в ваш файл .mc строку: define(`confUSERDB_SPEC', /etc/userdb.db)

  • На самом деле, это полностью эквивалентно $(host hostname$). В частности, может быть использовано умолчание $:. [назад]


  • Вы можете захотеть использовать это для специальных "пользовательских" расширений. Например, в адресе "jgm+foo@CMU.EDU"; часть "+foo" - это не часть имени пользователя, и передается в локальную почтовую программу для местного использования. [назад]


  • С версии 8.6, все эти макросы имеют разумные умолчания. Предыдущие версии требовали, чтобы они были определены. [назад]


  • Например, в некоторых системах gethostname может возвратить "foo", которое будет преобразовано в "foo.bar.com" посредством gethostbyname. [назад]


  • Старые версии sendmail не предопределяли $j вообще, так что, вплоть до 8.6, файлы конфигурации должны были определять $j. [назад]


  • Старая опция g была комбинирована в опцию DefaultUser. [назад]


  • При запуске в качестве демона, переходит к этому пользователюпосле принятия соединения, но до прочтения любой команды SMTP. [назад]


  • И конечно, поставщики поощряются при включении самих себя в список распознаваемых поставщиков изменением подпрограммы setvendor в conf.c. Для регистрации вашей разновидности пошлите письмо sendmail@Sendmail.ORG. [назад]


  • То есть, не создавайте новые преобразования и не кладите их командой mv(1) на место. Так как преобразования уже открыты, новые преобразования никогда не будут увидены. [назад]


  • Известно, что эти инструкции не полны. Планируется, что будущая версия пользовательской базы данных будет включать вещи типа сервиса finger - и хорошую документацию. [назад]


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

    База данных является сортированной (основанной на 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, использующая остальные поля.

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

    Заметь!: эти уровни версий не имеют ничего общего с номерами версий в файлах. Например, при написании файлов конфигурации версии 8 (в особенности, 8.7) использовались конфигурации уровня 6.
    "Старые" файлы конфигурации определяются как уровень версии один. Фаулы уровня версии два делают следующие изменения:
  • Канонификация имени хоста ($[ ... $]) добавляет точку, если имя распознано; это дает файлу конфигурации способ определить, совпало ли что-нибудь. (На самом деле, это просто инициализирует преобразование хоста с флагом "-a." - вы можете переустановить это на что угодно явным объявлением преобразования.)

  • Расширение имени хоста по умолчанию постоянно при всех обработках; конфигурации версий уровня один в некоторых местах обработки выключали доменное расширение (то есть, добавляя имя локального домена). Конфигурации версий уровня два по идее включают последнюю точку для указания того, что это уже каноническое имя.

  • Локальные имена, не являющиеся псевдонимами проходят через новое выделяющее правило пять; оно может быть использовано для добавления локального ретранслятора. Такое поведение может быть предотвращено посредством разрешения локального имени с начальным "@". То есть, допустим, то, что разрешается на локальную почтовую программу и имя пользователя "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.

    Другая Конфигурация

    Другая Конфигурация

    При перекомпилировании sendmail можно сделать некоторые изменения конфигурации. Этот раздел описывает, какие изменения могут быть сделаны, и что для этого нужно сделать. Во многих случаях это не должно быть необходимым, пока вы не начнете переносить sendmail в новую среду.

    Функция Организации Очереди

    Для определения того, должно ли быть сообщение поставлено в очередь, или обработано немедленно, используется подпрограмма shouldqueue. Обычно она сравнивает приоритет сообщения с текущей средней загрузкой. Определение по умолчанию таково: bool shouldqueue(pri, ctime) long pri; time_t ctime; { if (CurrentLA < QueueLA) return (FALSE); return (pri > (QueueFactor / (CurrentLA - QueueLA + 1))); }
    Если текущая средняя загрузка (глобальная переменная CurrentLA, определяемая до вызова функции) меньше, чем нижний порог средней загрузки (опция x, переменная QueueLA), shouldqueue немедленно возвращает FALSE (то есть, оно не должно быть поставлено в очередь). Если текущая средняя загрузка превышает верхний порог средней загрузки (опция X, переменная RefuseLA), shouldqueue немедленно возвращает TRUE. В других случаях, она подсчитывает функцию основанную на приоритете сообщения, коэффициенте очереди (опция q, глобальная переменная QueueFactor), и текущей и пороговой средней загрузке.
    Реализация, которая берет в рассмотрение настоящий возраст сообщения, может также использовать параметр ctime, который является временем первого представления сообщения в sendmail. Заметьте, что параметр pri уже учтен в количестве попыток отсылки сообщения (хотя, со временем это приводит к понижению приоритета сообщения); в ожидании того, что ctime будет использован как "оператор выхода" для гарантии того, что сообщение, в конце концов, обработано.

    Классы Преобразований Новой Базы Данных

    Новые ключевые преобразования могут быть добавлены созданием функции инициализации класса и функции просмотра. Они потом добавляются в подпрограмму setupmaps.
    Функция инициализации вызывается так: xxx map init(MAP *map, char *args)
    где map является внутренней структурой данных; args - это указатель на кусок строки файла конфигурации с последующим именем класса преобразования; флаги и имена файлов могут быть взяты из этой строки. Функция инициализации должна возвращать TRUE, если она успешно открыла преобразование, и FALSE в другом случае.
    Функция просмотра вызывается так: xxx map lookup(MAP *map, char buf[], char **av, int *statp)
    где map внутренне определяет преобразование; buf имеетв входной ключ; Он может быть (и даже очень часто так оно и есть) использован разрушающе; av - список аргументов, передаваемых внутрь из переписываемой строки. Функция просмотра должна возвращать указатель на новое значение. Если просмотр преобразования не успешен, *statp должен быть выставлен на код статуса выхода; в частности, если была произведена попытка восстановления кодом более высокого уровня, он должен быть выставлен в EX_TEMPFAIL,.

    Конфигурация в src/daemon.c

    Файл src/daemon.c содержит большое количество подпрограмм, зависящих от локальной сетевой среды. Поставляемая версия подразумевает, что вы имеете сокеты в стиле BSD.
    В предыдущих выпусках, если вы хотели обобщить просмотры $[ ... $], мы рекомендовали вам изменить подпрограмму maphostname. Теперь, вместо этого, мы рекомендуем вам создавать новое ключевое преобразование.
  • На самом деле, в SMTP такого больше нет; эта информация содержится на конверте. Старые протоколы ARPANET не полностью отличали заголовок от конверта.

  • Если вы это сделаете, пожалуйста, присылайте изменения по адресу sendmail@Sendmail.ORG.



  • Ограничение использования Email

    Если существует необходимость ограничить прохождение почты через ретранслятор (relay), может быть изменена подпрограмма checkcompat. Эта подпрограмма вызывается для каждого адреса получателя. Она возвращает статус выхода, показывающий статус сообщения. Статус EX_OK принимает адрес, EX_TEMPFAIL ставит сообщение в очередь для более поздней попытки, а другие значения (обычно EX_UNAVAILABLE) отвергают сообщение. При отвержении сообщения checkcompat выдается сообщение об ошибке (используя usrerr). Например, checkcompat может быть такой: int checkcompat(to, e) register ADDRESS *to; register ENVELOPE *e; { register STAB *s; s = stab("private", ST_MAILER, ST_FIND); if (s != NULL && e->e_from.q_mailer != LocalMailer && to->q_mailer == s->s_mailer) { usrerr("No private net mail allowed through this machine"); return (EX_UNAVAILABLE); } if (MsgSize > 50000 && bitnset(M_LOCALMAILER, to->q_mailer)) { usrerr("Message too large for non-local delivery"); e->e_flags |= EF_NORETURN; return (EX_UNAVAILABLE); } return (EX_OK); }
    Такая конструкция будет отвергать сообщения размером более 50000 байт, если они не локальны. Для подавления возврата тела сообщения при ошибке, в e->e flags может быть выставлен флаг EF NORETURN. Конкретное использование этой подпрограммы очень зависит от реализации, и должно быть ограниченным.

    Отвержение Входящих Соединений SMTP

    Если входящее соединение SMTP должно быть отвергнуто, функция refuseconnections возвращает TRUE. Текущая реализация основана исключительно на текущей средней загрузке и опции средней загрузки отказа (опция X, глобальная переменная RefuseLA): bool refuseconnections() { return (CurrentLA >= RefuseLA); }
    Более умная реализация должна смотреть на большее количество системных ресурсов.

    Параметры в BuildTools/OS/$oscf

    Эти параметры предназначены для описания среды компиляции, а не правил узла, и обычно должны быть определены в конфигурационном файле для данной операционной системы. Вообще-то этот раздел нужно полностью переписать.

    NDBM Если установлен, то будет использоваться новая версия библиотеки DBM, разрешающая разнообразные базы данных. Если не установлено ни NDBM, ни NEWDB, используется наименее эффективный метод просмотра псевдонимов.
    NEWDB Если он указан, использовать новый пакет баз данных от Berkeley (с 4.4BSD). Этот пакет существенно быстрее, чем DBM или NDBM. Если указаны и NEWDB и NDBM, sendmail будет читать файлы DBM, но будет создавать и использовать файлы NEWDB.
    NIS Включить поддержку NIS. Если указанно вместе с NEWDB и NDBM, sendmail будет создавать и DBM и NEWDB файлы только в том случае, если файл псевдонимов включает подстроку "/yp/" в имени. Это предназначено для совместимости с программой mkalias от Sun Microsystems, используемой на мастерах YP.
    NISPLUS Вкомпилировать поддержку NIS+.
    NETINFO Вкомпилировать поддержку NetInfo (рабочие станции NeXT).
    LDAPMAP Вкомпилировать поддержку запросов LDAP X500. Требует libldap и liblber от Umich LDAP 3.2 или 3.3 release.
    HESIOD Вкомпилировать поддержку Hesiod.
    _PATH_SENDMAILCF Путь к файлу sendmail.cf.
    _PATH_SENDMAILPID Путь к файлу sendmail.pid.

    Есть также несколько флагов компиляции для указания среды, например "_AIX3" и "_SCO_unix_". Смотри файл src/READ_ME, содержащий самое свежее описание собрание этих флагов.

    Параметры в src/conf.h

    Параметры и опции компиляции определяются в conf.h. Большинство из них обычно не трогают; все общие параметры находятся в sendmail.cf. Однако, размеры конкретных простейших векторов и т.д., включены в этот файл. Числа, стоящие после параметров означают их значения по умолчанию.
    Этот документ не лучший источник информации о флагах компиляции в conf.h - лучше смотреть src/READ_ME или сам src/conf.h.

    MAXLINE [2048] Максимальная длина строки любой входной строки. Если строки в сообщении превышают эту длину, они все равно будут корректно обработаны; однако, строки заголовков, строки файла конфигурации, строки файла псевдонимов и т.д., должны находиться в пределах этого ограничения.
    MAXNAME [256] Максимальная длина любого имени, например имени хоста или пользователя.
    MAXPV [40] Максимальное количество параметров для любой почтовой программы. Ограничивает количество получателей, передаваемых за одну транзакцию, и может быть равно любому произвольному числу больше 10, так что sendmail при необходимости будет разбивать доставку на более мелкие пакеты. Большие числа могут уменьшить загрузку вашей системы.
    MAXATOM [100] Максимальное количество атомов (лексем) в одном адресе. Например, адрес "eric@CS.Berkeley.EDU" содержит семь атомов.
    MAXMAILERS [25] Максимальное количество почтовых программ, определяемых в файле конфигурации.
    MAXRWSETS [200] Максимальное количество определяемых наборов правил перезаписи. Первая половина из них зарезервирована для числовой нумерации (например, "S92"), в то время как вторая половина зарезервирована для своей нумерации (например, "Sfoo"). Таким образом, при указании значения 200 попытка использовать "S99" будет успешной, а "S100" - нет.
    MAXPRIORITIES [25] Максимальное количество определяемых значений для поля "Precedence:" (используя строку P в sendmail.cf).
    MAXUSERENVIRON [100] Максимальное количество переменных окружения пользователя, передаваемых в подчиненные почтовые программы.


    MAXMXHOSTS [100] Максимальное количество принимаемых записей MX для любого одиночного хоста. MAXALIASDB [12] Максимальное количество открываемых баз данных псевдонимов. Заметьте, что также может быть ограничение на количество открытых файлов. MAXMAPSTACK [12] Максимальное количество преобразований, "кучкуемых" в преобразовании класса sequence. MAXMIMEARGS [20] Максимальное количество аргументов в заголовке MIME Content-Type:; дополнительные аргументы будут игнорированы. MAXMIMENESTING [20] Максимальная глубина вложения сообщений MIME (то есть, вложенных документов Message или Multipart; это не ограничивает количество компонент в отдельном документе Multipart).
    Существует множество других опций компиляции. Они определяют включать или нет в компиляцию определенные части кода. Отмеченные знаком | имеют значения 0/1.

    NETINET| Если установлена, вкомпилируется поддержка сетевого протокола Internet. Предыдущие версии sendmail устанавливали ее опцией DAEMON; это старое использование теперь неправильно. По умолчанию включена; выключите ее, если ваша система не поддерживает протоколы Internet.
    NETISO| Если установлена, вкомпилируется поддержка сетевого протокола ISO (она может быть соответственно определена как #define в Makefile вместо conf.h).
    LOG Если установлена, то используется программа syslog. Она делает информационные записи в протокол при каждой обработке сообщения, и делает запись в лог более высокого приоритета при внутренних ошибках системы. ОЧЕНЬ РЕКОМЕНДУЕТСЯ - если вам не нужно протоколирование, выключите его в файле конфигурации.
    MATCHGECOS| Вкомпилировать код для "нечеткого совпадения " в поле GECOSв /etc/passwd. Также требует, чтобы опция MatchGECOS была включена.
    NAMED_BIND| Вкомпилировать код для использования сервера Berkeley Internet Name Domain (BIND) для определения TCP/IP имен хостов.
    NOTUNIX Если вы используете почтовый формат, отличный от UNIX, вы можете выставить этот флаг, чтобы отключить специальную обработку строк "From" в стиле UNIX.
    QUEUE| Этот флаг должен быть выставлен для включения кода очереди. Если он не установлен, почтовые программы должны принимать почту немедленно, или она будет возвращена отправителю.
    SMTP| Если установлен, то будет вкомпилирован код для обработки пользовательского и серверного SMTP. Необходим только в случае, если ваша машина имеет почтовые программы, говорящие на SMTP (то есть большинство машин).
    USERDB| Включить экспериментальный пакет Berkeley user Information database. Это добавит новый уровень расширения локальных имен между псевдонимизированием и перенаправлением. Использует пакет NEWDB. Может быть изменено в будущих выпусках.
    <


    Следующие опции обычно включаются в описаниях операционных систем в conf.h.

    IDENTPROTO| Вкомпилировать протокол IDENT определенный в RFC 1413. По умолчанию включена для всех систем, кроме Ultrix, которая, видимо, имеет такую интересную "особенность", что при получении сообщения "host unreachable", она закрывает все открытые соединения к тому хосту. Из-за того, что некоторые файервольные шлюзы посылают этот код ошибки при соединении с неавторизованным портом (типа 113, используемого IDENT), Ultrix не может получать email с таких хостов.
    SYSTEM5 Устанавливает все параметры компиляции, подходящие для System V.
    HASFLOCK| Использовать для блокировки Berkeley-style flock вместо SystemV lockf. Вследствие очень необычной семантики блокировок между разветвлениями в lockf, эта опция, по возможности, всегда должна быть использована.
    HASINITGROUPS Выставьте эту опцию, если ваша система имеет вызов initgroups()(если вы имеете поддержку множественных групп). Используется по умолчанию, если не определена SYSTEM5, или если у вас HPUX.
    HASUNAME Установите ее, если у ваша система имеет системный вызов uname(2) (или соответствующую библиотечную подпрограмму). Используется по умолчанию, если определена SYSTEM5.
    HASGETDTABLESIZE Установите ее, если вы имеете системный вызов getdtablesize(2).
    HASWAITPID Установите ее, если вы имеете системный вызов haswaitpid(2).
    SFS_TYPE Механизм, который может быть использован для получения информации об объеме файловой системы. Значение может быть одним из SFS_USTAT (использует системный вызов ustat(2)), SFS_4ARGS (использует системный вызов statfs(2) с четырьмя аргументами), SFS_VFS (использует системный вызов statfs(2) с двумя аргументами, включая ), SFS_MOUNT (использует системный вызов statfs(2) с двумя аргументами, включая ), SFS_STATFS (использует системный вызов statfs(2) с двумя аргументами, включая ), SFS_STATVFS (использует системный вызов statfs(2) с двумя аргументами, включая ), или SFS_NONE (никаким образом нельзя получить эту информацию).
    LA_TYPE Тип средней загрузки. Подробности описаны ниже.
    <


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

    LA_INT Ядро хранит среднюю загрузку в ядре как целые числа типа long. Настоящие значения масштабируются коэффициентом FSCALE (по умолчанию 256).
    LA_SHORT Ядро хранит среднюю загрузку в ядре как целые числа типа short. Настоящие значения масштабируются коэффициентом FSCALE (по умолчанию 256).
    LA_FLOAT Ядро хранит среднюю загрузку в ядре как массив чисел с плавающей точкой двойной точности.
    LA_MACH Использовать средние загрузки в стиле MACH.
    LA_SUBR Вызывать программу getloadavg для получения средних загрузок в виде массива чисел типа double.
    LA_ZERO Всегда в качестве средней загрузки возвращать ноль. Это крайний случай.

    Если определен тип LA_INT, LA_SHORT, или LA_FLOAT, вам также может понадобиться определить _PATH_UNIX (путь к вашим системным бинарникам) и LA_AVENRUN (имя переменной, содержащей среднюю загрузку в ядре; обычно "_avenrun" или "avenrun").

    Подсчет Средней Загрузки

    Подпрограмма getla возвращает значение текущей средней загрузки (Округленное до целого). Пакет поставки включает несколько возможных реализаций. Если вы портируете в новую среду, вам может понадобиться добавить некотрые новые вещи .

    Встроенные Семантики Заголовков

    Не все семантики заголовков определяются в файле конфигурации. Строки заголовков, которые могут быть включены только определенными почтовыми программами (так же как и другие более скрытые семантики) могут быть определены в таблице HdrInfo в conf.c. Эта таблица содержит имя заголовка (которое должно быть в символах нижнего регистра) и набор управляющих флагов заголовка (описанных ниже). Флаги таковы:

    H_ACHECK Обычно, когда сделана проверка совместимости строки заголовка с почтовой программой, sendmail не удаляет существующую строку. Если этот флаг выставлен, sendmail будет удалять существующие строки заголовка. То есть, если этот бит выставлен, и почтовая программа не имеет установленные биты флагов, пересекающиеся с требуемыми почтовой программой флагами в определении заголовка в sendmail.cf, строка заголовка всегда уничтожается.
    H_EOH Если установлено это поле заголовка, обращаться с ним, как с пустой строкой, т.е. оно сигнализирует о конце заголовка и начале текста сообщения
    H_FORCE Добавить это вхождение в заголовок, даже если в сообщении такое уже было. Если вхождение заголовка не имеет этот бит выставленным, sendmail не добавит в заголовок еще одну строку, если строка с таким именем уже имеется в заголовке. Это обычно может быть использовано для того, чтобы каждый, кто обрабатывал это сообщение, оставлял в нем отметку.
    H_TRACE Если этот флаг установлен, то это поле временной метки (трассировки). Если количество полей трассировки в сообщении превышает предустановленное значение, сообщение возвращается по подозрению в псевдонимной петле.
    H_RCPT Если выставлен, то это поле содержит адреса получателей. Это поле используется флагом -t, когда он собирает получателей из сообщения, чтобы определить, кому посылать.
    H_FROM Этот флаг указывает, что это поле определяет отправителя. Порядок этих полей в таблице HdrInfo определяет предпочтение sendmail, по какому полю отправлять сообщения об ошибке.
    H_ERRORSTO Адреса в этом заголовке должны получить сообщения об ошибке.
    H_CTE Этот заголовок является заголовком Content-Transfer-Encoding.
    H_CTYPE Этот заголовок является заголовком Content-Type.
    H_STRIPVAL Обрезать значение из заголовка (для Bcc:).
    <


    Давайте взглянем на пример спецификации HdrInfo: struct hdrinfo HdrInfo[] = { /* originator fields, most to least significant */ "resent-sender", H_FROM, "resent-from", H_FROM, "sender", H_FROM, "from", H_FROM, "full-name", H_ACHECK, "errors-to", H_FROM|H_ERRORSTO, /* destination fields */ "to", H_RCPT, "resent-to", H_RCPT, "cc", H_RCPT, "bcc", H_RCPT|H_STRIPVAL, /* message identification and control */ "message", H_EOH, "text", H_EOH, /* trace fields */ "received", H_TRACE|H_FORCE, /* miscellaneous fields */ "content-transfer-encoding", H_CTE, "content-type", H_CTYPE, NULL, 0, };

    Эта структура показывает, что поля "To:", "ResentTo:", и "Cc:" - все они определяют адреса получателей. Любое поле "Full-Name:" будет удалено, пока требуемый флаг почтовой программы (указанный в файле конфигурации) не будет определен. Поля "Message:" и "Text:" будут заканчивать заголовок; они используются различными несогласными протестантами в сетевом мире. Поле "Received:" всегда будет добавлено, и может быть использовано для трассировки сообщений.

    Здесь имеется большое количество важных точек. Во-первых, поля заголовка не добавляются автоматически просто потому, что они имеются в структуре HdrInfo; для того, чтобы они добавлялись в сообщение, они должны быть определены в файле конфигурации. Ко всем полям, упомянутым в файле конфигурации, но не упомянутым в структуре HdrInfo применяется обработка по умолчанию; то есть, они добавляются, если их еще нет в сообщении. Во-вторых, структура HdrInfo всего лишь определяет банальную обработку; конкретные заголовки обрабатываются отдельно, специальным кодом, вне зависимости от статуса, определенного в HdrInfo. Например, поля "Sender:" и "From:" всегда просматриваются в почте ARPANET для определения отправителя; это используется для выполнения функции "вернуть отправителю".Поля "From:" и "Full-Name:" используются для определения полного имени отправителя, если это возможно; оно сохраняется в макросе $x и используется во многих случаях.

    Изменения в Версии 8

    Автоматическое Квотирование Адреса

    Ранее, синтаксис "Полное Имя <адрес email >" мог выдавать некорректный протокольный вывод, если "Полное Имя" имело специальные символы типа точки. Эта версия проставляет кавычки вокруг таких имен.

    Большие Умолчания

    Версия 8 имеет до 100 наборов правил вместо 30. Рекомендуется резервировать наборы правил 0-9 для специального использования в будущих выпусках sendmail'ов.
    Общее количество используемых записей MX может быть увеличено до 20.
    Количество сообщений в очереди, обрабатываемых за один раз было увеличено с 600 до 1000.

    Динамическое Выделение Заголовка

    Было убрано ограничение на фиксированный размер заголовка.

    Длинные Имена Опций

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

    Другие Параметры Настройки по Умолчанию

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

    Все нижеописанное суммирует изменения, произошедшие

    Все нижеописанное суммирует изменения, произошедшие в sendmailс последней общедоступной версии (5.67). Полный список изменений содержится в файле RELEASE_NOTES в корневом каталоге поставки sendmail.

    Кэширование Соединений

    Вместо немедленного закрытия соединений SMTP, эти соединений кэшируются для возможного нового использования. Появление записей MX делает кэширование эффективным для списков рассылки; вдобавок, в обработке очереди может быть реальное увеличение производительности.

    Ключевые Файлы

    Обобщенные ключевые файлы - это идея, взятая прямо из IDA sendmail(абсолютно отличной реализации). Они могут быть полезны на больших узлах. Версия 8 также понимает YP.

    Многословные Классы

    Классы теперь могут быть многословными. Например, CShofmann.CS.Berkeley.EDU
    Позволяет вам искать совпадения всей строки "hofmann.CS.Berkeley.EDU" используя одну единственную конструкцию "$=S".

    Новая Лексема LHS

    Версия 8 разрешает $@, в левосторонней части строки "R", соответствовать нулевым лексемам. Предназначено для совпадения с нулевым вводом.

    Новые флаги Командной Строки

    Был добавлен флаг -B для передачи информации о типе тела.
    Был добавлен флаг -p для передачи информации о протоколе.
    Для отладки был добавлен флаг -X для разрешения протоколирования всех входящих и выходящих из sendmailпротоколов.
    Флаг -O означает установку опций в длинном виде.

    Новые Флаги Почтовой Программы

    Было добавлено несколько новых флагов почтовых программ.
    a Попытаться при создании соединения использовать. Если эта опция не выставлена, sendmailвсе равно будет смотреть в приветственном сообщении другой стороны подсказку, известно ли там о ESMTP; этот флаг говорит, что нужно пробовать ESMTP, даже если в такой подсказки нет. Если команда EHLO (extended hello) не проходит, sendmailоткатывается к старому SMTP.
    A Пробовать пользовательскую часть адресов для этой почтовой программы как псевдонимы.
    b Обеспечить пустую строку в конце всех сообщений.
    c Обрезать все комментарии от адресов; это должно использоваться в крайнем случае, при работе с капризными почтовыми программами.
    g Никогда не использовать нулевого отправителя в качестве конвертного отправителя, даже при работе по SMTP. Это также нарушает RFC 1123, но может быть необходимым, когда вы должны иметь дело с некоторыми несносными старыми хостами.
    k Выключить проверку закольцовывания в протоколе HELO; если вы ее установите, то могут возникнуть петли почтовой программы.
    o Всегда запускать почтовую программу в качестве получателя сообщения.
    w Этот пользователь должен иметь вхождение в файле паролей.
    5 Если нет локальных псевдонимов, попробовать набор правил 5.
    7 Обрезать весь вывод до 7 бит.
    : Проверить на наличие файлов :include:.
    | Проверить на наличие адресов |program.
    / Проверить на наличие адресов /file.
    @ Проверить этого пользователя в пользовательской базе данных.


    Новые и Старые Типы Строк Конфигурации

    Была добавлена строка K для декларирования преобразований баз данных.
    Была добавлена строка V для декларирования уровня версии конфигурации.
    Строка M имеет поле "D=", позволяющее вам переходить во временный каталог, пока работает эта почтовая программа. Она также имеет поле "U=", разрешающее вам назначить идентификаторы пользователя и группы, используемые для запуска почтовой программы.

    Новые Опции

    Было добавлено несколько новых опций, большинство для поддержки новых свойств, остальные для настройки, которую ранее можно было сделать только перекомпилированием. Подробно они описаны в Разделе 5.6. Вкратце,
    b Утверждает минимальное количество дисковых блоков.
    C Выставляет интервал контрольных точек.
    E Сообщение об ошибке по умолчанию.
    G Включает совпадения GECOS.
    h Максимальное количество пересылок.
    j Посылать ошибки в скрытом формате MIME.
    J Путь к файлу пересылки.
    k Размер кэша соединений.
    K Время жизни кэша соединений.
    l Включить заголовок Errors-To:. Эти заголовки нарушают RFC 1123; эта опция включена для обратной совместимости со старыми версиями sendmail.
    O Устанавливает входные опции демона SMTP, типа альтернативного порта SMTP.
    p Опции конфиденциальности.
    R Не обрезать route-addrs.
    U Спецификация пользовательской базы данных.
    V Аварийный хост "MX".
    w Метод обработки "лучший MX".
    7 Не полностью восьмибитная работа.
    8 Восьмибитный режим обработки.


    Новые Предопределенные Макросы

    Предопределены следующие макросы:
    $k Имя узла UUCP, номинально из вызова uname(2).
    $m Доменная часть полного имени нашего хоста.
    $_ Адрес отправителя по RFC 1413.


    Поддержка ESMTP

    Версия 8 включает поддержку и приема, и передачи Extended SMTP, как определено в RFC 1651 (основы) и RFC 1653 (РАЗМЕР); и ограниченную поддержку RFC 1652 (ТЕЛО).

    Поддержка протокола IDENT

    Поддерживается определенный в RFC 1413 протокол IDENT.

    Полная Восьмибитность

    Предыдущие версии sendmailиспользуют бит 0200 для квотирования. Эта версия избегает такого использования. Хотя, для совместимости с RFC 822, вы можете установить опцию "7" для получения обрезки до семи бит.
    Индивидуальные почтовые программы все еще производить выдачу семибитных сообщений, используя флаг почтовой программы "7".

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

    Пользовательская база данных - это все еще экспериментальная попытка обеспечения поддержки единообразных имен для крупных узлов. Мы устанавливаем ее в Berkeley; будущие версии могут иметь значительные изменения.

    Псевдонимы Расширены

    Реализация была соединена с преобразованиями. Помимо всего прочего, теперь поддерживаются псевдонимы, основанные на NIS.

    Распространение Списка Владельцев на Конверт

    Когда псевдоним имеет ассоциированное имя списка владельцев, этот псевдоним используется для изменения конвертного адреса отправителя. В результате, при возникновении ошибок, они будут возвращаться к этому владельцу.

    Расширенные флаги Командной Строки

    Флаг -q может ограничить проход очереди определенными получателями, отправителями, или идентификаторами очереди используя -qRподстрока, -qSподстрока, или -qIподстрока соответственно.

    Расширенные Опции

    Опции r (таймаут чтения), I (использовать BIND), и T (таймаут очереди) были расширены для пропуска большей информации.

    Раздельная обработка Конверта и Заголовка

    Так как строка From: передается отдельно от конвертного отправителя, они оба были сделаны видимыми; макрос $g устанавливается в конвертного отправителя во время обработки вектора аргументов почтовой программы, и в заголовочного отправителя во время обработки заголовков.
    Так же имеется возможность определить раздельную обработку конверта и заголовка по почтовой программе. Аргументы SenderRWSet и RecipientRWset для почтовых программ могут быть указаны как конвертный/заголовочный для того, чтобы задать различные правила перезаписи для конвертных и заголовочных адресов.

    Разнообразные Изменения

    Sendmail пишет файл /etc/sendmail.pid с текущим идентификатором процесса демона SMTP.
    Два человека, использующие одну и ту же программу в их файлах .forward считаются различными, так что устранение дубликата не удалит одного из них.
    Программа mailstats печатает имена почтовых программ и получает местонахождение файла sendmail.st из /etc/sendmail.cf.
    Было исправлено множество небольших багов, типа обработки обратных слешей в кавычках.
    Был добавлен крючок (набор правил 5) для того, чтобы было возможно перезаписать локальные адреса после псевдонимизирования.


    Символические Имена Для Почтовой Программы Ошибок

    В часть $@ почтовой программы $#error было встроено несколько имен.

    SMTP VRFY Не Расширяется

    Предыдущие версии sendmailсчитали VRFY и EXPN одним и тем же. В этой версии, VRFY не расширяет псевдонимы и не следует файлам .forward. EXPN все еще делает все это.
    В качестве оптимизации, если у вас по умолчанию режим приема с постановкой в очередь, или приема в фоне, команда RCPT не будет трогать псевдонимы или файлы .forward. Они будут затронуты при обработке очереди.

    Было сделано большое количество изменений,

    Было сделано большое количество изменений, для того, чтобы сделать sendmail"условно соответствующим" (то есть, sendmailудовлетворяет всем предложениям "ДОЛЖНО" и большинству, но не всем, предложениям "ХОТЕЛОСЬ БЫ" в RFC 1123).

    Основные районы изменений (числа являются номерами секций RFC 1123):
    5.2.7Быстрый ответ на команду RCPT.
    5.2.8Числовые IP адреса протоколируются в строках Received:.
    5.2.17Литерал собственного домена обрабатывается правильно.
    5.3.2Улучшен контроль над индивидуальными таймаутами.
    5.3.3Сообщения об ошибке посылаются как "From:<>".
    5.3.3Сообщения об ошибке никогда не посылаются к "<>".
    5.3.3Отсекается Route-addrs.
    Области, в которых sendmailне "безусловно совместим":
    5.2.6sendmailвносит изменения в заголовок.
    5.2.10sendmailне всегда использует точный текст сообщения SMTP, как описано в RFC 821.
    5.3.1.1 sendmailне гарантирует одного единственного соединения на каждый хост во время обработки очереди.
    5.3.1.1sendmailне всегда обеспечивает адекватного ограничения параллельности.

    Улучшение Переносимости и Безопасности

    Было сделано большое количество внутренних изменений, направленных на улучшение переносимости.
    Было произведено несколько настроек для увеличения коэффициента параноидальности.

    Улучшенная Поддержка BIND

    Поддержка BIND, в частности для записей MX, имела некоторое количество раздражающих "особенностей", убранных в этом выпуске. В частности, она более жестко привязывает, сервер имен к sendmail, так что правила просмотра сервера имен внесены прямо в sendmail.

    Устранение Багов

    Устранены несколько небольших багов, типа связанных с экранирующими обратными чертами в комментариях.

    Вложение MX

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

    [IPC] Почтовые Программы Позволяют Множество Хостов

    Когда адрес разрешается к почтовой программе, имеющей "[IPC]" в качестве "Path", часть $@ (имя хоста) может быть списком хостов, разделенных двоеточиями вместо одного имени хоста. Это попросит sendmailпросмотреть список на первое точно имеющееся вхождение, даже если это запись MX. Это предназначено для маршрутизации внутреннего трафика через внутренние сети без выдачи записи MX в сеть. Для индивидуальных целей расширение MX все еще производится.

    

        Работа с информацией: Cистемы - Технологии - Рынок