- •Почтовые агенты в различных ос
- •Структура email-сообщения
- •Заголовки почтового сообщения
- •Примеры почтовых сообщений с заголовками
- •Основные команды протокола smtp
- •Vrfy email_адрес
- •Пример smtp-сеанса
- •Основные команды протокола pop-3
- •Программа sendmail: ее функции и составные части
- •Псевдонимы, списки рассылки и форвардинг
- •Конфигурация sendmail (файл sendmail.Cf)
- •Правила
- •Правила выбора агентов доставки
- •Порядок применения наборов правил
- •Специальные наборы правил (check_...)
- •Обсуждение
- •Задание 6.
Правила выбора агентов доставки
Особый тип правил - это правила выбора агентов доставки: на основании совпадения рабочего пространства с шаблоном в левой части правила производится выбор агента доставки, указанного в правой части. Вследствие этого структура правой части отличается от рассмотренной выше. Пример такого правила:
R$* < @ $* > $* $#smtp $@ $2 $: $1 < @ $2 > $3
Правило означает, что для доставки сообщений по адресам типа somebox@somehost нужно вызвать агент доставки smtp (об определении агентов см. ниже в этом пункте). Имя агента следует за оператором $#. Операторы $@ и $: имеют специальные значения. После $@ следует почтовый домен адресата; значение этого параметра записывается в макрос h, который может быть использован в определении агента доставки (см. ниже). После $: следует имя пользователя (для локальных агентов) или, в общем случае, адрес получателя (он будет аргументом команды "rcpt to" SMTP-диалога); значение этого параметра записывается в макрос u, который также может быть использован в определении агента доставки.
Другой пример (выбор локального агента, если адрес состоит из одного слова - очевидно, это просто имя пользователя в системе):
R$- $#local $:$1
После срабатывания правила выбора агента доставки производится выход из текущего набора правил; при этом результатом работы набора правил является выбор агента доставки.
Каждый агент доставки должен быть определен (зарегистрирован) где-либо в конфигурационном файле с помощью директивы М.
M - описать агент доставки
Мимя_агента, параметр=значение, параметр=значение, ...
Примеры:
Msmtp, P=[IPC], F=mDFMuX, S=11/31, R=21, E=\r\n, L=990, A=IPC $h
Mlocal, P=/bin/mail/local, F=lsDFMrmn, S=10, R=20/40, A=mail -d $u
Mprog, P=/bin/sh, F=lsDFMeuP, S=10, R=20, A=sh -c $u
# prog осуществляет доставку сообщения путем запуска программы, определяемой макросом $u
Параметры:
P= указывает путь к программе агента доставки ([IPC] - встроенный в sendmail модуль smtp). Текст сообщения со всеми загловками подается на стандартный ввод этой программы.
F= флаги, дающие sendmail информацию о программе доставки, например, флаг m означает, что агент может работать с несколькими получателями, D - в заголовке требуется поле Date. Полный список флагов см. в литературе.
S=, R= указывают наборы правил для окончательного (last-minute) преобразования адресов отправителя (S) и получателя (R). В случае двух номеров, указанных через дробь, первый применяется к преобразованию адреса в конверте, второй - к адресу в заголовке. Этих наборы правил предназначены для внесения пользовательских изменений.
E= символ(ы) конца строки.
L= максимальная длина строки сообщения.
U= пользователь, от имени которого будет запущен агент.
A= аргументы командной строки программы агента доставки, начиная с нулевого (имени программы).
Параметры P= и A= являются обязательными. Из агентов обязательно должны быть определены агенты local и prog.
Существует также встроенный агент доставки error, который явно не определяется. Выбор этого агента производится в наборах правил, осуществляющих какой-либо контроль или фильтрацию сообщений, для отказа в обработке сообщения (см. "Специальные наборы правил (check_...)"). Правая часть такого правила выглядит:
R... $#error $@ 5.1.8 $: "We do not want to relay your letters"
За в этом случае $@ следует код ошибки (5.1.2 - плохой адрес получателя, 5.1.8 - плохой адрес отправителя), за $: следует текстовый комментарий ситуации.