###########
# Макросы #
###########

# Версия конфигурации sendmail. В данном случае
# Copyright (C) 1992-1994 Сергей Вакуленко, .
DVvak/1.9

# Ссылки на макросы имеют вид $X.  Макросы a-z используются системой,
# A-Z оставлены для пользователя.
# Следующие макросы определены внутри sendmail:
# a - дата сообщения в формате RFC 822
# b - текущая дата в формате RFC 822
# c - счетчик зацикливания (hop count)
# d - текущая дата в формате Unix
# f - адрес отправителя (from)
# g - адрес отправителя относительно получателя
# h - хост получателя
# i - идентификатор очереди
# k - UUCP-шное имя данного хоста
# m - необработанный адрес получателя
# p - номер процесса sendmail
# r - используемый протокол
# s - хост отправителя
# t - численное представление текущего времени
# u - имя пользователя получателя
# v - номер версии sendmail
# w - имя данного хоста (hostname)
# x - полное имя отправителя
# y - имя управляющего терминала данного процесса (basename)
# z - домашний каталог получателя
# Не все из них могут быть определены, для проверки
# используется условное выражение вида "$?X текст1 $| текст2 $.".

# Приглашение для SMTP.
De$j $v$?V/$V$. Sendmail is ready at $b

# "Официальное" имя домена для данной машины.
# Определяется автоматически.
Dj$w

# Формат строки "From_".
DlFrom $g  $d

# Имя почтового демона для возврата ошибок маршрутизации.
DnMAILER-DAEMON

# Список "операторов" в адресах.
Do.:%@!^=/[]

# Формат адреса отправителя.
Dq$g$?x ($x)$.

###############
# Классы имен #
###############

# Имеют вид:
# CXимя1 имя2...
# FXфайл

# В этом файле находится список всех доменных имен данной машины.
Fw/etc/mail/myhostnames

# Класс разделителей, запрещенных в имени домена.
CB! % @ : ^

#########################
# Составление заголовка #
#########################

# Заголовки (в соответствии с RFC 822) должны идти
# в следующем порядке: "Return-Path", "Received",
# "Date",  "From",  "Subject",	"Sender", "To", "Cc".
#
# Формат поля Received:
#	["from" domain]		; кто передал
#	["by"	domain]		; кто принял
#	["via"	atom]		; среда передачи
#      *("with" atom)		; протокол связи
#	["id"	msg-id]		; receiver msg id
#	["for"	addr-spec]	; initial form
#	 ";"	date-time	; time received
#
# Некоторые поля заголовка имеет смысл добавлять только для
# определенных мэйлеров, управляя соответствующими флагами мэйлера,
# пример: P - добавить поле Return-Path, H?P?Return-Path: <$g>
# Поля "Date",	"From",	 "Message-Id" добавляем принудительно, если их нет.
HReceived: $?sfrom $s $.by $j$?r with $r$. id $i;
  ($v$?V/$V$.) $b
HDate: $a
HFrom: $q
HMessage-Id: <$t.$i@$j>

################################
# "Благонадежные" пользователи #
################################

# Следующим господам мы верим и разрешаем
# подменять адрес From: посредством флага -f.
Troot daemon uucp

###########################
# Определение старшинства #
###########################

# Письма со следующими значениями поля Precedence:
# будут доставляться тем быстрее, чем больше соответствующее
# значение станшинства.	 Если старшинство меньше 0,
# сообщений об ошибках не будет.
# По умолчанию письма имеют старшинство 0.
#Pbulk=-60
#Pfirst-class=0
#Pjunk=-100
#Pspecial-delivery=100

####################
# Установка флагов #
####################

# Флаг 'r' - время ожидания ввода при работе по SMTP.
# Дело в том, что при работе по SMTP в глобальной сети
# бывают довольно большие задержки.
# Обычно - два часа, хотя это и противоречит
# традиционным протоколам.
# По умолчанию не ограничено.
Or2h

