Пример обмена сообщениями с помощью шлюза
Поясним этапы работы шлюза на примере. Предположим, что пользователь comer решил запросить документ RFC 1094. Он передает по адресу прикладного шлюза Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript письмо с указанием в строке Subject: номера 1094. Сообщение содержит следующее:
То: rfc8somewhere.com
From: comer Subject:
1094
Тело сообщения (возможно, пустое)
Почтовая система хоста somewhere.com настроена на передачу входящего сообщения в сценарий rfcd.
После вызова сценария rfcd на выполнение сценарий awk извлекает адрес отправителя comer из строки From: почтового сообщения и сохраняет его в переменной retaddr. Затем сценарий извлекает номер 1094 из строки Subject: и сохраняет его в переменной rfcnum. После обнаружения пустой строки, отделяющей заголовок от тела сообщения, сценарий rfcd вырабатывает следующую командную строку:
/usr/local/bin/rfc 1094 | /bin/mail -s 'RFC 1094' 'comer'
Пользователи Linux могут обнаружить, что эта строка является допустимым вводом для командного интерпретатора bash. В ней указано, что командный интерпретатор должен выполнить программу из файла /usr/local/bin/rfc с параметром 1094, а затем перенаправить ее вывод в программу /bin/mail по каналу. Программа mail принимает три параметра: -s, RFC 1094 и comer. Первые два параметра указывают, что тема сообщения состоит из строки RFC 1094, а третий параметр определяет, что письмо должно быть отправлено по адресу comer. Качество абонентского обслуживания компьютеров организаций непрерывно улучшается. Тело сообщения состоит из документа RFC, полученного от сценария rfc.
Поскольку сценарий rfcd передает вывод программы awk непосредственно в командный интерпретатор, последний выполняет командную строку, показанную выше. Командный интерпретатор вызывает на выполнение программу rfc, а затем передает результаты по почте пользователю comer.
19.14. Применение сценария rfcd в сочетании с файлом .forward или программой slocal
Выполнить проверку сценария rfcd может любой пользователь с применением своей учетной записи электронной почты. Для этого пользователь должен создать файл .forward в своем начальном каталоге. При получении каждого сообщения почтовая система извлекает имя получателя из поля То: и проверяет наличие файла .forward в начальном каталоге пользователя. Обнаружив такой файл, почтовая система считывает его и выполняет содержащуюся в нем команду. Например, предположим, что пользователю нужно обеспечить передачу с помощью обработчика почты каждого из адресованных ему входящих сообщений в программу с полным именем пути /usr/XXX/Q. Пользователь помещает в файл .forward одну строку.
Почтовая система интерпретирует эту строку, как требование вызвать программу /usr/XXX/Q, передав на ее стандартный вход полученное почтовое сообщение. Таким образом, для вызова прикладного шлюза электронной почты, описанного выше, пользователь должен поместить сценарий rfcd в файл, отметить этот файл как предназначенный для выполнения и ввести в файл .forward запись, указывающую на файл сценария.
Любопытно отметить, что пользователи системы Linux могут не разрабатывать почтовый шлюз с самого начала, а воспользоваться программой slocal, которая выполняет основную часть работы. Пользователь указывает с помощью файла .forward, что каждое входящее сообщение электронной почты должно быть передано программе slocal. Программа slocal обращается к файлу спецификации .maildelivery для определения способа дальнейшей обработки сообщения. Пользователь может предусмотреть, чтобы некоторые входящие сообщения поступали в почтовый ящик, а другие передавались в прикладной шлюз.