За создание классов sendmail отвечают команды С и F. Класс подобен массиву значений. Классы используются во всех случаях, когда необходимо одинаковым образом обрабатывать однородные значения, такие как различные имена локального узла или имена узлов ииср. Классы позволяют sendmail выполнять сравнение сразу со списком значений, а не с отдельными значениями.

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

Подобно макроопределениям, классы имеют односимвольные имена либо длинные имена, заключенные в фигурные скобки. В пользовательских классах используются длинные имена, не конфликтующие с внутренними именами sendmail. (Полный перечень имен внутренних классов sendmail приводится в приложении Е.) Значения класса могут определяться в одной строке, в нескольких строках либо загружаться из файла. Например, для определения всех имен узлов, под которыми известен локальный узел, используется класс w. Чтобы поместить в класс w значения goober и pea, можно указать значения в одной строке следующим образом:

Cwgoober pea

Или в нескольких строках:

Cwgoober 
Cwpea

Кроме того, можно использовать команду F для загрузки значений класса из файла. Команда F читает файл и записывает найденные слова в переменную класса. Например, чтобы создать класс w и присвоить ему все строки из файла /etc/mail/local-host-names, воспользуйтесь такой командой:

Fw/etc/mail/local-host-names

При создании файла sendmail.cf вам может понадобиться изменить некоторые определения классов. В операторах классов часто фигурирует информация, связанная с uucp, псевдонимами узлов, а также специальными доменами для маршрутизации почты. Если в вашей системе наряду с подключением TCP/IP задействовано подключение uucp, обратите особое внимание на определения классов. В любом случае внимательно проверьте определения классов и убедитесь, что они соответствуют вашей конфигурации. Вот результат поиска строк команд С и F в примере файла настройки для Linux:

% grep '^[CF]' generic-linux.cf
Cwlocalhost
Fw/etc/mail/local-host-names
CP.
CO @ % !
C..
C[[
FR-o /etc/mail/relay-domains
C{E}root
CPREDIRECT

Из результатов видно, что в файле generic-linux.cf определены классы w, Р, 0, ., [, R и Е. w содержит псевдонимы узла. Обратите внимание, что в класс w значения добавляются при помощи команд С и F одновременно. В отличие от коман- ды D, перезаписывающей значение макроопределения, команды записи в массивы классов являются накопительными. Команды С и F в начале приведенного фрагмента добавляют значения в класс w. Другая иллюстрация накопительной природы команды С - класс Р. В Р хранятся псевдодомены, используемые для маршрутизации почты. Первая команда С для класса Р добавляет в массив точку. Последняя команда списка добавляет REDIRECT в класс Р.

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

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

Многие имена классов зарезервированы для внутреннего использования sendmail. Все внутренние классы, определенные в sendmail версии 8.11, перечислены в приложении Е. Системные администраторы, изменяющие непосредственно файл sendmail.cf, редактируют, как правило, только класс w, определяющий все имена узлов, на которые система будет реагировать как на свои собственные.