# Флаг 'T' - время ожидания доставки, обычно три дня.
# После этого письмо возвращается назад.
OT3d

# Флаг 'Y' - нужно ли ветвиться (fork) перед обработкой
# очередного письма из очереди.	 При этом можно сэкономить
# на оперативной памяти, т.к. родительский процесс не будет
# расти по мере обработки очереди.  Зато теряется возможность
# отслеживать недостижимые хосты.
# По умолчанию выключено (не ветвиться).
#OY

# Флаги 'y', 'z' и 'Z' - управление приоритетом сообщений.
# Приоритет вычисляется по формуле:
# приоритет = объем - (класс * z) + (тираж * y) + (попытка * Z)
# Здесь 'объем' - размер сообжения в байтах,
# 'класс' - класс сообщения (см. команды 'P'),
# 'тираж' - количество адресатов- получателей сообщения,
# 'попытка' - номер попытки установления связи (0, 1...).
# Чем ниже приоритет, тем быстрее будет доставлено сообщение.
# По умолчанию y=1000, z=1800, Z=9000.
#Oy1000
#Oz1800
#OZ9000

# Флаги 'x', 'q' и 'X' - ограничение загрузки процессора.
# Сообщение не обрабатывается, а остается в очереди,
# в случае, если загрузка процессора превышает x и
# выполняется следующее условие:
#		     q
# приоритет > ----------------
#	      загрузка - x + 1
# Если загрузка процессора превышает X, sendmail
# перестает обрабатывать входящие SMTP-соединения.
# По умолчанию x=8, q=10000, X=12.
#Ox8
#Oq10000
#OX12

# Флаг 'd' - режим обработки сообщения.
# Варианты: interactive - синхронная доставка (по умолчанию),
# background - асинхронная доставка (фоновым процессом),
# queue - отложенная доставка (занесение в очередь).
Odbackground

# Флаг 'L' - уровень диагностики, по умолчанию 9.
#OL9

# Флаги 'u' и 'g' - идентификаторы пользователя и группы,
# от имени которых происходит запуск мэйлеров.
# По умолчанию u=1, g=1.
#Ou1
#Og1

# Флаг 'D' - перестраивать базу данных aliases.{pag,dir}
# автоматически по мере обновления файла aliases.
# По умолчанию выключено.
#OD

# Флаг 'A' - имя базы данных синонимов.
# По умолчанию - ./aliases.
OA/etc/mail/aliases

# Флаг 'Q' - имя каталога очереди сообщений.
# По умолчанию - ./mqueue.
OQ/var/spool/mqueue

# Флаг 'H' - имя help-файла для SMTP.
# По умолчанию - ./sendmail.hf.
OH/usr/share/misc/sendmail.hf

# Флаг 'S' - имя файла для записи статистики.
# По умолчанию - ./sendmail.st.
OS/var/log/sendmail.st

# Флаг 'B' - символ для заполнения пустых полей в адресах.
# Все незащищенные пробелы в адресах заменяются этим символом.
# По умолчанию - пробел.
#OB.

# Флаг 'F' - режим доступа для создаваемых файлов.
# По умолчанию - 0644.
OF0600

# Флаг 'a' - время ожидания готовности базы aliases.{pag,dir}
# в минутах (поиск записи @:@).
# По умолчанию - не проверять готовность базы.
# Обычно ставят 5 минут.
Oa5

# Флаг 'o' - обрабатывать заголовки в "старом" формате,
# т.е. адреса разделяются пробелами.  В исходящих заголовках
# адреса всегда разделяются запятыми.
# По умолчанию выключено.
Oo

# Флаг 's' - "супернадежность", сохранять письмо в очереди
# даже в случае немедленной (синхронной) доставки.
# По умолчанию выключено.
Os

# Флаг 'I' - всегда опрашивать name-сервер (BIND), не доверять файлу /etc/hosts.
# Необходимо, если /etc/hosts заведомо неполон или требуется обрабатывать
# MX-записи.  Если выключить, то сначала будет опрашиваться name-сервер,
# а при отлупе будем жить по /etc/hosts.
# По умолчанию выключено.
#OI

# Флаг 'c' - если мэйлер помечен как медленный (expensive),
# не вызывать его немедленно, а отложить задание в очередь.
# По умолчанию выключено.
Oc

# Флаг 'e' - режим обработки ошибок.  Возможные варианты:
# print - печать сообщений об ошибках (по умолчанию),
# quiet - никаких сообщений, только код ответа,
# mail	- вернуть письмо с сообщением,
# write - печать сообщения на терминал пользователя или письмом,
#	  если пользователя нет в данный момент,
# exit	- вернуть письмо с сообщением и нулевой код ответа.
#Oeprint

# Флаг 'f' - сохранять строки "From_".	По умолчанию выключено.
Of

# Флаг 'i' - игнорировать строки, содержащие только точку.
# По умолчанию выключено.
#Oi

# Флаг 'm' - "себе тоже".  Слать письма автору сообщения,
# если его адрес присутствует в списках рассылки.
# По умолчанию выключено.
Om

# Флаг 'v' - режим трассировки.	 По умолчанию выключен.
#Ov

# Флаг 'K' - загрузка дополнительной базы данных.
# Формат: KXfile.  База данных file открывается под именем X.
# База aliases всегда открыта с именем @.
# Загружаем базу маршрутизации под именем R.
# Для IDA sendmail:
#OKR/etc/mail/routes
# Для sendmail 8.5:
KR hash /etc/mail/routes

###########
# Мэйлеры #
###########

# Синтаксис определения мэйлера:
# Mимя, Path=путь, Argv=аргументы, Eol=конец-строки, Maxsize=макс-размер,
# Flags=флаги, Sender=правило-отпр, Recipient=правило-получ,
# Linelimit=макс-длина-строки

# Path задает полный путь команды, например, /bin/mail,
# или один из частных случаев:
# [IPC] или [TCP] - SMTP сеанс с удаленным мэйлером,
# [LPC] (local person communication) - SMTP на стандартный ввод/вывод,
# для отладки.	Не для чайников. :-)

# Предопределенные флаги:
# C - если в адресах получателей нет '@', приписывать им домен отправителя
# E - преобразовывать строки From_ в >From
# e - "медленный" мэйлер, вызывать только при обработке очереди (асинхронно)
# f - нужно добавлять флаг "-f from", если от root
# h - не преобразовывать домен в маленькие буквы
# I - этот мэйлер - SMTP соединение с другим sendmail
# l - локальный мэйлер (доставка конечному адресату)
# L - ограничивать длину строки в соответствии с RFC821
# m - возможна посылка нескольким адресатам за один вызов
# n - не нужно добавлять строку "From_" в начало сообщения
# p - указывать обратный путь в MAIL FROM:
# r - то же, что и -f, но -r
# S - можно запускать мэйлер от root
# s - удалять кавычки " из адресов
# u - не преобразовывать в имени пользователя большие буквы в маленькие
# U - выдавать строку "From_" с добавкой "remote from " в конце
# X - к каждой строке, начинающейся с точки, приписывать еще одну точку

# Локальная доставка пользователям на данной машине.
Mlocal, Path=/usr/libexec/mail.local,	Argv=mail -r $g $u,
	Flags=lsmn,			Sender=11/10,	Recipient=12

# Выполнение программ на локальной машине (для фильтров).
Mprog,	Path=/bin/sh,			Argv=sh -c $u,
	Flags=lse,			Sender=11/10,	Recipient=12

# Доставка по SMTP.
Mtcp,	Path=[IPC],			Argv=IPC $h,	Eol=\r\n,
	Flags=umeXC,  Linelimit=990,	Sender=11/10,	Recipient=12

# Доставка по UUCP.
Muucp, Path=/usr/bin/uux,		Argv=uux - -z -r $h!rmail ($u),
	Flags=Uupm,   Maxsize=1000000,	Sender=11/10,	Recipient=12

# Доставка по UUCP в банговой нотации.
Muucpb, Path=/usr/bin/uux,		Argv=uux - -z -r $h!rmail ($u),
	Flags=Uupm,   Maxsize=1000000,	Sender=11,	Recipient=13

##########################
# Правила преобразования #
##########################
# Имеется пять основных (зарезервированных) правил:
# 1 - обработка адреса отправителя,
# 2 - обработка адреса получателя,
# 3 - предварительная обработка,
# 4 - заключительная обработка,
# 0 - маршрутизация.
# Адрес локального отправителя (пользователя) обрабатывается
# по схеме 3 -> 1 -> 4.
# Адрес удаленного отправителя обрабатывается по схеме 3 -> 1 -> X -> 4,
# где X - номер правила, указанный в поле Sender соответствующего мэйлера.
# Адрес получателя обрабатывается по схеме 3 -> 2 -> Y -> 4,
# где Y - номер правила, указанный в поле Recipient соответствующего мэйлера.
# Выбор мэйлера происходит по схеме 3 -> 0.
# Если определен флаг '/', то при обработке адресов заголовков
# (в отличие от конвертов) будут вместо правил 1 и 2 применяться
# правила 5 и 6 соответственно.

# Команда S# задает номер набора правил, в диапазоне 0..29.
# Команда R определяет очередное правило:
# Rлевая-часть	правая-часть	комментарий
# Левая и правая части разделяются табуляциями.
# В левой части допустимы следующие символы:
# $*  - ноль и более термов
# $+  - один и более терм
# $-  - ровно один терм
# $=x - непустая последовательность термов из класса X
# $~x - непустая последовательность термов, не принадлежащих классу X
# $%D - непустая последовательность термов-ключей из DBM-файла D
# $^D - непустая последовательность термов, не входящих в DBM-файл D
# Метасимволы правой части:
# $1 $2 $2 и т.д. - строки, соответствующие метасимволам левой части
# $&X - текущее содержимое макро X
# $[ имя $: умолч $] - канонизация имени (запрос к name-серверу, BIND)
# $(D ключ $@ арг $: умолч $) - поиск в DBM-файле
# $>7 - запуск набора правил
# $#мэйлер - выбор мэйлера, только для набора 0
# $@хост - выбор хоста, только для набора 0
# $:адрес - выбор адреса, только для набора 0
# В начале правой части метасимвол $@ означает возврат из текущего
# набора правил (аналог return), метасимвол $: означает
# переход к следующему правилу (аналог break).

# Правила 1, 2, 5, 6 - пустые, чтобы не было проблем с sendmail версии 5.

#------------------------------
# Правилo 3: канонизация адреса
#------------------------------
S3

# Обрабатываем пустой адрес как вырожденный случай.
R$*<>$*			$@@			некий спецсимвол

# Вытаскиваем адрес из угловых скобок.	Дважды и даже трижды.  Зачем это все?
R$*<$*<$*<$+>$*>$*>$*	$4			тройной уровень <<<>>>
R$*<$*<$+>$*>$*		$3			двойной уровень <<>>
R$*<$+>$*		$2			нормальный адрес RFC821/822

# Все ^ заменяем на !.
R$*^$*			$1!$2			давно устарело

# RFC 1123 не рекомендует выполнять маршрутизацию вида <@a,@b,@c:user@d>.
# Перепишем как @a,@b,@c:user<@d>.  В правиле 0 отбросим все, что
# до двоеточия.	 Но оно может пригодиться для "From_".
R$*@$*@$*		$1^$2@$3		заменим левые @ на ^

# Обычный адрес в стиле internet.
R$+@$+			$:$1<@$2>		домен заключаем в <скобки>
R$*^$*			$1@$2			обратно ^ => @
R$+<$+@$+>		$1$2<@$3>		a => ab<@c>

# Приведение синонимов к полным именам.	 Обращение к BIND.
R$*<@$->		$:$1<@$[$2$:$2$]>	ищем записи типа CNAME

# Канонический вид готов.
R$+<@$+>		$@$1<@$2>		получилось ab<@c>

# UUCP-переадресация через себя
R$=w!$*			$2			myname!addr => addr

# Типичный UUCP-адрес, добавляем ".uucp".
R$~B!$*			$@$2<@$1.uucp>		ab!cd => cd<@ab.uucp>

# UUCP-адрес в доменной адресации, преобразуем в internet.
R$*.$~B!$*		$@$3<@$1.$2>		ab.c!de => de<@ab.c>

# Адрес вида user%host, приведем к виду a%b%c@d.
R$*%$*			$1@$2			все @ заменим на %
R$*@$*@$*		$1%$2@$3		последний % на @
R$*@$*			$@$1<@$2>		поставим скобки

# Просто user.	Дописываем свой домен.
R$*			$@$1<@$w>		добавляем свой домен

#-------------------------------------------
# Правилo 4: преобразование во внешнюю форму
#-------------------------------------------
S4

R@			$@			пустой <> адрес

# Преобразование адреса вида 1.2.3.4 в имя домена.  Обращение к BIND.
R$*<@[$+]>		$:$1<@$[[$2]$]>		приведение численного адреса

# Еще одно обращение к BIND.  Приведение синонимов к полным именам.
# В принципе, можно этого не делать, если relay сделает это за нас,
# но при этом письмо может пойти по весьма странному пути.
R$*<@$->		$:$1<@$[$2$:$2$]>	ищем записи типа CNAME

# Убираем угловые скобки.
R$*<@$+.uucp>		$2!$1			приводим в человеческий вид
R$*<$+>			$1$2			приводим в человеческий вид

# Удаляем повторяющиеся домены.
R$+%$=w@$=w		$1@$w			u%host@host => u@host

#-------------------------------------
# Правилo 7: поиск в таблице маршрутов
#-------------------------------------
S7

# Наш домен - локальная почта.
R$*<@$=w>		$@$1<@$w>		приводим к стандартному домену

# Запрашиваем в таблице маршрутов.
R$*<@$*>		$:$1<@$2^$(R$2$:%$)>	ставим маркер ^

# Перебираем все субдомены.
# <@addr^%> - не нашли.
R$*<@$*.$-.$-.$-.$-.$-^%>	$:$1<@$2.$3.$4.$5.$6.$7^$(R.$3.$4.$5.$6.$7$:%$)>
R$*<@$*.$-.$-.$-.$-^%>	$:$1<@$2.$3.$4.$5.$6^$(R.$3.$4.$5.$6$:%$)>
R$*<@$*.$-.$-.$-^%>	$:$1<@$2.$3.$4.$5^$(R.$3.$4.$5$:%$)>
R$*<@$*.$-.$-^%>	$:$1<@$2.$3.$4^$(R.$3.$4$:%$)>
R$*<@$*.$-^%>		$:$1<@$2.$3^$(R.$3$:%$)>
R$*<@$*^%>		$:$1<@$2^$(R.$:%$)>	ищем default (.)
R$*<@$*^%>		$@$1<@^%No route to $2>
R$*<@$*^%$*>		$@$1<@$2^%$3>		ошибка
R$*<@$*^:$*>		$@$1<@$2^:$3>		запуск фильтра
R$*<@$*^/$*>		$@$1<@$2^/$3>		запись в файл
R$*<@$*^=$*@>		$@$1<@$2^=$3@$w>	замена домена
R$*<@$*^=$*>		$@$1<@$2^=$3>		замена домена

# Добавляем имя мэйлера, если не указано.
R$*<@$*^!!$*>		$1<@$2^uucpb!!$3>	<@addr^!!host> мэйлер uucpb
R$*<@$*^!$*>		$1<@$2^uucp!$3>		<@addr^!host> мэйлер uucp
R$*<@$*^@$*>		$1<@$2^tcp@$3>		<@addr^@> мэйлер tcp

# Добавляем имя хоста, если не указано.
R$*<@$*^$*!>		$:$1<@$2^$3!$2>		<@addr^m!> правильный маршрут
R$*<@$*^$*@>		$:$1<@$2^$3@$2>		<@addr^m@> правильный маршрут

# Удаляем .uucp для UUCP-мэйлеров.
R$*<@$*^$*!$+.uucp>	$1<@$2^$3!$4>		<@addr^m!host.uucp>

# Возвращаем:
# <@addr^mailer@host>, mailer=uucp|tcp, через host в internet-адресации,
# <@addr^mailer!host>, mailer=uucp|tcp, через host с удалением домена из адреса,
# <@addr^%message> - ошибка.
R$*<@$*^$*!!$*>		$@$1<@$2^$3!$4>		<@addr^m!!host> uucp без доменов
R$*<@$*^$*!$*>		$@$1<@$2^$3@$4>		приводим uucp к общему виду
R$*<@$*^$*@$*>		$@$1<@$2^$3@$4>		готовый internet-адрес
R$*			$@<@^%Invalid route table>

#-----------------------------------
# Правилo 8: повторная маршрутизация
#-----------------------------------
#
S8
R$*			$:$>3$1			канонизация
R$*			$:$>0$1			маршрутизация

#------------------------------------------
# Правилo 9: обработка глобальных синонимов
#------------------------------------------
# На вход подается канонизированный адрес.
S9

# Ищем глобальный синоним в /etc/mail/routes.
R$*<@$*>		$:$(R$1@$2$:$1<@$2>$)	если нашли, скобок <> не будет
R$*<@$*>		$@$1<@$2>		нет такого синонима
R$*@			$1@$w			локальный адрес
R$*			$:$>3$1			канонизируем результат

#-------------------------
# Правилo 0: маршрутизация
#-------------------------
S0

# RFC 1123 не рекомендует выполнять маршрутизацию вида @a,@b,@c:user<@d>.
# Шлем сразу на user@d.
R@$+:$+			$2			так гораздо проще

# Маршрутизация через нас.
R$*<@listserv.$=w>	$#prog$:/etc/mail/listserv $1 $&f
R$*<@$=w>		$:$1<@$w>		"свой" домен - к стандарту

# Обрабатываем глобальные синонимы.
R$*<@$*>		$:$>9$1<@$2>		запускаем правило 9

# Адрес вида [1.2.3.4], преобразуем в имя, запрашивая name-сервер.
R$*<@[$+]>		$:$1<@$[[$2]$]>		обращение к BIND

# С name-сервером ничего не получилось.
R$*<@[$+]>		$#tcp$@[$2]$:$1@[$2]	выбираем SMTP

# Запрашиваем в таблице маршрутов.
R$*<@$*>		$:$>7$1<@$2>		запускаем правило 7

# <@oldaddr^=newaddr> - переадресация на другой домен.
# Заменим домен и еще раз пройдем правило 7.
R$*<@$*^=$*@$*>		$:$>7$3<@$4>		a<@old^=b@new> -> b<@new>
R$*<@$*^=$*>		$:$>7$1<@$3>		<@old^=new> -> <@new>
R$*<@$*^=$*>		$#error$:Loop in routes

# Ошибка: <@addr^%строка>.
R$*<@$*^%$*>		$#error$:$3

# <@addr^:path> - запуск фильтра.
# Фильтр вызывается с двумя аргументами, первый - имя пользователя,
# которому послано письмо, второй - адрес отправителя.
R$*<@$*^:$*>		$#prog$:$3 $1 $&f

# Проверяем ограничение по хосту отправителя.
# Ищем routes записи вида:
# !host.from:host.to  текст_сообщения_об_ошибке
#	- нельзя посылать от  на 
R$*<@$*^$*!$*>		$:$1<@$2^$3!$4>$(R!$&s:$4$:$)
R$*<@$*^$*@$*>		$:$1<@$2^$3@$4>$(R!$&s:$4$:$)
R$*<@$*^$*!$*>		$:$1<@$2^$3!$4>$(R!$&s$:$)
R$*<@$*^$*@$*>		$:$1<@$2^$3@$4>$(R!$&s$:$)
R$*<@$*^$*!$*>$+	$:$1<@$2^$3!$4>$(R!$&s%$4$:$5$)
R$*<@$*^$*@$*>$+	$:$1<@$2^$3@$4>$(R!$&s%$4$:$5$)
R$*<$*>$+		$#error$:$3

# <@addr^m!host> - переадресация с удалением домена.
R$*<@$*^$*!$*>		$#$3$@$4$:$1		поехало без домена

# <@addr^m@host> - переадресация в стиле internet.
R$*<@$*^$*@$*>		$#$3$@$4$:$1<@$2>	user@host.domain

# Переадресация через локальную машину.
# Повторяем все сначала через правила 3 и 0.
R$*!$*<@$w>		$@$>8$1!$2		host!user@myname => host!user
R$*%$*<@$w>		$@$>8$1%$2		host%user@myname => host%user

# Пустой адрес - ошибка
R@			$#error$:Invalid address

# Локальная доставка.
R$*<@$w>		$#local$:$1
R$*<@>			$#local$:$1
R$+			$#local$:$1		локальный мэйлер

#-------------------
# Правилo 10: пустое
#-------------------
S10

#------------------------------------
# Правилo 11: отправитель на конверте
#------------------------------------
# Перевод адресов From_ в банговую нотацию
# для отслеживания маршрута статистикой.
S11

# Из множеств "имен собственных" выбираем стандартное.
R$*<@$=w>		$:$1<@$w>		"свой" домен - к стандарту

# Приведение синонимов к полным именам.	 Обращение к BIND.
#R$*<@$->		$:$1<@$[$2$:$2$]>	ищем записи типа CNAME

# Маршрут вида @a,@b,@c:user<@d>.
R$*@$*,@$*:$*<$*>	$1$2!@$3:$4<$5>		@a,@b:u<@h> -> a!@b:u<@h>
R$*@$*:$*<$*>		$1$2:$3<$4>		a!@b:u<@h> -> a!b!u<@h>

# Теперь разберем обычную форму
R$*@$*<@$*>		$1%$2<@$3>		лишние @ на %
R$*:$*<@$*>		$1!$3!$2		убрали все @ и :
R$*<@$*>		$2!$1			убрали все @

# Ставим маркер ^ и передвигаем его на имя пользователя.
R$*			$:^$1^			поставили ^
R$*^$*!$*		$1$2!^$3		двигаем вправо

# Маршрут вида u%a%b%c.
R$*^$*%$*^$*		$1^$3^!$2$4		a%b%c -> c!b!a
R$*^$*			$1$2			убираем ^

# Убираем свое имя из пути.
R$=w!$*			$2			убираем свое имя
Rlocalhost!$*		$1			отрезаем localhost

# Убираем ".uucp" из адресов.
R$~B.uucp!$*		$1!$2
R$*!$~B.uucp!$*		$1!$2!$3

# Добавляем свое имя.
R$*			$:$w!$1

#-----------------------------------
# Правилo 12: получатель на конверте
#-----------------------------------
S12

# RFC 1123 не рекомендует выполнять маршрутизацию вида @a,@b,@c:user<@d>.
# Шлем сразу на user@d.
R@$+:$+			$2			жить стало веселей

#-------------------------------------------------------
# Правилo 13: получатель на конверте, в банговой нотации
#-------------------------------------------------------
S13

R$*			$:$>12$1		запускаем правило 12

# Возврат в банговую нотацию. Применяется для переадресации в сеть,
# не понимающую адресов в стиле internet.
R$+<@$+.uucp>		$2!$1			u@h.uucp => h!u
R$+<@$*>		$2!$1			u@h => h!u

Популярность: 7, Last-modified: Tue, 11 Aug 1998 05:51:46 GmT