GoGPT Best VPN GoSearch

Значок OnWorks

mailagent - онлайн в облаке

Запустите почтовый агент в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS

Это командный почтовый агент, который можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


mailagent - инструмент автоматической обработки почты

СИНТАКСИС


почтовый агент [ -dhilqtФИВУ ] [ -s {umaryt} ] [ -f файл ] [ -e править ] [ -c конфиг ] [ -L
уровень журнала ] [ -r файл правил ] [ -o переопределение ] [ почтовый файл ]

ОПИСАНИЕ


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

Существует набор параметров, которые можно использовать при вызове почтовый агент сам. Пожалуйста
обратитесь к ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ раздел для полного описания. Вы можете использовать -h возможность получить
загадочное напоминание об использовании.

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

· Командный процессор @SH, чтобы оставаться совместимым с первой реализацией. В
это простейшее использование, все почтовые сообщения остаются в вашем почтовом ящике (или все
папка, необходимая в системах Debian: см. / usr / share / doc / mailagent / БЕЗОПАСНОСТЬ для
Детали), со специальной обработкой для сообщений, тема которых Command.
Пожалуйста, обратитесь к разделу, озаглавленному С ПОМОЩЬЮ DEFAULT ПРАВИЛА если вы хотите использовать это
функцию.

· Полный почтовый фильтр, который помогает вам сортировать почту на основе различной сортировки
критерии и действия. Фильтрация указывается в файле правил и заменяет
по умолчанию Command обработка почты (которую можно снова включить, явно указав
правила для этого). Это должно быть наиболее частое использование почтовый агент и полностью
задокументировано в разделе, озаглавленном С ПОМОЩЬЮ ФИЛЬТР. Вы можете доставлять почту по адресу
обычные папки в стиле Unix, но также и папки MMDF и MH.

· Замена отпуск программа, которая автоматически ответит на вашу почту
пока тебя там нет. Вам нужно только предоставить сообщение, которое будет отправлено обратно, и
частота, с которой это будет происходить. Некоторые простые макроподстановки позволяют вам повторно
используйте некоторые части заголовка письма в своем сообщении об отпуске для более персонализированного
Ответить. Увидеть ОТПУСК РЕЖИМ раздел для более подробной информации.

· Общий почтовый сервер, который позволит вам реализовать настоящий почтовый сервер без
хлопот, связанных с проблемами нижнего уровня, такими как восстановление после ошибок, ведение журнала или синтаксический анализ команд.
Полную документацию можно найти в разделе GENERIC ПОЧТА SERVER в конце
эту страницу руководства.

Команды фильтрации почтового агента можно расширить, реализовав их в Perl и
затем их автоматически загружают при использовании. Эти расширенные команды будут вести себя
точно так же, как встроенные, как описано в РАСШИРЕНИЕ ФИЛЬТРАЦИЯ КОМАНДЫ .

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

ПОЛУЧЕНИЕ НАЧАЛ


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

Чтобы начать установку, вам необходимо настроить ~ / .mailagent файл, который является основным
файл конфигурации и выберите нужный фильтр программу.

Выбор The ФИЛЬТР Программа
В дистрибутиве есть две программы-фильтры. Один написан оболочкой, другой - C.
версия оболочки может быть той, которую вы можете использовать, если вы можете получать почту на много разных
платформы, на которых ваш домашний каталог смонтирован по NFS (т. е. разделяется между всеми этими
платформы). Версия C безопаснее и намного быстрее, но вам нужно установить ее на фиксированный
место нахождения.

На некоторых платформах Отправить письмо неправильно сбрасывает свой UID при обработке писем в своем
собственная очередь. В этом случае вам нужно получить частную копию программы фильтра C и сделать
это установило для себя. Затем фильтр правильно сбрасывает свой UID, если он вызывается с
эффективный UID отличается от вашего (также может потребоваться бит setgid для сброса GID как
хорошо). Если это действительно так в вашей системе, убедитесь, что вы используете путь
переменная конфигурации, чтобы установить правильный PATH, поскольку фильтр порождает процесс Perl с
параметр "-S", ищущий почтовый агент скрипты.

Даже если вам не нужно получать setuid-копию фильтр программу, разумно создать
правильный путь: кто-то может взломать вашу учетную запись, поместив троянского коня почтового агента в
подходящее место. Также убедитесь, что программа mailagent защищена от
письмо, а также каталог, в котором он хранится, или кто-то может заменить его собственное
версия скрипта и взломать безопасность. Я верю в setuid фильтр программа, чтобы быть в безопасности,
но упускать из виду всегда возможно, поэтому, пожалуйста, сообщайте мне о любых дырах в безопасности.

The фильтр сценарий можно найти в Lib / mailagent каталог. Он нуждается в небольшом пошиве, поэтому
вы должны скопировать его в свой домашний каталог и отредактировать в соответствии с вашими потребностями. Комментарии проведены
в нем должно быть понятно. В начале скрипта есть только небольшой раздел.
который нужно отредактировать. Вам нужно будет удалить комментарии оболочки в фильтр сценарий
сами, если ваша оболочка не может с ними справиться.

Начиная с версии 3.0 PL44, я советую вам предпочесть версию C, если вас беспокоит
безопасность. Если вы находитесь в положении, когда несколько архитектур могут обрабатывать ваши .вперед,
тогда оболочка оболочки, выбирающая правильный исполняемый файл на основе архитектуры, будет
требуется.

Настройка Почтовый агент
If почтовый агент находится на вашем пути, вы можете автоматически настроить установку по умолчанию,
Бег:

почтовый агент -I

что создаст ~ / .mailagent файл из существующего шаблона, настройте некоторые важные
переменных для вашего сайта и выполните некоторые базовые проверки работоспособности. Все, что делает команда,
вывод на экран для проверки, и сообщается обо всех обнаруженных проблемах.

В противном случае вам придется скопировать mailagent.cf файл, хранящийся в подкаталоге mailagent
/ usr / share / mailagent (далее по тексту Lib) как .почтовый агент в вашем домашнем каталоге. Отредактируйте это
настроить всю обработку. В частности, вы должны выбрать каталог спула
(в дальнейшем именуемый Spool) и каталог журналов (в дальнейшем именуемый Log).

Обратите внимание, что использование описанной выше процедуры автоматической установки не мешает вам
через файл и измените его по своему усмотрению. На самом деле, вам очень рекомендуется делать
это, особенно для настройки домашнего каталога, уровня ведения журнала и путь or p_host
переменные. Как только вы закончите, перезапустите почтовый агент -I команда, чтобы убедиться, что все в порядке
отлично. Тем не менее, вам придется подключить почтовый агент, создав ~ / .forward файл, как
объяснено в нескольких разделах.

Ниже приводится описание каждого из полей, которые вы найдете в ~ / .mailagent файл,
за которым следует предлагаемое значение, если применимо. Поля, отмеченные как необязательные, не могут быть
присутствует в файле конфигурации. Некоторые области тесно связаны с другими, и
это тоже дано.

эйджмакс Период, по истечении которого запись в базе данных должна быть удалена (рекомендуется: 1 год)
Это поле необязательно, но необходимо, если Автоматическая очистка есть.
авторизационный файл Авторизация удаленной отправки (пока не реализована).
Автоматическая очистка Если установить значение ON (без учета регистра), почтовый агент будет выполнять автоматическую очистку
записи в базе данных в хэш удалив все элементы старше эйджмакс. Это
необязательное поле, по умолчанию оно отключено. (рекомендуется: ВЫКЛ, если вы не используете
ONCE, UNIQUE или RECORD или активировать режим отпуска.)
стейк Требуется ли биффинг, когда почтовый агент доставляет почту в папку. Установленный
установите его в положение ВКЛ (без учета регистра), чтобы разрешить локальную синхронизацию, если вы вошли в систему.
(необязательно, по умолчанию: ВЫКЛ.)
придурок Когда biffing включен, в этой переменной указывается, какие заголовки должны быть напечатаны.
из. Заголовки должны быть приведены в их нормализованном формате и разделяться символом
запятые. (необязательно, по умолчанию: От, Кому, Тема, Дата).
Bifflen Максимальная длина тела сообщения, которое должно быть напечатано при biffing.
(необязательно, по умолчанию 560).
биффлайны Максимальное количество строк тела сообщения, которое должно быть напечатано при
скучать. На самом деле, почтовый агент пытается напечатать это количество строк, если
общее количество напечатанных символов меньше, чем Bifflen. (по желанию,
по умолчанию 7).
бифмх При включении тело сообщения уплотняется перед обработкой путем удаления
последовательные пробелы и замена новой строки одним пробелом. Сообщение
сам по себе физически конечно не изменен, только вывод на экран
обеспокоенный. Поскольку это может привести к тому, что сообщение будет трудночитаемым, я предлагаю вам
также включи биффнис при использовании этой опции. (необязательно, по умолчанию: ВЫКЛ).
биффмсг Путь к файлу, описывающему формат, который должен использовать biffing. Если не установлен,
используется фиксированный формат по умолчанию. Приправить по вкусу. (предложенный: ~ / .biffmsg).
биффнис Следует ли переформатировать сообщение, чтобы оно хорошо вписывалось в терминал.
(необязательно, по умолчанию ВЫКЛ, рекомендуется: ВКЛ, когда бифмх тоже ВКЛ).
биффнл Определяет, должны ли печататься «пустые» строки тела. По «пустым» строкам,
мы имеем в виду строки, не содержащие слов. Установите его в положение ВКЛ, чтобы печатать такие пустые строки, чтобы
ВЫКЛ, если вы хотите получить более компактный вид тела в установленных пределах.
by Bifflen и биффлайны. (необязательно, по умолчанию включено).
цитата Управляет ли ведущая линия атрибуции, вводящая сокращенную цитату
должен быть частью сообщения biff или нет. Когда выключено, линия атрибуции
обрезается, и об этом сообщается в сообщении об обрезке, когда биффтрим is
НА. (необязательно, по умолчанию включено).
биффтрим Определяет, должны ли обрезанные строки в сообщении biff заменяться
сообщение о том, сколько из них было обрезано. Используется только% -T biffing
макрос. При выключении автоматически выключается цитата также. (по желанию,
по умолчанию включено).
Bifftrlen Указывает, сколько строк должно быть в ведущей цитате перед выполнением любого
обрезка. Используется только макросом biffing% -T. (необязательно, по умолчанию 2).
вызывать Имя файла очереди выноски, в котором хранятся пакетные задания. Этот параметр
должен быть определен при использовании команды AFTER. (рекомендуется: $ spool / callout)
чистые хлопки Период очистки записей в базе данных. Значение последней очистки сохраняется
в файл контекста. Это необязательно, но необходимо, если Автоматическая очистка есть.
(рекомендуется: 1 млн)
компилировать Имя файла, содержащего авторизованные команды. Требуется при использовании ПРОЦЕССА.
(предлагается: $ spool / commands).
сжимать Имя файла, содержащего список сжатых папок. См. Раздел о
сжатие папки. Это необязательный параметр. (предложенный: ~ / .compress).
спецификации Имя файла, содержащего спецификации того, как обрабатывать различные типы
форматы сжатия. См. Раздел о сжатии папок. Это необязательный
параметр. (рекомендуется: $ spool / компрессоры).
комптаг Тег сжатия по умолчанию при создании новых папок. Если не указано иное,
по умолчанию - gzip.
Comserver Имя файла, содержащего авторизованные команды СЕРВЕРА, и их определение.
Это необязательный параметр, если вы не планируете использовать общий почтовый сервер.
(рекомендуется: $ spool / server).
контекст Файл, содержащий контекст почтового агента. Контекст сохраняет некоторые переменные, которые нуждаются в
храниться в течение всего процесса. Требуется, если активирована автоматическая очистка.
(предлагается: $ spool / context)
список дистрибутивов Список всех доступных дистрибутивов. См. Образец, хранящийся в
Lib / mailagent / distribs. Требуется только для ПРОЦЕССА. (рекомендуется: $ spool / distribs)
домен Ваше доменное имя без начальной точки, как в example.com, Значение
добавлен к значению e-mail если в этой переменной нет символа «@», чтобы
создать полностью квалифицированный адрес электронной почты. Также скрытая сеть Переменная.
(необязательно, по умолчанию используется доменное имя, определенное во время сборки).
e-mail Ваш адрес электронной почты. Если не указано иное, почтовый агент попытается угадать
Это. Этот адрес используется почтовым агентом при попытке отправить что-то пользователю.
(ты!). (рекомендуется: указать свой адрес электронной почты).
Emergdir Имя каталога, который желательно использовать для дампов. Это
по желанию. (предложенный: ~ / tmp / потерян+ почта)
Execsafe Следует ли быть строгим перед использованием exec () запускать новый процесс или нет. В
значение этой переменной используется вместо безопасный при проверке исполняемого файла
файлы. (по умолчанию ВЫКЛ, рекомендуется: ВКЛ, если возможно).
выполнение Следует ли пропустить exec () все проверки безопасности. Не включай это
если вы действительно не доверяете всем пользователям, имеющим доступ к вашему компьютеру или файлу
сервер. (необязательно, по умолчанию выключено, рекомендуется: выключено).
от всего Так или иначе почтовый агент должен избежать всех От строк в сообщении, а не
только те, кого он считает опасными (т. е. От после пустой строки).
Этот вариант имеет смысл только тогда, когда от также активируется. Игнорируется
в противном случае и, следовательно, не является обязательным. По умолчанию предполагается, что он выключен.
(рекомендуется: ВЫКЛЮЧЕНО, пока у вас не появятся причины полагать, что ваш почтовый пользовательский агент
запутался в этом режиме: когда это произойдет, ваш пользовательский агент будет разделять почту без
очевидная причина).
от Так или иначе почтовый агент должен избежать потенциально опасного От строки в почте
Сообщения. Если вы используете MH или ваш почтовый клиент не использует эти строки для
отдельные сообщения, затем вы можете установить его в положение ВЫКЛ. (рекомендуется: ВКЛ.)
из подделки Так или иначе почтовый агент должен подделать строку From: в заголовок сообщения, когда
его нет. Естественно, для работы требуется действующая ведущая строка From!
(необязательно, по умолчанию ВКЛ, рекомендуется: ВКЛ).
групповой Если выключено, то файлы с возможностью групповой записи будут управляться, как если бы они были безопасными,
с точки зрения безопасности. Если возможно, оставьте его включенным, иначе вы можете пройти мимо
огромная дыра в безопасности без вашего ведома (необязательно, по умолчанию включено, рекомендуется:
НА).
хэш Каталог, используемый для хеширования имен встроенной базой данных, используемой ONCE,
Команды UNIQUE и RECORD. Необязательно, если вы не используете эти команды или
активировать автоочистку. Каталог помещается в область спула. (предложенный:
$ spool / dbr).
helpdir Каталог, в котором хранятся файлы справки для команд СЕРВЕРА. (предложенный:
$ spool / help)
скрытая сеть Когда установлено значение ON, значение переменной домен это полное имя
использовал. Когда ВЫКЛЮЧЕНО, имя хоста добавляется к домен. Если имя хоста
уже полностью квалифицирован, тогда стоимость домен игнорируется. Пылесосить домен
на example.com и имя хоста кашель, затем полное имя
будет хост.example.com if скрытая сеть ВЫКЛЮЧЕНО, и example.com если ВКЛ. (по желанию,
по умолчанию то, что было определено во время сборки)
главная Определяет, где находится домашний каталог. Это должно быть точно.
уровень Уровень журнала, см. Ниже определение доступных уровней (рекомендуется: 9).
каталоги ссылок Если установлено значение ON, тщательно проверяет символические ссылки на каталоги при выполнении
проверка безопасности конфиденциальных файлов. Это будет (рекурсивно) проверять каждый
уровень символической ссылки, что целевой каталог не доступен для записи или группы
доступен для записи и что родительский каталог каждой целевой ссылки не является мировым
доступный для записи. Если безопасный опция ВЫКЛЮЧЕНА, этот параметр игнорируется. (по желанию,
по умолчанию: ВКЛ, рекомендуется: ВКЛ, когда защита также включена).
Lockdekay Задержка в секундах между двумя попытками блокировки. (необязательно, по умолчанию: 2).
замок Максимальная задержка в секундах для удержания блокировки. По истечении этого времени замок
быть сломанным. (необязательно, по умолчанию: 3600).
локмакс Максимальное количество попыток блокировки до отказа. (необязательно, по умолчанию:
20).
безопасный При блокировке файла почтовый агент обычно делает локмакс попытки разделены
Lockdelay секунд, а затем сдается. Столкнувшись с доставкой в ​​почтовый ящик, он
может иметь смысл продолжить, даже если блокировка не была захвачена, или даже если
была сделана частичная блокировка (например, одна из блокировок в стиле .lock или flock ()
удалось). Эта переменная определяет, насколько вы хотите быть в безопасности. Установите его в положение ВЫКЛ, чтобы
mailagent продолжает доставку своего почтового ящика, даже если блокировка не была произведена, в положение ВКЛ.
если вам нужна строгая блокировка, выберите ЧАСТИЧНУЮ, если вы можете жить с частичной блокировкой.
Сообщения, не сохраненные в папке, сбрасываются в почтовый ящик для экстренных случаев. (по желанию,
по умолчанию включено). В системах Debian, поскольку почтовый агент не может захватить замки, он должен
всегда должен оставаться включенным, иначе может произойти искажение почты. Видеть
/ usr / share / doc / mailagent / БЕЗОПАСНОСТЬ для получения информации.
Локварн Эта переменная контролирует время, по истечении которого почтовый агент должен начать излучать
предупреждение, когда занят попыткой получить блокировку. Это список разделенных запятыми
значения в секундах. Если даны два значения, первое - начальное время.
порог, второй - период повторения. Например, значение «15,60»
вызовет предупреждение через 15 секунд, а затем каждые 60 секунд, пока блокировка не будет
принято или время попытки блокировки истекло (см. локмакс и Lockdelay). если
дается только одно значение, оно принимается как начальный порог и
период. (необязательно, по умолчанию: 20,300 XNUMX).
журнал Имя файла журнала, который будет помещен в каталог журнала. (предлагается: журнал агентов).
каталог журнала Каталог журналов. (предложенный: ~ / var / журнал).
почтовый ящик Имя файла системного почтового ящика, которое по умолчанию является значением пользователь
переменная конфигурации. Это необязательный параметр.
почтовый адрес для Расположение каталога спула системной почты. Если ничего не указано, то
mailagent будет использовать значение, определенное Configure.
рассылка по почте Параметры, передаваемые почтовой программе (см. Отправить письмо). (необязательно, рекомендуется: -odq
-i, при использовании sendmail).
макскмдс Максимальное количество команд, которые могут быть выполнены командой СЕРВЕРА
перед сбросом оставшейся части почтового сообщения. (предложено: 10).
максимальные ошибки Максимальное количество ошибок для команды SERVER перед сбросом оставшейся части
почтовое сообщение. (предложено: 10).
максимальный размер Максимальный размер файлов в байтах перед использованием комплект для отправки файлов. Это используется
ПРОЦЕСС. (предложено: 150000).
мбокслок Формат, который будет использоваться для блокировки почтовых ящиков перед доставкой в ​​них. Этот
строка проходит через небольшой механизм подстановки макросов, чтобы сделать ее более
Общее. Имя файла, полученное после подстановки макроса, является именем блокировки.
который будет использоваться, учитывая имя файла, который должен быть заблокирован. Доступный
макросы:

% D: имя каталога файлов
% f: имя файла, который нужно заблокировать (полный путь)
% F: базовое имя файла (последний компонент пути)
% p: текущий pid-номер процесса
%%: простой символ%

Распространенными форматами блокировки являются «% f.lock» и «% D /.% F.lock». Конечно, чтобы уметь
используйте эту функцию, почтовый агент не должен быть настроен для использования стиля flock ()
только блокировка. (необязательно, по умолчанию:% f.lock). Это не влияет на Debian
системы, поскольку почтовый агент все равно блокировку получить не могу, так как это не sgid mail.
mhprofile Имя используемого профиля MH. Это нужно только при попытке
сохранить в папке MH. Если этот необязательный параметр не установлен, значение по умолчанию
~ / .mh_profile используется.
ммдф Установите для этого параметра значение ON, если вы хотите иметь возможность сохранять почту в почтовых ящиках в стиле MMDF.
(рекомендуется: ВЫКЛ, если вы не используете MMDF или MH). Это недопустимо в системе Debian.
ммдфбокс Значение этой переменной имеет значение только тогда, когда ммдф горит. Если установлено значение ON, то новый
папки будут созданы как MMDF. Эта переменная не используется при сохранении в
существующую папку, так как в этом случае почтовый агент автоматически
определите тип и сохраните сообщение соответственно. (рекомендуется: ВЫКЛЮЧЕНО, если
вы используете MMDF или хотите использовать MH мшф).
префикс сообщения Имя файла для размещения в папках каталога с указанием префикса сообщения для
использоваться. Необязательно, по умолчанию .msg_prefix.
имя Имя пользователя, используемое почтовым агентом при обращении к вам. Это устанавливает
значение макроса% U.
новая команда Имя файла, описывающего новые команды фильтрации. См. Раздел простирающийся
фильтрация Команды Больше подробностей. Оставьте этот необязательный параметр, если только
вы эксперт по почтовым агентам. (предлагается: $ spool / newcmd).
Newsopt Параметры, которые необходимо передать программе размещения новостей (см. послатьновости). (по желанию,
предложено: оставьте пустым при использовании inews).
нфслок Установите его в положение ON, чтобы обеспечить безопасную блокировку NFS. Разница в том, что имя хоста
используется вместе с PID для получения блокировки. Однако почтовый агент должен
fork / exec, чтобы получить эту информацию. Это необязательный параметр, который устанавливается
по умолчанию выключено. (рекомендуется: ВЫКЛ, если вы доставляете почту только с одного компьютера,
хоть через NFS).
ПАРОЛЬ Файл, в котором хранятся пароли доступа к серверу - обычно зашифрованный. (предложенный:
$ powers / passwd).
путь Минимальный путь, который будет использоваться программой фильтра C. Чтобы установить конкретный путь для
машина кашельустановить p_host Переменная. Это будет добавлен по умолчанию
PATH переменная, предоставленная другими программами. (предложенный: / бен:/ USR / бен: / usr / ucb).
Обратите внимание, что имя хоста должно быть указано без добавления к нему имени домена.
(например, для имени хоста lyon.eiffel.com, используйте переменную п_лион). Если ваш хозяин
name содержит в себе '-', вы должны написать его как '_', так как '-' не является допустимым
персонаж для Perl имя переменной.
перлиб Эта переменная может использоваться для изменения пути поиска Perl для требуемых файлов.
Каталоги должны быть разделены символом ':', как и PATH оболочки.
Этот путь добавляется к пути поиска perl по умолчанию. Любой каталог не
начиная с '/' (после замены имени) берется относительно
личный каталог библиотеки mailagent, определенный во время настройки.
пожалуйста Имя файла, используемого для сохранения уровней исправлений для архивных дистрибутивов. Этот
используется только командами, вызываемыми через PROCESS. (рекомендуется: $ spool / plsave).
каталог мощности Справочник, в котором перечислены права пользователей на полномочия СЕРВЕРА. (предложенный:
$ полномочия / разрешение)
список мощности Имя файла, содержащего псевдонимы мощности СЕРВЕРА. Поскольку названия мощности могут быть произвольными
длинный, но некоторые файловые системы по-прежнему имеют ограничение на 14 символов для имени файла
length, внутренние псевдонимы создаются и поддерживаются почтовым агентом. (предложенный:
$ полномочия / псевдонимы).
Powerlog Файл, в котором регистрируются запросы питания СЕРВЕРА, в дополнение к журналу агентов. С
это проблема безопасности, рекомендуется регистрировать их отдельно. Если не
определены, регистрировать их только в журнале агентов. (предлагается: $ logdir / powerlog).
полномочия Справочник для управления питанием СЕРВЕРА. (рекомендуется: $ spool / powers)
список Небольшое описание доступных дистрибутивов. См. Образец, хранящийся в
Lib / mailagent / proglist. Используется только PROCESS. (предложенный:
$ spool / proglist)
очередь Каталог очереди (сообщения, ожидающие обработки). Обязательно, конечно.
(рекомендуется: $ spool / queue)
очередь Максимальное количество секунд, в течение которых письмо может находиться в очереди почтового агента, прежде чем оно будет отправлено.
фактически обработано. В течение этого времени, почтовый агент не буду пытаться обработать
сообщение даже когда -q используется. (необязательно, по умолчанию: 1800).
очередь Максимальное количество секунд, по истечении которых почтовый агент следует отмечать сообщения, все еще находящиеся в
его очередь как старая. (необязательно, по умолчанию: 86400, т.е. день).
очередь Время в секундах, говорящее C фильтр запрограммировать, как долго он должен ждать, прежде чем
запуск почтовый агент. (необязательно, по умолчанию: 60, но можно уменьшить до 0, если вы
не хочу откладывать получение новых сообщений).
кэш правил Имя файла, используемого для кеширования последних скомпилированных правил. Поскольку обычно
почтовый агент работает в основном с одним и тем же файлом правил, это экономит накладные расходы
каждый раз перекомпилируя все правила. (необязательно, рекомендуется: $ spool / rulecache).
Rulemac Установите для этого параметра значение ON, чтобы разрешить подстановки макросов в шаблонах правил. (по желанию,
по умолчанию: ВЫКЛ).
условиями, Имя файла, содержащего правила фильтрации (необязательно для не Debian
системы, предлагаемые: ~ / .rules). В системах Debian необходимо иметь минимальные правила
файл, чтобы предотвратить почтовый агент от попытки поместить сообщения в
/ var / spool / mail /$ USER, поскольку почтовый агент не может заблокировать этот каталог, чтобы предотвратить почту
от искажения. Это потому, что политика Debian требует, чтобы все сущности
пытается заблокировать этот каталог, чтобы быть SGID почта, и сделать почтовый агент SGID
что угодно было бы лазейкой в ​​безопасности.
{СОХРАНИТЬ входящие};
- это предлагаемый файл минимальных правил.
Runmax Тайм-аут для команд RUN и друзей. (необязательно, по умолчанию: 3600).
сценарийcc Флаг, указывающий, следует ли отправлять копию стенограммы сеанса СЕРВЕРА
пользователю, запускающему почтовый агент. (предложено: ВЫКЛ.).
безопасный Когда установлено значение ON, mailagent и фильтр C будут выполнять расширенную защиту.
проверяет конфиденциальные файлы. Сюда входят проверки на возможность записи в группе,
проверка прав собственности и защиты в каталоге, в котором находится файл, и
проверяет символические ссылки на каталоги (только почтовый агент, когда linkdirs включен)
тоже). Обратите внимание, что предполагается, что безопасность включена, независимо от его реальных настроек, когда
работает как суперпользователь. (предложено: ВКЛ).
Отправить письмо Название программы, используемой для отправки почты. Эта программа должна принимать почту
сообщение с заголовками на стандартном вводе и списком получателей на
командная строка. Если не указано, будет использоваться почтовая программа, выбранная во время настройки.
(обычно sendmail). Командная строка, используемая для отправки сообщения, будет Отправить письмо
рассылка по почте адрес (а). (необязательно, рекомендуется: / usr / lib / sendmail).
послатьновости Название программы, используемой для публикации новостей. Эта программа должна принимать новости
статья с заголовками на стандартном вводе. Если не указано, будет использоваться новость
программа размещения, выбранная во время настройки (обычно в новостях). Командная строка
используется для публикации статьи будет послатьновости -h Newsopt. (необязательно, рекомендуется:
/ usr / local / bin / inews).
далее Файл, используемый для вычисления номеров заданий (рекомендуется: .seq).
сервдир Имя каталога, в котором хранятся команды оболочки и сервера Perl. Это
место поиска по умолчанию. Необязательный параметр, если не используется СЕРВЕР. (предложенный:
$ spool / cmds).
сервировочная раковина Это имя оболочки, используемой для запуска команд оболочки СЕРВЕРА (фактически для
обработать файл-оболочку, который в конечном итоге выполнит команду exec ()). На некоторых
в таких системах, как HPUX 10.x, для этого нужно указать / usr / old / bin / sh, чтобы получить простой
старая оболочка Борна, потому что / Бен / ш это безумная оболочка POSIX, которая закрывает файл
дескрипторы больше 2 при exec (), тогда как оболочка Bourne этого не делает.
(необязательно, рекомендуется: / Бен / ш если вы не используете HPUX 10.x, как объяснялось ранее).
шпуля Каталог буферизации, требуется (рекомендуется: ~ / var / mailagent).
файл статистики Файл, в котором нужно собирать статистику. Если такого файла нет, статистики нет.
будет записан (предлагается: $ spool / mailagent.st).
подделать Так или иначе почтовый агент должен подделать строку To: в заголовок сообщения, когда он
отсутствует, что будет использоваться для целей фильтрации (физическое изменение
заголовок происходит). Он использует заголовки Alternate-To :, если они найдены, в противном случае он предполагает
сообщение было отправлено пользователю и принимает значение из пользователь конфигурация
Переменная. (необязательно, по умолчанию включено, рекомендуется: ВКЛ; выключите, только если вы
хотите определить недостающие строки To: для обнаружения СПАМА).
мне Эта необязательная переменная может содержать список альтернативных логинов, разделенных запятыми.
которые также действительны для пользователя (почтовые псевдонимы). Используется в режиме отпуска
чтобы проверить, было ли письмо отправлено пользователю или в список рассылки. Соответствие
привязан к имени пользователя, поэтому фраза "ro *" будет соответствовать обоим корень и ПЗУ.
трек Установить on (без учета регистра), это включает -t вариант, который отслеживает все
совпадения правил и действия на стандартный вывод. Это необязательно (рекомендуется:
ВЫКЛЮЧЕННЫЙ).
часовой пояс Значение часового пояса для переменной среды TZ (необязательно).
tmpdir Каталог для временных файлов. Обязательно (рекомендуется: / Tmp).
Umask Маска по умолчанию, которая сбрасывается почтовый агент перед обработкой сообщения. Предполагается
должен быть десятичным, если он не начинается с «0» (для восьмеричного) или «0x» (для шестнадцатеричного).
Тем не менее восьмеричный формат - это самый простой способ указать его. (по желанию,
по умолчанию: 077).
пользователь Логин пользователя, который запускает почтовый агент. Устанавливает значение макроса% u.
отпуск Флаг, установленный в положение ВКЛ или ВЫКЛ, для переключения режима отпуска соответственно.
Vacfile Имя файла, который нужно отправить обратно в режиме отпуска (рекомендуется: ~ /. отпуск).
исправлен Когда включено, все изменения в файле отпуска (даже локально) с помощью
Команда ОТПУСК запрещена. Это полезно, если у вас обычно много
настраиваемые сообщения об отпуске для разных людей, но временно хотят принудительно
одно уникальное сообщение (необязательно, по умолчанию: ВЫКЛ).
вакпериод Минимальное время, прошедшее между двумя сообщениями об отпуске на заданный адрес
(предложено: 1d).

Доступен Запись Уровни
При работе почтового агента можно использовать следующие уровни журнала:

0 Нет регистрации
1 Только серьезные проблемы
2 Неудачные доставки
3 Успешные доставки
4 Отложенные сообщения
5 успешных действий фильтра
6 Необычные, но безобидные происшествия
7 Информационные сообщения
8 Действия фильтра недоставки
9 Прием почты
12 Отладка
19 Подробно
20 Больше подробностей

Подключение Почтовый агент
После того, как вы настроили почтовый агент в ~ / .mailagent (где ~ стоит для вашего дома
каталог), вы должны сказать Отправить письмо как его вызвать. Это делается путем установки ~ / .forward
файл, который выглядит так (начальные и конечные двойные кавычки являются обязательной частью
Это):

"| exec / users / ram / mail / filter >> / users / ram / .bak 2> & 1"

Это направит все ваши письма на фильтр программа, перенаправляя все необычные сообщения на
~ / .bak. Пример сценария оболочки фильтра можно найти в Lib / mailagent, а также фильтр C
программа. В некоторых системах может потребоваться переместить символ '|' персонаж перед ведущим
цитата, но не пытайтесь это сделать, если у вас нет другого выбора (т.е. только в крайнем случае).
Также, видимо Exim принимает исключение для exec и даже, возможно, для перенаправления -
что было бы жаль.

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

Если ваша система не разрешает перенаправление оболочки из .forward, вы можете использовать это
вместо этого (поддерживается только фильтром C):

"| exec / users / ram / mail / filter -o /users/ram/.bak"

что фактически перенаправляет стандартный вывод и STDERR в указанный файл для вас, добавляя данные
в конце файла. Если фильтр запускает setuid или setgid, вы не сможете
создать файл или добавить к нему, если владельцем файла не является реальные вызов uid
программа (в целях безопасности).

Обратите внимание, что .вперед файл только направляет почту в фильтр программа и не уходит
любая копия в почтовом ящике. Вам решать в файле правил, хотите ли вы
выбросьте почту или оставьте ее в почтовом ящике (обратите внимание, что в системах Debian почтовый агент
не блокировать каталог спула, и если он оставит почту в почтовом ящике, это может привести к
искажено). Если у вас нет файла правил (т.е. вы оставили пустую запись в своем
~ / .mailagent, или вы назвали несуществующий файл, или ваш файл просто пуст),
действие по умолчанию - оставить почту в почтовом ящике, что не является хорошей идеей для Debian.
машины. Пожалуйста, установите минимальный файл правил в любом случае,
{СОХРАНИТЬ входящие};
- это предлагаемый файл минимальных правил.

Разрешено Команды
Разрешенный командный файл (как указано компилировать переменная в вашем ~ / .mailagent)
содержит все распознанные и разрешенные команды. Файл команды хранится в каталоге
Lib / mailagent должны быть скопированы как есть в каталог спула.

Тестирование Ваша Установка:
Теперь, предполагая, что вы установили правильный ~ / .mailagent файл и отредактировал раздел конфигурации
фильтр, пора протестировать вашу установку. Убедитесь, что ваш .вперед это мир
читаемый и что фильтр установлен бит выполнения (нет причин делать
фильтр читаемый мир). Установите уровень журнала 20 и отключите режим отпуска ( отпуск
запись в ~ / .mailagent должен быть ВЫКЛЮЧЕН). Задайте имя файла правил для файла
содержащее универсальное правило:
{СОХРАНИТЬ входящие};
Вы готовы продолжить ...

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

получил право обрабатывать почту
построение правил по умолчанию
анализ почты
анализ почты
в режиме «НАЧАЛЬНЫЙ» для ВСЕХ
селектор 'Все' на '<1, ->', шаблон '/ ^ Тема: [Cc] ommand /'
соответствие '/ ^ Subject: [Cc] ommand /' на 'All' (<1, ->) было ложным
селектор 'Все' на '<1, ->'
соответствие. на 'All' (<1, ->) было верно
сохранение в папке входящих
XEQ (ВЫЙТИ)
начало LEAVE
запуск SAVE / home / ram / mail / incoming
СОХРАНЕНО [qm7831] в папке входящих
ФИЛЬТР [qm7831] из барана (Рафаэль Манфреди)
почтовый агент продолжается
почтовый агент выходит

Если вы этого не понимаете, значит, где-то есть проблема. Начните с просмотра ~ / .bak файл
(или любой другой файл .вперед используется для перенаправления вывода фильтра). Если ты видишь
что-то вроде:

FATAL нет допустимого каталога очереди
ЗАБЛОКИРОВАНО ~ / mbox.filter

тогда это означает очередь параметр в вашем ~ / .mailagent не указывает на действительный
каталог. Ваша почта была отправлена ​​в аварийный почтовый ящик.

The ~ / .bak файл также может содержать сообщения об ошибках, в которых говорится, что Perl не был найден. В этом
В этом случае в файле журнала должно быть сообщение об ошибке:

Ошибка почтового агента ERROR, [qm7886] остался в очереди

В этом случае убедитесь, что письмо правильно поставлено в очередь в файле. qm7886. Очередь
будет обработан снова, когда придет другое письмо или когда почтовый агент вызывается с -q
(однако, чтобы избежать условий гонки, только письма, которые остались на некоторое время, будут
обработанный).

Очередь почты также происходит, когда другой почтовый агент это работает. Если в файле журнала написано:

отказано в праве на обработку почты

затем удалите perl.lock файл в каталоге спула. Старые файлы блокировки автоматически
отброшен почтовый агент в любом случае (через час).

Если ничего из этого не происходит, возможно, Отправить письмо не обработал ваш ~ / .forward вообще или
файл имеет синтаксическую ошибку. Проверьте свой почтовый ящик, и если там ваша почта, то ваш .вперед
не обработано. В противном случае попросите системного администратора проверить Отправить письмо's
лог-файл. Правильная запись будет выглядеть как (с ведущими отметками времени и отметками системного журнала
удаленный):

идентификатор сообщения =[электронная почта защищена]>
from = ram, size = 395, class = 0, получено от местного
to = "| / york / ram / mail / filter >> / york / ram / .bak 2> & 1", delay = 00: 00: 05, stat = Sent

Если вы все еще не можете найти, почему письмо не было правильно обработано, убедитесь, что
вы обычно получаете почту, удаляя (или переименовывая) свой ~ / .forward и посылая себя
еще одно тестовое письмо. Также убедитесь, что ваш домашний каталог доступен для чтения и является «исполняемым».

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

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

ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ


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

-c файл Укажите альтернативный файл конфигурации (~ происходит подстановка). В
по умолчанию ~ / .mailagent.

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

-e править Эта опция позволяет вам указать некоторые правила в командной строке, которые будут
переопределить те, которые указаны через ~ / .mailagent, если есть. Может быть сколько угодно
-e по мере необходимости, все правила объединяются в одно счастливое
массив, который затем анализируется так же, как и файл правил. Если только one править
задано и между фигурными скобками {...} не указано никакого действия, то
вся строка заключена в фигурные скобки. Следовательно, говоря -e 'СПАСТИ фу ' будет
понимается как -e '{СПАСТИ foo} ', который всегда будет соответствовать и выполняться.
Посмотрите на график -d вариант в сочетании с этим - удобный способ
отладить набор правил.

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

-F Принудительная обработка уже просмотренных сообщений. Как правило, почтовый агент входит в
особый _ВИДЕЛ_ состояние, когда он обнаруживает X-фильтр: линия выдана сама по себе,
но при выборе этого варианта это будет продолжаться как обычно (хотя сообщения об отпуске
отключены). Используйте эту опцию, если после обработки почта уже отфильтрована.
Также посмотрите на -U переключитесь, если вы используете ЗАПИСЬ или УНИКАЛЬНО в
некоторые правила.

-h Распечатайте сообщение об использовании стандартной ошибки и выйдите.

-i В интерактивном режиме почтовый агент должен распечатать копии всех сообщений журнала.
on STDERR.

-I Установить ~ / .mailagent файл из шаблона или объединить новую конфигурацию
переменные в существующий файл; затем выполните проверки работоспособности и создайте
обязательные файлы или каталоги. Эту опцию можно рассматривать как помощь в
создание почтовый агентокружающая среда. В любом случае созданные / объединенные
~ / .mailagent файл следует проверить вручную перед тем, как разрешить почтовый агент сделка
с вашей почтой, подключив ее к ~ / .forward.

-l Перечислите очередь почтового агента. Недавно поставленные в очередь письма, ожидаемые
фильтр пропущено примерно на полчаса, чтобы избежать условий гонки. Этот
может быть настроен через очередь Переменная. Действительно старые сообщения (подробнее
чем очередь секунд назад) помечаются символом '#'. Сообщения исходят
очереди (очередь переменная) помечены знаком '*', а старые сообщения
вне очереди обозначаются знаком «@». Заблокированные сообщения помечаются знаком "*"
добавлен к их статусу.

-L уровень Отменить уровень журнала, указанный в файле конфигурации.

-o переопределение Эта опция позволяет вам переопределить конкретную опцию конфигурации. Опция
должна сопровождаться действительной строкой конфигурации, которая будет проанализирована после
сам файл конфигурации. Например, -L 4 вариант полностью
что эквивалентно -o 'уровень: 4'. Обратите внимание, что любое пустое пространство должно быть защищено
против интерпретации оболочки с помощью соответствующего механизма кавычек.
Может быть сколько угодно -o параметры в командной строке по мере необходимости.

-q Принудительная обработка очереди почтового агента. Только письма, не помеченные как пропущено
не провела обыск -l вариант будет обработан.

-r файл Укажите альтернативный файл правил.

-s {умарит} Составьте сводку всей собранной статистики. Выход может быть
управляется добавлением одной или нескольких букв из набора {umaryt}. С использованием
-резюме удобный способ получить всю историю фильтра
действия. В u модификатор выведет только используемые правила. В m объединит все
статистика в конце, пока a сообщает, в каком режиме находился фильтр, когда
команда была выполнена. В r запрашивает статистику на основе правил и y is
довольно бесполезно и здесь только для того, чтобы получить хороший мнемонический вариант. Обратите внимание, что
указание опции более одного раза никак не влияет на эту опцию
сам (т.е. вы можете поставить три Uu и только один m, но вы все равно получите
резюме!). В t за буквой могут следовать цифры, указывающие, сколько правил
версии файлов относительно самого верхнего (самого последнего) файла правил, который мы должны
извлечь из статистики, что сумма по умолчанию равна 1: используя -сурат предусматривает
распечатать полный статистический отчет для последней версии ваших правил,
в то время как -сурт12а сделал бы то же самое для последних двенадцати версий тех же самых
правила.

-t Переведите почтовый агент в специальный режим отслеживания, где все правила совпадают и
выполненные действия выводятся на стандартный вывод. Это в основном полезно
для отладки файла правил. Также трек Параметр в
Файл конфигурации.

-V Распечатать номер версии и выйти.

-U Запретить командам UNIQUE и RECORD отклонять уже обработанный
Идентификатор сообщения при первом запуске для данного сообщения. Это полезно
при обработке сообщений, которые были отброшены в Emergdir каталог
из-за какого-то ненормального (но временного) состояния, и вы хотите повторно обработать
сообщение. Также см. -F переключитесь, если вы повторно обрабатываете сообщения.

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

С ПОМОЩЬЮ DEFAULT ПРАВИЛА


Если вы не хотите использовать функцию фильтрации почтового агента, (НОТА: Это может вызвать почту
быть искаженным в системах Debian, поскольку почтовый агент не может заблокировать каталог spol под
Ограничения политики Debian), будут использоваться встроенные правила по умолчанию. Это
действительно просто: все письма остаются в вашем почтовом ящике, а письма со строчкой «Тема:
Команда "в любом месте сообщения будет обработана. Команды ищутся в строках
начиная с «@SH». Оставшаяся часть строки затем передается оболочке для выполнения.

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

Если вы не хотите использовать правила по умолчанию, вы можете пропустить оставшуюся часть этого раздела.

Настройка Помощь
Текст справки, который почтовый агент отправит людям, должен быть скопирован из Lib / mailagent / agenthelp
в ваш собственный каталог спула, как указано в вашем ~ / .mailagent. Можно использовать два макроса:

= DEST = Он будет расширен до адреса отправителя (того, кто отправил вам письмо
в настоящее время обрабатывается почтовым агентом).

= МАКСИМАЛЬНЫЙ РАЗМЕР = Это означает максимальный размер, установленный перед комплект используется для отправки файлов обратно
(параметр максимальный размер и на Вашем ~ / .mailagent файл).

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

Распределение Файлы
Два файла список и раздает состоявшейся в Lib / mailagent опишите дистрибутивы вашего
mailagent сможет распространять. Приведенные образцы показывают ожидаемый синтаксис. В
Чтобы прояснить ситуацию, вот каким должен быть формат:

Файл список содержит небольшое описание программ. Появляется название программы
после единственной звезды. За ним следуют строки в произвольном формате. Необязательная линия из трех штрихов
отделяет описание каждой программы. Обратите внимание, что ведущая вкладка будет добавлена ​​к каждой строке.
описания.

The раздает файл содержит строки следующего вида:

имя программы версия путь заархивированном сжатый патчи

где:

имя программы это имя программы (такое же, как упомянутое в список).

версия это номер текущей версии. Если нет, можно использовать трехпунктную линию.

путь - это путь, по которому хранится дистрибутив. ~ Будет расширен до вашего
домашний каталог. Обратите внимание, что если дистрибутив хранится в архивной форме,
имя пути - это имя архива без конечного расширения (которое может быть
.cpio.Z or .tar.Z).

заархивированном либо y or n в зависимости от того, заархивирован дистрибутив или нет.

сжатый
либо y or n в зависимости от того, сжат дистрибутив или нет.
Об этом можно догадаться по названию расширения, но мы должны думать о файле
системы с короткими именами.

патчи is y or n в зависимости от того, поддерживаете ли вы дистрибутив или нет. Если
вы положили p, это означает, что доступны официальные исправления, хотя вы не
поддерживать распространение. Наконец, o означает, что это старая версия,
где доступны только патчи, но maildist работать не будет. В этом случае,
предполагая, что номер версии 1.0, старые патчи ожидаются в ошибки-1.0
каталог.

Вы можете включать комментарии в оба файла: все строки, начинающиеся с ведущего #, будут
игнорируются.

Тестирование Ваша Почта Агент
Пришло время убедиться, что ваш почтовый агент работает. Отправьте себе следующее письмо:

Тема: Команда
@SH почтовая помощь

Вы должны получить ответное письмо от себя с темой: «Как использовать мой
mailagent ". Если нет, проверьте файл ~ / .bak (или любой другой файл, который вы установили в своем
.вперед). Если он пуст, посмотрите файл журнала. Если файл журнала не пустой, то
возможно, письмо было поставлено в очередь. Проверить Отправить письмо очередь. Также убедитесь, что вы
удалил комментарии '#' в фильтр сценарий. В некоторых системах они вызывают проблемы.
Если вы используете фильтр C, возможно, ваш sendmail не работает, и вам нужно создать свой собственный
setuid copy (или Perl может пожаловаться на ошибку ядра и т. д.).

Если вы все сделали правильно, но он по-прежнему не работает должным образом, увеличьте уровень журнала
на номер 20 и повторно отправьте командное письмо. Затем проверьте файл журнала. Диагноз должен быть
проще.

Как только это сработает, вы должны проверить свой раздает и список файлы, отправив себе
следующая почта:

Тема: Команда
@SH почтовая рассылка

Если список, который вы получили взамен, неверен, значит, ваши файлы распространения неверны.
написано. Если вы не получили список, значит, проблема с почтовым агентом.
конфигурация. Повторите попытку с уровнем журнала, установленным на 20, и просмотрите выданные сообщения журнала в
ваш каталог журналов. Убедитесь, что файл, указанный в пожалуйста запись вашего
~ / .mailagent правильно обновляется после почтовая рассылка был запущен.

С ПОМОЩЬЮ ФИЛЬТР


The почтовый агент также может использоваться как фильтр: почта анализируется и предпринимаются некоторые действия
на основе простых закон-подобные правила. Действия варьируются от простого сохранения в папке до
пересылка другому человеку или даже порождение команды оболочки. Прежде чем идти дальше,
вот небольшой пример действующего файла правил:

От: root {FORWARD postmaster};
В: [электронная почта защищена] {POST mail.gue};
Тема: / metaconfig / {SAVE dist};
{СОХРАНИТЬ входящие};

Есть три различных правила. Правила применяются последовательно до тех пор, пока не будет найдено одно совпадение (так что
порядок важен). Любая почта, приходящая от корень будет перенаправлено пользователю почтмейстер,
почта, адресованная [электронная почта защищена] это письмо, пришедшее из списка рассылки. Письмо отправлено
в местной группе новостей mail.gue. Письма, тема которых содержит слово "metaconfig", будут
сохранено в папке расстояние для отложенного чтения и не будет отображаться в основном почтовом ящике. Если нет
правило совпадает, почта остается в папке входящих.

Правило Файл Синтаксис
Вот неформальное описание файла правил. Разбор файла выполняется лексически,
отсюда и выбор однозначных лексем, таких как '{' или ';' которые легко разбираются. Этот
вводит некоторые ограничения, которые применяются неявно: например, нельзя использовать '{'
как часть адреса.

Комментарии начинаются с символа «#» в начале, который должен стоять на левом поле. В отличие от оболочки
комментарии, знак «#» без выравнивания по левому краю не будет восприниматься как комментарий. Тем не мение,
перед знаком "#" разрешены пробелы или табуляции.

Все операторы в файле правил должны заканчиваться знаком «;». В основном четыре части
каждая строка. Список режимов, разделенных запятыми, между '<' и '>', которые дают набор
режимы, в которых применяется правило. В специальном режиме ALL все подойдет. Фильтр
начинается в режиме INITIAL. Если вы не укажете режим по умолчанию, " ". Можно охранять
правило против какого-то конкретного режима, отрицая его, что делается путем добавления к режиму префикса
'!'. Отрицательные режимы имеют приоритет над другими простыми режимами, что означает " " никогда не будет
совпадают, когда-либо, и это " " эквивалентно " ".

Затем следует список селекторов. Эти селекторы должны быть разделены пробелами и заканчиваться знаком «:».
Они представляют собой названия полей заголовков, которые должны быть рассмотрены в предстоящем
шаблон. Пустой список селектора по умолчанию - «Тема:». Специальные селекторы «Все:», «Тело:»
и "Заголовок:" применяются ко всему сообщению, его телу или заголовку. Часто используемый селектор
list - «Кому Копия:», который проверяет поля получателя заголовка. Если имя селектора
предваряется восклицательным знаком '!', затем логическое значение теста для этого селектора
отрицается.

Список селекторов может заканчиваться необязательной спецификацией диапазона, представленной как <мин, макс>,
перед последним символом ':', обозначающим конец списка выбора. Минимум или
Максимум может быть обозначен как '-', и в этом случае он заменяется минимальным или максимальным
возможное значение. Индексы для выбора начинаются с 1 (а не с 0), например: <3, 7>. Если нет
дается выбор диапазона, затем значение по умолчанию <1, -> используется. Диапазоны обычно выбирают строки
в соответствующем буфере, если селектор не ожидает список, и в этом случае он
работает с элементами списка. Например, Тело <3, 5>: выберет строки с 3 по 5
(в комплекте) из тела письма, тогда как к Cc <1,3>: сосредоточился бы на первых трех
адреса в каждой строке заголовка To: или Cc :. Отрицательные значения относятся к такому количеству строк или
обращается с конца, т.е. Cc <-2, ->: выбирает два последних адреса на Cc:
линия. Одно число, такое как понимается как <2, 2>, т.е. выбирает только один элемент
в списке, <-> означает все (и, следовательно, является избыточным).

Затем за селектором следует образец в '/' или одно имя. Чтобы
облегчить написание правил, семантика одного имени варьируется в зависимости от
селектор. Для специальных селекторов «От:», «Кому:», «Копия:», «Отправитель:» их
связанные поля "Resent-", "Reply-To:", "Envelope:" и "Apparently-To:", одно имя
понимается как совпадение на Войти имя адреса. Обратите внимание: если нет поля "Кому:"
присутствует в заголовке, один будет подделан из "Очевидно-Кому:" с целью
только фильтрация (т. е. никаких физических изменений в заголовке не производится). Если логин
адрес - это полное имя формы First.Last, сохраняется только фамилия, и
нижний корпус. Если указано только одно имя, только метасимволы оболочки * и? находятся
разрешены, а также интервалы [].

Если перед шаблоном стоит один восклицательный знак '!', То статус совпадения будет
инвертирован (то есть будет успешным, если шаблон не будет найден). Если одно слово используется для
неспециальные селекторы, применяются те же правила, но шаблон привязан к началу
и конец для точного совпадения. Если шаблон начинается с '/', любое регулярное выражение
понимается Perl могут быть использованы, и ваш рисунок никоим образом не будет изменен. Другой
специальный селектор «Группы новостей:» работает как «Кому:», за исключением того, что ожидаются имена групп новостей.
и выполняется попытка сопоставления для каждого элемента в списке. Каждый шаблон соответствует одному имени
для поля типа адреса (например, "Группы новостей:" исключены), делаются без учета регистра
режим. В противном случае вы можете принудительно выполнить поиск без учета регистра, добавив завершающий i вариант,
как в / узор / я.

Также существует небольшая магия при сопоставлении по полю адреса. А именно, если
узор - это не одно слово, а привязанного at начало, то только адресная часть
поля будут сохранены. Например, если у нас есть поле From :, значение которого Рафаэль
Манфреди <[электронная почта защищена]>, то узор / Рафаэль / будет соответствовать, но не / ^ Рафаэль /.
Вместо этого, /^RAM@.*$/ будет соответствовать, но это легче сделать с помощью шаблона из одного слова
баран, поскольку он фокусируется только на имени входа в адрес и также будет соответствовать, если
адрес был написан как eiffel.com! баран. Единый адрес в Интернет-форме, как в
[электронная почта защищена] неявно соответствует адресной части поля, и вы не должны
избежать "." как и в регулярном выражении.

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

# Соответствие [электронная почта защищена] так же как и сигнал [электронная почта защищена].
От: барана

# Соответствие [электронная почта защищена], баран но не [электронная почта защищена]
От: r [oa] *

# Соответствие [электронная почта защищена] но не [электронная почта защищена]
Кому: /^gue@eiffel\.fr/

# Это будет соответствовать [электронная почта защищена] так же как и сигнал [электронная почта защищена]
Кому Копия: / gue @ eiffel /

# Соответствие comp.lang.perl но не comp.lang.perl.поэзия (?)
Группы новостей: comp.lang.perl

# Принимать все, кроме сообщений от корень
От:! Root

При попытке сопоставить "To:", "Cc:" или "Apparently-To:" список адресов разделен
через запятую, тогда как после "От:" ожидается только один адрес. Если вы опустите
шаблон, он будет пониматься как * (напомним, что одно слово использует мета-
символов), который будет соответствовать чему угодно.

Затем следует действие, которое необходимо предпринять при совпадении. Есть только ограниченный набор
действительные действия, которые будут подробно описаны в ближайшее время. Действие заключено в фигурные
фигурные скобки '{' и '}' и действия разделяются или заканчиваются (в зависимости от вашего вкуса)
';'. Имена действий пишутся в верхнем регистре для удобства чтения, но регистр значения не имеет. Если
вы хотите поставить ';' внутри правила его нужно экранировать, поставив перед ним
обратная косая черта. Двойная обратная косая черта преобразуется в одиночную, а любой другой escape-символ
последовательность, содержащая символ обратной косой черты, игнорируется (т.е. \ n будет сохраняться дословно).

Обратите внимание, что правило должно заканчиваться одним ";" после последнего '}'. Возможно
опустите этот последний ';', но этот единственный токен является точкой повторной синхронизации для ошибки
восстановление. Однако можно утверждать, что не должно быть синтаксической ошибки и, следовательно, символа ';'
должно быть безопасно опущено. В случае сомнений проверьте файл правил с -d опцию.

Вот типичное правило (с использованием Perl регулярные выражения; пожалуйста, обратитесь к
подраздел Стандарт Expressions для дополнительной информации):

Откуда: /^\[электронная почта защищена]$/ { СОХРАНИТЬ Эйфелеву };

Это правило будет учитываться только тогда, когда фильтр находится в режиме ROOT (напомним, что
обработка начинается в режиме INITIAL; используйте BEGIN, чтобы изменить режим, как в закон). Так что в
режим ROOT, все, что исходит от пользователя, находящегося в eiffel.com сайт сохранен в
папку. эйфель для отложенного чтения. Почта не появится в почтовом ящике.

Для правила можно выбрать несколько вариантов. Идентичные селекторы
логически orэд, а разные иизд. Выборки разделены запятыми. Для
экземпляр,

От: root, Кому: ram, От: ram, Тема: / \ btest \ b / {УДАЛИТЬ};

удалит письмо из корень or баран если он будет отправлен баран и имеет слово тест В своем
тема. Также можно записать предыдущее правило как:

От: root, ram, Кому: ram, Тема: / \ btest \ b / {DELETE};

потому что, если селектор не задан, используется предыдущий (с первым селектором
«Тема:» по умолчанию).

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

почтовый каталог = ~ / mail;

направит фильтр на использование ~ / mail в качестве каталога папки (по умолчанию ~ / Почта). Обратите внимание
~ подстановка и финальный ';'. Невозможно (в настоящее время) изменить среду
например, установив PATH.

Наконец, есть специальная конструкция для загрузки шаблонов из файла. Выкройка, заключенная в
двойные кавычки означают, что применяемые шаблоны должны быть взяты из указанных
файл. Ожидается, что файл будет в каталоге почтовый фильтр если это не абсолютный путь
(~ происходит подстановка). Если переменная не установлена Maildir будет использоваться. Если случайно (!)
Maildir тоже не установлен, используется домашний каталог. Файл должен содержать один шаблон
на строку, комментарии оболочки (#) разрешены в начале каждой строки.

За действием могут следовать другие правила. Следовательно, совершенно верно следующее:

От:
таран {СОХРАНИТЬ таран}
/ plc / i {SAVE plc}
root {СОХРАНИТЬ ~ / админ }
/ xyz / {УДАЛИТЬ}
"пользователи" {LEAVE}
;

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

Селектор Сочетание
Одно правило может иметь различный набор селекторов. Например, в следующем правиле:

От: ram, В Копию: root,! Тема: / test /, От: raphael

у нас есть следующий набор {From, To Cc,! Subject}. Первые два селектора называются
направлять селекторы,! Subject: называется инвертированный селектор. Селектор To Cc: группы
селектор разложить на два направлять селектора, а From: атомное селектор.
Наконец, From: также является селектором с с разными происшествий. В ценностное селектора
его соответствующее логическое значение статуса.

Позволять D быть набором прямых селекторов и N набор инвертированных селекторов, которые образуют
разделение R, набор всех селекторов в правиле. То есть, R это союз
of D и N и D пересекается с N является пустым множеством (тривиальное доказательство: селектор либо
прямое или отрицательное). Если либо D or N пусто, значит, это не раздел, но в этом случае
у нас есть либо D = R или еще N = R.

Определим логическое значение набора S как логическое значение, которое фильтр будет
вернуть, если эти правила были действительно написаны. Тогда логическое значение D логично
значение каждого элемента с распределенным между ними логическим оператором И, т. е.
логическое значение {a, b, c} - это значение (a AND b AND c). Напишем И (D).
логическим значением каждого из элементов является логическое значение самого селектора, если он
не множественный, или это логическое значение всех вхождений множественного селектора
внутри правила, с распределенной между ними логической операцией ИЛИ. То есть в
В приведенном выше примере значение From истинно, если поля From: содержат баран OR Рафаэль.
Напишем это OR [From].

Чтобы быть здравым, мы должны применить закон Де Моргана о N, отсюда следующие правила: логический
Значение N это ИЛИ (N) и задан инвертированный селектор s, его логическое значение - И [s]. А также
наконец, логическое значение R это из D И N, по соглашению с логическим
значение пустого множества быть правда.

Для тех, кто не знает закона Де Моргана, вот он: даны два логических предложения. p
и q, то возникают следующие тождества:

НЕ (p И q) <=> (НЕ p) ИЛИ (НЕ q)
НЕ (p ИЛИ q) <=> (НЕ p) И (НЕ q)

Пока мы находимся в логике предложений, обратите внимание, что ИЛИ и И взаимно
распределительный, то есть с учетом трех логических предположений p, q и r, у нас есть:

p И (q ИЛИ r) <=> (p И q) ИЛИ (p И r)
p ИЛИ (q И r) <=> (p OR q) И (p OR r)

Для полноты, OR и AND ассоциативны сами с собой и коммутативны. И B набор
{0, 1} с набором операций (НЕ, ИЛИ, И) является алгебра (логическое значение).
Я избавлю вас от определения алгебры, которое на самом деле не имеет к этому никакого отношения.
справочная страница (которая предназначена для почтового агента, если вы не помните :-).

Внимательный читатель наверняка заметит, что я не указал логическое значение
селектора группы. Ну, учитывая селектор группы G, разложим его на DG и NG
раздел, DG являясь подмножеством (атомарных) прямых селекторов G и NG быть подмножеством
из (атомарных) инвертированных селекторов. Тогда логическое значение DG это ИЛИ (DG) и логический
Значение NG есть И (NG); глобальное логическое значение G быть тем из DG OR NG, В случае
или DG or NG пусто, значит, у нас нет раздела, но по соглашению значение
пустой набор ложный, и один из наборов равен G. Обратите внимание, что внутри группы
селектор, правила в точности дублируют правила внутри R.

Теперь единственное правило, которого нет логический принадлежит ли селектор группы к D or N. Я
выбран, по аналогии, чтобы сделать селектор группы принадлежащим D если он не запускается
к '!' и чтобы N иначе. То есть! To Cc: принадлежит N пока Cc! To: принадлежит D.
Кроме того, порядок в селекторе групп не имеет значения: To Cc: эквивалентно Cc
Кому:, поэтому поведение в наборе частных является правильным.

Вот несколько примеров:

# Соответствует чему угодно: (не из оперативной памяти ИЛИ не из корня) всегда верно.
От:! Ram,! Root

# Соответствует чему угодно, кроме отклонения писем, исходящих от ram OR root
! От: баран, корень

# Отклонять письма, заголовки которых соответствуют /^Re.*/ содержат слово test
! ^ Re. *: / \ Btest \ b /

# Хранить письма, тема которых содержит тест И кашель
! Тема:! / Test /,! / Host /

# Соответствует, если баран указан в к Или Cc линия
К Cc: ram

Минимальные заголовок
Гарантированно установлен минимальный набор селекторов, независимо от фактического заголовка
сообщение. Это сделано только для фильтрации, никаких физических изменений не требуется.
выполнено.

Конверт: Это адрес, указанный в почтовом конверте, т.е. адрес, по которому
похоже, происходит от. Это может отличаться от От: адресное поле, если
почта исходит из надежных пользователь, в терминологии sendmail. Если вы этого не сделаете
знаете, что это такое, просто игнорируйте это.
От: Пользователь, написавший почту. Если эта строка отсутствует, используется адрес, указанный в
первая линия от.
Длина: Физическая длина тела в байтах после однократного кодирования передачи содержимого (если
любой) был удален.
линии: Количество строк в теле (при необходимости расшифровывается).
В: Основные получатели сообщения. Если эта строка отсутствует, но есть набор
Видимо-Кому: lines, то вместо них используются эти адреса. Если нет такого
строка существует, тогда предположим, что письмо было отправлено пользователю (что кажется
разумное предположение :-).
Отправитель: Пользователь, отправивший письмо. Это может отличаться от От: линия. Если такого поля нет
существует, то используется адрес в первой строке От (почтовый конверт).
Релейный: Этот вычисленный заголовок представляет собой список всех хостов, разделенных запятыми, на которых
сообщение было ретранслировано в правильном порядке передачи. Каждый элемент в этом списке
может быть именем машины, например почта.hp.com или IP-адрес, например
[15.125.38.12]. Список составлен из Получено: линии присутствуют в
сообщение.
Ответить на: Куда должен быть отправлен какой-либо ответ. Если нет Ответить на: поле присутствует, то
Обратный путь используется (с удаленным <>), или От: строка анализируется на
извлеките адрес электронной почты автора.

Переменные показатели
Почтовый агент поддерживает определяемые пользователем переменные, которые являются глобальными. Они устанавливаются через
ASSIGN, на которую ссылается макрос% #. Предполагая, что мы установили переменную кашель, то
%#кашель будет заменено фактическим значением переменной. Это включает некоторую переменную
распространение по правилам.

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

Тема: / вывод для хоста (\ w +) / {НАЗНАЧИТЬ хост '% 1'; ОТКЛОНЯТЬ };
Тема: / ^ Ежедневный вывод / {SAVE% # host / daily.% D};
Тема: / ^ Еженедельный вывод / {SAVE% # host / weekly.% M-% d};

Помимо интерполяции переменных через escape-последовательность% #, также можно выполнить
замены и переводы содержимого переменной (или обратная ссылка, т. е.
число от 1 до 99). Две команды SUBST и TR будут соответственно выполняться на месте
замены и переводы. Однако в этом случае имя переменной должно быть
предшествует одиночный #. Это отличает обратную ссылку 1 из переменной #1,
хотя 1 забавное название переменной. Необходимость в # также предотвращает распространенную ошибку
написания% #, поскольку почтовый агент будет громко жаловаться, если первый параметр SUBST или TR равен
не цифра от 1 до 99 или не начинается с символа #.

Вот несколько действий, чтобы преобразовать имя хоста в нижний регистр и убрать
доменное имя, если есть:

{TR #host / AZ / az /; ПОДПИСАТЬСЯ #host /^([^.ght*)\..*/$1/};

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

Если имя переменной начинается с двоеточия ':', переменная становится постоянной. Что
это означает, что он сохранит свою ценность при различных вызовах почтового агента. Переменная
просто сохраняется (с удалением начального символа ':') в базе данных почтового агента и, таким образом, подлежит
к политике старения, установленной в ~ / .mailagent.

В командах PERL или почтовых перехватчиках с использованием perl (см. Раздел ПОЧТОВЫЕ КРЮЧКИ) вы можете
управлять этими (так называемыми) внешними переменными с помощью набора интерфейсных функций, расположенных
в внешний пакет (то есть вы должны префикс каждого имени функции с ее пакетом
название, набор становление extern'set). Предусмотрены следующие три интерфейсные функции:

val (name) Возвращает значение переменной имя (ведущий ":" не является частью имени,
в любой из этих трех интерфейсных функций).

набор (имя, значение)
Установите внешнюю переменную имя держать ценностное . Никакая интерпретация не выполняется
функции от фактического содержания ценностное вы предоставляете.

age (name) Возвращает возраст переменной, то есть время, прошедшее в секундах с момента последнего
модификация, сделанная набор.

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

Стандарт Expressions
Все регулярные выражения следуют синтаксису V8, как в Perl, со всеми Perl
расширения. Если внутри правила используется конструкция скобок (...), то%цифра макрос
соответствует цифраПодстрока находится внутри скобок. Все эти обратные ссылки
запоминаются на основе правил, пронумерованных слева направо. Однако необходимо соблюдать большую осторожность.
берется при использовании обратной ссылки в селекторах с множественным присутствием, так как все совпадения будут
выполняться до первого совпадения, а обратные ссылки вычисляются на лету, в то время как
выполнение сопоставления с образцом.

Например:

Кому: /(.*)/, Тема: / Вывод из (\ w +) / {НАЗНАЧИТЬ на '% 1'; СОХРАНИТЬ% 2};

сохранит поле "Кому:" в переменной "to" и сохранит почту в папке, полученной из
имя хоста, указанное в теме. Однако если мы скажем:

Тема: / host (\ w +) /, / from (\ w +) / {ASSIGN match '% 1'};

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

Тема: / от /, / хост (\ w +) /, Кому: /(.*)/ {СОХРАНИТЬ% 1; ОТКЛОНЯТЬ };

как если бы шаблон / from / совпадает, то / host (\ w +) / не будет проверяться (идентично
селекторы or'ed и это оптимизировано), то% 1 будет ссылаться на поле To :, тогда как
если / host (\ w +) / совпадает, тогда% 1 будет именем хоста.

Однако такое поведение можно использовать для выборочного хранения новостной статьи, которая была
отправлено вам по почте в папке, имя которой совпадает с названием группы новостей в виде точек. Предполагая, что мы хотим
чтобы отдать приоритет comp.lang.perl, мы могли бы сказать:

Группы новостей:
/(comp.lang.perl)/,
/(comp.mail.mh)/,
/(комп.компиляторы)/,
/ ([^,] *) / {СОХРАНИТЬ% 1};

Статья, размещенная на обоих comp.lang.perl и comp.mail.mh, будет сохранена в
comp.lang.perl, так как это то, что будет соответствовать первым. Последние правила заботятся о
другие статьи: используемая папка - это любая группа новостей, которая появляется первой.

Существует также специальный макрос% &, который перечисляет (это список, разделенный запятыми) все
селекторы, указанные с помощью регулярного выражения, которое действительно совпало. Например:

Re. *: / York / {НАЗНАЧЕНИЕ, которое '% &'};

назначил бы , которые список всех полей, соответствующих шаблону /Re.*/, который
содержит 'york', будь то поле Received: или поле Resent-From: (поскольку оба соответствуют
спецификация селектора). Предполагая, что оба этих поля содержат слово йорк, значение
% & будет 'Получено, повторно отправлено;' (поля отсортированы по алфавиту).

Если у вас есть более одного такого указанного селектора в одном правиле, он может
стоит знать, что весь набор подходящих селекторов записывается в% &, каждый набор
оканчивается знаком ';'. Если используется отрицательный селектор, то% & запишет все поля.
который не содержал шаблон, если выбор был успешным (в противном случае ничего не
записано).

Доступен Действия
Следующие действия доступны как команды фильтрации. Случай не имеет значения, хотя
рекомендуемый стиль - записывать их в верхнем регистре. Как объяснено позже, большинство действий
записать их статус выхода в специальную переменную, которую можно проверить с помощью -t и -f
варианты ABORT, REJECT и RESTART. Для каждой команды, возвращающей такой статус выхода,
Условия неудачи или успеха приведены в конце каждого описания. Если ничего нет
указано, то команда не возвращает значимого статуса.

ОТМЕНА [-тф] [Режим]
Немедленно прекратить применение правил фильтрации. Смотрите REJECT для значения
необязательные параметры. (Не изменяет существующий статус)

ПОСЛЕ [-санк] (Время) действие
Записывает обратный вызов после указанного время, Где действие будет выполнено.
По умолчанию предполагается действие фильтрации почтового агента (-a вариант), на текущем
почтовое сообщение. Команда оболочки (-c) может быть дано вместо этого, получив текущий
почтовое сообщение как стандартный ввод. Наконец, можно запустить простую команду оболочки (с
нет ввода) с помощью -s вариант. Опция -n может использоваться, когда текущая почта
сообщение не нужно сохранять для ввода. Например:

ПОСЛЕ -an (1 день) ДЕЛАТЬ ~ / процесс: proc'run (% u)

назвал бы proc'run определены в ~ / процесс файл через один день, без
предоставление какого-либо ввода (действие здесь не требует).

При запуске команд mailagent начальный рабочий режим устанавливается на _CALLOUT_.
Это может иметь значение, например, если вы вызываете APPLY. Если записанное время меньше или
равно текущему времени (которое сейчас), обратный вызов произойдет, когда
mailagent завершает работу с сообщениями в своей очереди перед выходом. Это позволяет
за следующий милый трюк, обнаруженный Рэндалом Шварцем:

ПОСЛЕ (сейчас) # создайте копию, которую я могу испортить
STRIP Ответить \; ПОВТОРНАЯ СИНХРОНИЗАЦИЯ \;
АННОТАЦИЯ -du Reply-To% 2 \; RESYNC \;
УВЕДОМЛЕНИЕ сообщение% r \; УДАЛЯТЬ \;
;

Обратите внимание, что команда не вызывается AT потому что звонок будет только выполнен
при следующем вызове почтового агента по истечении указанного времени. Даты
указывается в том же формате, что и в SELECT. (Ошибка, если действие не может быть
занесены в очередь вызовов).

АННОТАЦИЯ [-ду] поле ценностное
Аннотировать сообщение, добавив поле в заголовок письма с прилагаемым ценностное .
Это похоже на команду MH год, но аннотация выполняется в конце
заголовок, тогда как MH делает это вверху. Обычно дополнительный поле добавлен,
с текущей датой в качестве значения поля.

Это можно подавить, используя -d вариант. Если ценностное опущено, только
создается поле даты (следовательно, использование -d вариант без
поставка ценностное ). Как и все команды, которые изменяют заголовок, RESYNC
необходимо, чтобы фильтрующая часть действительно увидела новый заголовок.

The -u опция означает "уникальный" и предотвращает выполнение ANNOTATE, если
указанный поле уже присутствует в шапке. Не забудьте выполнить RESYNC между
последовательные команды ANNOTATE, использующие эту опцию, если поле относится к предыдущему
АННОТИРОВАТЬ цель. (Ошибка при отсутствии аннотации)

ОТНОСИТЬСЯ файл правил
Получите правила, проведенные в файл правил и применить их к текущему сообщению. В
фильтр будет запущен в том режиме, в котором вы использовали эту команду, но без фида
произойдет возврат, т.е. любое изменение режима будет потеряно при возврате из
команда.

Переменные (см. Макрос% #) передаются вперед и назад через APPLY,
это означает, что вы видите переменные, установленные вызывающим, и вы можете изменить их значения или
создать новые переменные, которые вызывающий абонент будет использовать в дальнейшем.

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

ASSIGN вар ценностное
Присвойте значение пользовательской переменной вар, к которому можно получить доступ
as '% # var' для подстановки макросов или #вар в командах TR и SUBST на месте
имени переменной. Обратите внимание, что нет ведущего # перед переменной
название. ценностное вы предоставляете сначала проходит Perl чтобы увидеть, содержит ли он что-нибудь
арифметические операции. Если оценка прошла успешно, результирующее значение будет
вместо этого. Если в этом процессе оценки возникает ошибка, то буквальный
используется предоставленное значение. Чтобы избежать оценки, вы можете приложить все
значение в простых кавычках. Они будут обрезаны перед назначением.
Если вам действительно нужны простые кавычки в первой и последней позиции, вы должны
удвойте каждое из них. (Не изменяет существующий статус)

НАЗАД команду
Выполнить команду и воспринимать его вывод как новые действия, которые нужно выполнить с почтой
(следовательно, выполнение чего-то аналогичного `команда` в ракушке). Если нет
вывод, ничего не делается. Команды BACK могут быть вложенными, хотя это может привести к
сюрпризов эта man-страница не раскроет (но уверяю вас, это будет забавно,
если у нас такое же чувство юмора ... :-). Обратите внимание, что как стандартные
используются вывод и стандартная ошибка из команды.

Если команда терпит неудачу, выходные данные отправляются обратно пользователю, и никакие действия не выполняются.
выполненный. Более того, здесь не возникает нормальной обратной связи: любой вывод из
команда воспринимается как действия фильтра, что означает семантику PASS, для
Например, изменено: мы забираем не тело, а команды. (Выполнение
статус - это статус команду)

ЗВУК [-l] считать
Эта команда может использоваться для настройки количества звуковых сигналов, издаваемых при включении
терминал, для каждого %a расширение. По умолчанию эта сумма установлена ​​на 1. Использование
-l опция изменяет количество звуковых сигналов локально для правила. В противном случае по умолчанию
сумма изменена.

Обратите внимание, что это просто расширяет% a до подходящего количества символов Ctrl-G.
Ваш терминал должен иметь возможность издавать последовательные звонки, чтобы это работало. Очень
часто терминалы настроены так, что первый полученный звонок отключает дальнейшее
пищит в течение некоторого времени, чтобы избежать каскада колокольчиков. Если вы используете Xterm для
Например, вы должны использовать:

xterm -xrm "XTerm * BellSuppressTime: 0"

для включения последовательных звонков. Иначе, Xterm проглотит их в течение 200 мс,
следовательно, очевидно, что делает команду BEEP неэффективной. (Не изменяет
существующий статус)

НАЧИНАТЬ [-фут] состояние
Войдите в новое состояние. Явный REJECT или RESTART необходим, чтобы прервать
обработка текущего правила. Обработка начинается в состоянии INITIAL. Если
-f (Соотв. -t), то изменение состояния происходит только в том случае, если
Состояние последней команды указывает на сбой (или успех). Название штата может
содержат буквенно-цифровые символы и символы подчеркивания. (Не изменяет существующие
положение дел)

БИФ [-l] on | off | path
Разрешить или запретить динамический обмен сообщениями. Когда biffing включен через
файл конфигурации или с помощью этой команды, сообщение напечатано на некоторых
терминалы, на которых пользователь регистрируется при получении почты, как описано в
. ПОЧТА БИФФИНГ.

Вместо on or от, вы можете указать имя файла (~ разрешена подстановка),
новый путь, который будет использоваться для шаблона формата biffing.

Если вы используете -l опция, изменения вносятся локально, на время действия правила
Только. Если вы ОТКЛОНЯЕТЕСЬ перейти к какому-либо другому правилу, ваши изменения будут потеряны. В
глобальное значение измененных параметров изменяется при первом локальном использовании и
восстанавливается при вводе нового правила. (Не меняет статус выполнения)

BOUNCE адрес (а)
Доставить сообщение на указанный адрес (а) и действовать так, как если бы было выполнено сохранение.
сделано. Единственная разница с FORWARD заключается в том, что строки, похожие на Resent, не добавляются в
заголовок. Если адрес указан в двойных кавычках, он принимается как имя
загружаемого файла для получения адресов (по одному адресу в строке, комментарии оболочки
(#) разрешается). Разрешение имени файла такое же, как и для шаблона.
загрузка. (Ошибка, если письмо не может быть отправлено повторно)

DO рутина [(аргумент1, аргумент2, ... , аргн)]
Вызывает Perl рутина, с предоставленными аргументами, если таковые имеются. Это очень низкий
уровень зацепить почтовый агент внутренний. Процедура может быть указана сама по себе
(имя пакета, пакет не являетесь main по умолчанию) или определяется ведущим день,
за которым следует ':', затем имя подпрограммы, как и раньше. В день может быть путем к
файл, в котором определена процедура, или имя команды (для пользовательских команд
которые загружаются динамически). Например

СДЕЛАТЬ UNKIT: newcmd'unkit ('true')

будет искать определяемый пользователем ЮНКИТ команда, загрузите файл, в котором он определен
новая команда package), затем вызовите процедуру с помощью 'правда' как аргумент. В
пакет указанный определяет, где выполняется загрузка, поэтому убедитесь, что это
в соответствии с определением в файле, в котором определена процедура. (Не удается
если подпрограмму невозможно найти и выполнить)

УДАЛИТЬ Удалить текущее сообщение. Собственно, это ничего не делает, просто отмечает
почта как сохраненная. Если никаких дальнейших действий, связанных с сохранением, не выполняется, почта
никогда не появится в почтовом ящике. (Никогда не подводит)

КОРМИТЬ [-быть] программа
Передайте все сообщение программе и получите результат в виде нового сообщения.
Следовательно, программа отображается как фильтр для всего сообщения. Он не помечает
сообщение как сохраненное. ПОВТОРНАЯ СИНХРОНИЗАЦИЯ выполняется автоматически по возвращении.
(Возвращает статус программа)

ПРЕДУПРЕЖДЕНИЕ: Ваша программа должна уметь правильно анализировать сообщение MIME и должна
иметь дело с телами с кодировкой передачи самостоятельно. Чтобы упростить задачу программы,
вы можете поставить -b переключатель, который позволит почтовому агенту декодировать все тело для
вы, подавив любой заголовок Content-Transfer-Encoding (подразумевающий "двоичный"). Этот
является недопустимым форматом сообщения для отправки сообщения, но он делает обработку
Полегче. Тем не менее, вам все равно придется самостоятельно разбирать части MIME.

. -b не мешает вашей программе выводить верное сообщение, один
которые могут быть отправлены по сети, поэтому у вас есть два варианта: либо вы
не указывать Content-Transfer-Encoding в заголовках, и почтовый агент будет
перекодировать тело для вас, используя начальную кодировку передачи, присутствующую в
сообщение (относительно безопасный вариант, если вы вносите только изменения в тело хорошо-
определенные места без введения 8-битных символов), или вы можете предоставить Content-
Передайте-кодируйте сами и выполните кодирование тела вручную.

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

Если вы не предоставите какой-либо переключатель, mailagent предоставит вам сообщение как есть и
получит ваше сообщение как есть, без дополнительной магии.

FORWARD адрес (а)
Пересылать почту на указанный адрес (а). Это действует так, как если бы было сделано спасение,
во избежание DELETE. Обычно, когда вы пересылаете письмо, вы не желаете
чтобы сохранить это. Команда добавляет в заголовок строки, похожие на Resent. Что касается BOUNCE,
возможно включение файла (т. е. использовать адрес "forward_list" переслать почту
всем пользователям, указанным в файле список_вперед). (Ошибка, если почта не может быть
возмущаться)

ДАЙТЕ программа
Передайте тело сообщения указанной программе, загрузив ее стандартную
Вход. Любой вывод отправляется по почте пользователю, который запускает почтовый агент, Обратите внимание, что
сообщение не помечается как сохраненное. (Возвращает статус программа)

ПРИМЕЧАНИЕ: Если сообщение имеет тело, закодированное для транспорта (с использованием одного из
base64 или кодировка для печати в кавычках), mailagent будет прозрачно
расшифровать его и предоставить версию, которая может быть правильно обработана. Другими словами,
программе не нужно заботиться о теле, закодированном в сообщении,
так как он получит простой. (Поскольку заголовки не предоставляются, это единственный
возможный вариант).

Будьте осторожны с сообщениями MIME: вы должны использовать для них PIPE, чтобы дать шанс
программе, чтобы правильно обрабатывать тело, но тогда оно должно быть полностью MIME-
осведомлен.

ХРАНИТЬ header_fields_list
Сохраняет только соответствующие строки в заголовке письма. Например,
"KEEP From To Cc Subject" сохранит только основные поля из письма.
сообщение. Это подходит для архивирования сообщений списков рассылки. Вы можете добавить
':' после каждого имени поля заголовка, если хотите, но это не строго
необходимо. Заголовки могут быть указаны с использованием регулярных выражений в стиле оболочки и
включение файла разрешено для получения заголовков из файла. (Не изменяет существующие
положение дел)

ОСТАВИТЬ Оставлять входящую почту в системном почтовом ящике. Это действие по умолчанию, если нет правила
совпало или если не было сохранения. Это не рекомендуется в системах Debian.
(Ошибка, если почту не удается сохранить)

МАКРО [-rdp] имя знак равноценностное , напишите)]
Позволяет указать определяемые пользователем макросы в форме% - (имя). См. Параграф о
пользовательские макросы для объяснения доступных типов (SCALAR, EXPR,
CONST, FN, PROG, PROGC). Интерфейс Perl для базовых пользовательских макросов:
доступен для ваших команд Perl. В -r опция используется для замены существующего
макрос (вместо того, чтобы помещать новый экземпляр в стек), -d удалить все
экземпляры именованного макроса (в этом случае он принимает только первый аргумент),
и -p выталкивает последний экземпляр макроса из стека и возвращается к
предыдущее определение, если таковое имеется (в противном случае оно действует как -d). Если вы хотите определить
простой макрос SCALAR, вы можете опустить = (ценить, типа) часть и просто продолжить
со значением макроса. (Не изменяет существующий статус)

СООБЩЕНИЕ файл
отправить файл обратно отправителю сообщения (как получено из заголовка
сообщения). Текст сообщения проходит через макроподстановку
механизм (описан позже). (Ошибка, если сообщение не может быть отправлено)

НЕТ [-фут] Нет операции. Если это кажется немного странным, подумайте об этом с точки зрения ОДНОЙ команды.
(Не изменяет существующий статус, если -f or -t используется, и в этом случае он заставляет
a ложный - отказ - или правда статус успеха)

УВЕДОМЛЕНИЕ файл адрес (а)
Отправить сообщение с уведомлением файл по заданному списку адресов. Текст
сообщение запускается с помощью механизма подстановки макросов (описанного ниже).
Как и в случае FORWARD, возможно включение файла для указания адреса. (Не удается
если сообщение не может быть отправлено)

ON (день список) команду
Выполнять указанную команду фильтра только для указанного дневного списка. Тот список
- это список дней, разделенных пробелами, с использованием английских названий. Только
первые три символа учитываются без учета регистра. Следовательно,
спецификация самого короткого действительного дня: пн, вт, Мы бы, Чт, Пт, Сб и Вс.

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

ВКЛ. (Пн Вт Ср Чт) ВЫБРАТЬ (18:30 .. 23:00) НАПРЯЖЕНИЕ [электронная почта защищена];
ВКЛ (ПТ) ВЫБРАТЬ (18:30 .. 23:59) ВЫКЛЮЧИТЬ [электронная почта защищена];
ВКЛ (сб, вс) НАЧАЛО [электронная почта защищена];

Это будет возвращать сообщения только по выходным и в течение недели после 18:30,
и до 23:00 (если это время ложиться спать, другие сообщения будут видны на работе
на следующий день). Обратите внимание, что по пятницам мы идем до 23:59. (Распространяет статус
от команду. Если команда не выполняется, всегда возвращать успех)

РАЗ (имя, день, период) команду
Выполнять указанную команду фильтра один раз за период, имя и день поля
используются для записи отметок времени последней команды ONCE. Подробнее об этом позже.
(Распространяет статус от команду. Если команда не выполняется, всегда возвращать
успех)

ПАСС программа
Передать тело сообщения указанной программе и получить обратно новое тело
из вывода программы. Обратите внимание, что сообщение не помечено как имеющее
был спасен. (Возвращает статус программа)

ПРИМЕЧАНИЕ: Если сообщение имеет тело, закодированное для транспорта (с использованием одного из
base64 или кодировка для печати в кавычках), mailagent будет прозрачно
расшифруйте его и предоставьте версию, которая может быть правильно обработана. Тело сгенерировано
программа будет автоматически закодирована с использованием той же передачи
кодирование.

Будьте осторожны с сообщениями MIME: вы должны использовать FEED, чтобы дать им шанс
программе, чтобы правильно обрабатывать тело, но тогда оно должно быть полностью MIME-
осведомлен.

PERL скрипт [Аргументы]
Бегство на Perl скрипт для выполнения некоторых действий с сообщением. Это полностью
описан далее на странице руководства и сильно отличается от БЕГ Perl скрипт
команда. (Возвращает ошибку, если скрипт не скомпилировал или возвратил ненулевое
положение дел).

ТРУБКА [-b] программа
Передайте все сообщение указанной программе, но не получите ничего обратно.
Любой вывод отправляется по почте пользователю, который запускает почтовый агент. Сообщение не
помечен как сохраненный в любом случае, поэтому вы должны явно УДАЛИТЬ его, если
канала было достаточно, и он не потерпел неудачу: "REJECT -f" - ваш друг, чтобы избежать
нежелательное удаление. (Возвращает статус программа)

ПРЕДУПРЕЖДЕНИЕ: Ваша программа должна уметь правильно анализировать сообщение MIME и должна
иметь дело с телами с кодировкой передачи самостоятельно. Чтобы упростить задачу программы,
вы можете поставить -b переключатель, который позволит почтовому агенту декодировать все тело для
вы, подавив любой заголовок Content-Transfer-Encoding (подразумевающий "двоичный"). Этот
является недопустимым форматом сообщения для отправки сообщения, но он делает обработку
Полегче. Тем не менее, вам все равно придется самостоятельно разбирать части MIME.

ПОЧТА [-фунт] группы новостей
Отправьте сообщение в указанные группы новостей после очистки
заголовок: поля, относящиеся к почте, такие как Received: или In-Reply-To:, удалены, действительный
Строка From: создается, исходные To: и Cc: переименовываются с префиксом X-,
Строка References: при необходимости обновляется / генерируется на основе существующей In-
Поля Reply-To и NNTP удаляются, чтобы сервер мог добавить свои
своя.

Выполнение POST успешно действует как экономия.

Если имя -l как в «POST -l comp.mail.mh», затем «Распространение:
local "добавляется для принудительной локальной доставки. В противном случае значение по умолчанию inews
будет использоваться раздача (обычно мировая).

Когда -b задан переключатель, успешная POST приведет к тому, что biffing будет
активировано (см. раздел ПОЧТА БИФФИНГ) для итоговой новостной статьи.

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

ПРОЦЕСС Запускает обработку почтового агента, которая ищет команды @SH и выполняет их.
Это было описано ранее в разделе, посвященном правилам по умолчанию. Действие
по умолчанию связан с письмом, в котором тема [Cc] ommand - PROCESS.
(Всегда возвращает успех)

ЗАЩИЩАТЬ [-лу] Режим
Устанавливает режим защиты по умолчанию, который должен быть установлен для созданных папок (или
созданные файлы при сохранении в папку или каталог MH). По умолчанию,
разрешения регулируются командой UMASK, но это позволяет вам переопределить
дефолт. Указанный Режим должно предшествовать 0 как в 0644 дать
знакомые восьмеричные разрешения. В противном случае оно интерпретируется как десятичное число, поэтому
остерегаться!

The -l Опция может использоваться для локального указания режима для одного правила. Иначе,
режим защиты устанавливается глобально. В -u опция отменяет глобальный (или локальный
в сочетании с -l), возвращаясь к поведению по умолчанию, когда только
umask учитывается системой.

Обратите внимание, что при сохранении в папку MH команда PROTECT имеет приоритет.
за Сообщение-Защита поле из вашего ~ / .mh_profile файл. (Не меняет
статус исполнения)

ОЧИСТИТЬ программа
Загрузите заголовок в программу и получите новый заголовок обратно. RESYNC сделано
автоматически по возвращении. Это может быть действительно использовано для очистки заголовка с помощью
удаление всего многословного материала, добавляемого многими агентами почтового транспорта (X-400
например, линии). Очевидно, это не помечает сообщение как имеющее
был спасен. (Возвращает статус программа)

Если ваша программа удаляет заголовок Content-Transfer-Encoding в сообщении MIME,
mailagent правильно преобразует сообщение в незашифрованное тело. Если
вы измените значение заголовка Content-Transfer-Encoding, почтовый агент будет
так же правильно перекодировать тело за вас. Поддерживаются только кодировки base64.
и цитируется-распечатывается.

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

ЗАПИСЫВАТЬ [-акр] [состояние] [(список тегов)]
Записывает сообщение в историю и переходит в состояние _SEEN_, если сообщение уже было
присутствует там. Если сообщение записывается впервые, обработка
продолжается нормально. В противном случае выполняется REJECT. Такое поведение может быть
несколько изменен с использованием некоторых опций. См. UNIQUE для полного описания.
вариантов и аргументов. Естественно, когда состояние указано, что
отменяет значение по умолчанию _SEEN_. Название штата может содержать буквенно-цифровые символы.
и подчеркивания.

Когда список тегов (список имен через запятую) указывается, сообщение
записываются и проверяются только по всем этим тегам, но только по ним. Без указания
Любой список тегов означает любое вхождение, независимо от того, отмечен он тегом или нет. См. Параграф
. Теги in Запись и Уникальное Произведение для дополнительной информации. (Возвращает статус сбоя
если почта уже была записана)

ОТКЛОНЯТЬ [-тф] [состояние]
Прервать выполнение текущего действия и продолжить сопоставление. Если -t указано,
отклонение произойдет только в том случае, если предыдущее действие было успешно выполнено
(вернуть статус true), пока -f вызовет отклонение только тогда, когда сбой
произошел. Если состояние указано, мы входим в это состояние перед отклонением. ОТКЛОНЯТЬ
сбрасывает флаг совпадения, что означает, что если больше не будет совпадений,
будет применяться действие по умолчанию. Название штата может содержать буквенно-цифровые символы и
подчеркивания. (Не меняет статус выполнения)

ТРЕБУЕТСЯ файл [пакет]
Ведет себя как Perl требовать оператор, загрузив файл perl в память. К
по умолчанию файл читается в новая команда пакет, но вы можете указать что угодно
пакет, в который вы хотите его загрузить. Эта команда выполнит загрузку только один раз
на (файл, пакет) кортеж. В отличие от его эквивалента на Perl, значение файла не
important, т.е. он не должен заканчиваться утверждением, возвращающим истинное значение.
(Ошибка, если файл не может быть загружен)

РЕСТАРТ [-тф] [состояние]
Прервать выполнение текущего действия и перезапустить соответствующий процесс из
начало. Чтобы избежать зацикливания, каждое правило можно выполнить один раз в заданном
штат. См. REJECT, чтобы узнать о значениях дополнительных параметров. RESTART сбрасывает
флаг соответствия, который означает, что будет применяться действие по умолчанию, если больше не будет
совпадение происходит. (Не меняет статус выполнения)

RESYNC Повторная синхронизация заголовка, используемого для сопоставления с заголовком письма. Это
вероятно, полезно только при выполнении команды SUBST или ANNOTATE. (Не меняет
статус исполнения)

ПРИМЕЧАНИЕ: Во время RESYNC почтовый агент проверит, что Content-Transfer-Encoding
заголовок был изменен и при необходимости будет прозрачно перекодировать тело, чтобы
все сообщение остается действительным, несмотря на искажение заголовка. Он также позаботится
обновления Content-Length, если требуется. Всякий раз, когда вы меняете эти важные
заголовки через SUBST или ANNOTATE, обязательно вызовите RESYNC перед удалением
сообщение, иначе вы рискуете сохранить поврежденную версию, которая не будет
правильно понимается вашим почтовым агентом.

БЕГ программа
Запустите указанную программу и отправьте любой вывод пользователю, который запускает почтовый агент.
Это действие не помечает сообщение как сохраненное. (Возвращает статус
of программа)

СПАСТИ папку.
Сохраните сообщение в указанной папке. Если имя папки начинается с '+', это
обрабатывается как папка в стиле MH и rcvstore эмулируется для доставки сообщения
в эту папку. Если папка является каталогом, сообщение доставляется в одном
файл в этом каталоге. Увидеть ПАПКИ раздел. (Ошибка, если сообщение не может
быть спасенным)

ВЫБРАТЬ (Начало .. конец) команду
Выполнить команду только в течение указанного периода выбора времени. Даты могут
быть указанным в широком диапазоне форматов. Выход даты(1) команда - это
пример действующей спецификации. Если дата, год или месяц отсутствуют,
то вместо него подставляется текущий. Следующие даты
действующие спецификации: «10: 04: 25», «сейчас», «1 апреля 1992», «25 декабря», «14 июля».
1789, 07:40 '(эээ ... это действительно согласно грамматике, но до
Эпоха так это ничего не значит). Другие необычные свидания, например, в прошлом месяце - 5
минут »или« 3 недели назад »также включены. (Разве не здорово иметь реальные
парсер? Правила фильтрации можно было бы разработать более подробно, если бы я знал
об этом Беркли Yacc производя Perl парсер ...). (Возвращает статус
команду, если выполняется, в противном случае возвращает истину).

СЕРВЕР [-t] [-d инвалид команды]
Активировать серверную обработку. Тело сообщения интерпретируется как список
команды для выполнения. См. Раздел GENERIC ПОЧТА SERVER Для получения дополнительной информации о
сам сервер. В -t опция превращает сервер в надежных Режим, Где
полномочия может быть получен. В -d после опции должен быть список отключенных
команды, разделенные запятыми, без пробелов между ними.

РАСКОЛОТЬ [-дейв] папку.
Разделить письмо в формате дайджеста в указанную папку (те же соглашения об именах
как в СОХРАНИТЬ). Если папка не указана, каждый элемент дайджеста ставится в очередь и будет
анализируется как отдельное письмо. В -d опция удаляет заголовок дайджеста.
The -i опция означает, что разделение выполняется на месте, а исходная почта отбрасывается.
Все варианты могут использоваться одновременно при условии, что они склеены вместе в
начало (вариант синтаксического анализа действительно рудиментарный).

Если письмо не в формате дайджеста и указана папка, то оно сохраняется.
в этой папке. В противном случае действие SPLIT завершится неудачно и ничего не произойдет (фильтр
продолжает свою обработку). Команда SPLIT правильно разорвет RFC-934
дайджест сообщений и постарается сделать все возможное в противном случае. Если бы дайджеста не было
Соответствует RFC-934, и есть вероятность, что SPLIT что-то произвел.
неверно, то исходное сообщение также сохраняется, если -i, иначе это не
помечены как сохраненные (чтобы можно было применить команду LEAVE по умолчанию). В -w (смотреть)
требует особого внимания и обнаруживает каждый дайджест, не являющийся RFC-934, даже если
несоблюдение в остальном безвредно; кроме того, любой мусор на хвосте дольше
эти 100 байтов будут сохранены как элемент дайджеста.

The -a опция аннотирует каждый элемент дайджеста строкой заголовка X-Digest-To:,
который является объединением полей To: и Cc: исходного дайджеста
сообщение. Это может быть использовано, например, для размещения дайджеста в очереди и
затем повторно обработайте каждый из его элементов в соответствии с этим добавленным полем. Наконец,
-e опция отбросит заголовок дайджеста, только если его тело пусто (т.е.
модератор не включил ни одного ведущего комментария). (Возвращает успех, если почта была в
формат дайджеста и правильно разбить без ошибок)

STORE папку.
Сохраните сообщение в указанной папке и оставьте копию в системном почтовом ящике.
The папку. параметр следует тем же соглашениям об именах, что и в SAVE. Опять таки,
из-за проблем с блокировкой не рекомендуется оставлять почту в почтовом ящике.
Машины Debian. (Ошибка, если сообщение не может быть сохранено ни в папку. или в
почтовый ящик)

STRIP header_fields_list
Удалите соответствующие строчки в заголовке письма. Например, "STRIP
Newsgroups Apparently-To "удалит соответствующие строки, чтобы стереть все
Группы новостей: или Очевидно-Кому: заголовок. Вы можете добавить ":" после каждого поля заголовка.
назовите, если хотите, но это не обязательно. Заголовки могут быть указаны
через регулярные выражения в стиле оболочки или через включение "файла". (Не меняет
статус исполнения)

SUBST var / header выражение
Подставляет выражение в указанную пользовательскую переменную (имя начинается
с #), или обратной ссылкой (цифрой), или полем заголовка (необязательно, оканчивающимся на
':'). Например

SUBST #foo / w / y / g

заменит в пользовательской переменной Foo все w by y. См. Также НАЗНАЧЕНИЕ
и TR.

Для замен в полях заголовка, например:

SUBST Тема: / \ [foo \] \ s + //;

совпадающие строки заголовка будут переформатированы, когда замена будет успешной,
что, вероятно, означает, что оригинальные продолжения не будут сохранены. Цель
подстановка - это весь заголовок с продолжениями, нормализованными до одного
Космос. Таким образом, вы гарантированно не зависите от фактического заголовка.
форматирование в оригинале.

Не забудьте ввести RESYNC после поля заголовка SUBST, поскольку некоторые процедуры
(например, POST) зондировать хеш-таблицу проанализированного заголовка, чтобы сгенерировать сохраненный
сообщение.

(Не работает, если ошибка в выражение)

TR var / header перевод
Выполнить перевод указанной переменной, обратной ссылки или заголовка
поле. Например

TR 1 / AZ / az /

канонизирует содержимое ссылки 1 в нижний регистр. Успешно
транслитерированные заголовки переформатируются, даже если их общий размер не
измененный. См. Также ASSIGN и SUBST. (Не работает, если ошибка в перевод)

УМАСК [-l] Режим
Изменяет umask процесса на указанную Режим, который может быть десятичным, восьмеричным
(если ему предшествует «0») или шестнадцатеричный (начиная с «0x»). Восьмеричная запись
в любом случае самый простой способ указать маску. Разве слухи не говорят, что восьмеричный
был изобретен только для этой цели? ;-) Использовать -l возможность изменить маску
только на время действия текущего правила действия. Обратите внимание, что по умолчанию umask
указанный в вашем файле конфигурации используется для сброса почтовый агентмаска в начале
обработка каждой почты. (Не меняет статус выполнения)

УНИКАЛЬНЫЙ [-акр] [состояние] [(список тегов)]
Записать сообщение в историю и пометить сообщение как сохраненное, если оно уже присутствовало.
там. Если сообщение записывается впервые, обработка продолжается.
как обычно. В противном случае выполняется REJECT. Если -r был использован, RESTART используется
вместо этого пока -a запустит ABORT. Например, чтобы удалить дубликат
сообщения из списков рассылки, запустите УНИКАЛЬНЫЙ -a перед сохранением почты. В -c
параметр может использоваться отдельно, чтобы фактически предотвратить нарушение команды
поток выполнения, а затем использовать статус возврата, чтобы увидеть, что произошло: UNIQUE
возвращает статус сбоя, если сообщение уже было записано. Если необязательный
состояние задан аргумент, то автомат войдет в это состояние, если почта
ранее был в базе. См. Также ЗАПИСЬ и абзац, озаглавленный
. Теги in Запись и Уникальное Произведение для получения дополнительных сведений о список тегов. (Не удается
если почта уже была записана)

ОТПУСК [-l] on | off | path [период]
Разрешить или запретить отправку сообщения об отпуске. Когда режим отпуска включен с помощью
файл конфигурации, сообщение отправляется всякий раз, когда пользователь получает встречу по электронной почте
некоторые требования, как описано в разделе ОТПУСК РЕЖИМ Одна из
условие состоит в том, что флаг отпуска, измененный этой командой, будет истинным. Этот
позволяет легко запретить отправку сообщений об отпуске группе людей за
пример.

Вместо on or от, вы можете указать имя файла (~ разрешена подстановка),
новый путь, который будет использоваться для поиска файла отпуска. При желании вы можете
укажите последний параметр, который будет использоваться в качестве периода, когда
отправка сообщения об отпуске. Изменения в сообщении об отпуске путь
запрещено, если переменная конфигурации исправлен установлен на ВКЛ.

Если вы используете -l опция, изменения вносятся локально, на время действия правила
Только. Если вы ОТКЛОНЯЕТЕСЬ перейти к какому-либо другому правилу, ваши изменения будут потеряны. В
глобальное значение измененных параметров изменяется при первом локальном использовании и
восстанавливается при вводе нового правила. (Не меняет статус выполнения)

ПИШИТЕ папку.
Напишите сообщение в указанной папке, удалив все ранее существовавшие папки с помощью
одно и то же имя. Следовательно, последующие команды WRITE перезапишут предыдущую.
Это полезно для хранения вывода системных команд, выполняемых крон. Не пытайтесь использовать
это с папкой MH или папкой каталога, или он будет вести себя как СОХРАНИТЬ. (Не удается
если сообщение не может быть написано)

Типы Статус
Почти все действия изменяют переменную, которая отслеживает статус выполнения.
(аналогично переменной $? в оболочке). Эту переменную можно проверить с помощью -t or -f
например, опция команды REJECT. Приведу лишь один пример: действие СОХРАНИТЬ
вернется не удалось если не удалось сохранить почту в указанной папке. Если это СОХРАНИТЬ
за командой следовало "REJECT -f FAILED", то выполнение текущего правила будет
остановится, и автомат продолжит анализ почты в состоянии FAILED.

Однако некоторые действия не изменяют этот последний статус выполнения. Обычно это
действия, которые принимают решения на основе этого статуса, или просто действия, которые никогда не потерпят неудачу.
Эти специальные действия: ABORT, ASSIGN, BEGIN, KEEP, MACRO, NOP, REJECT, RESTART,
RESYNC, STRIP и ОТПУСК.

К сожалению, команды ONCE или SELECT не могут отличить не-
выполнение и успешное выполнение указанной команды. Возможно изменение
как работает эта схема, но она должна оставаться обратно совместимой.

Perl Побег
Используя команду PERL, вы можете выполнять фильтрацию и другие
сложные действия прямо в Perl. Это действительно отличается от того, что вы могли бы сделать с помощью
отправка вашей почты в Perl-скрипт. Во-первых, никакого лишнего процесса не создается: скрипт
загружается прямо в почтовый агент и компилируется в специальный пакет под названием почтовый крючок.
Во-вторых, у вас есть интерфейс Perl для всех команд фильтрации: каждое действие фильтрации
связан с функцией perl (пишется в нижнем регистре). Наконец, некоторые предопределенные
переменные устанавливаются за вас почтовым агентом.

Прежде чем мы продолжим, обратите внимание, что, поскольку дополнительных процессов не создается, вы обязательно
назовите Perl выход функция. Использовать &выход вместо этого, так что выход может быть заблокирован. &выход
принимает один аргумент, код выхода. Если вы используете 0, это считается успехом, любой
другое значение означает сбой (т.е. команда PERL вернет статус сбоя). С использованием
Perl выход функция напрямую убьет почтовый агент и, вероятно, понесет почту
потери.

Используемые скрипты должны оставаться простыми. В частности, вам следует избегать использования
пакет директиве или определите функции с именем пакета, отличным от почтовый крючок (т.е.
пакет, в который загружен ваш скрипт). Невыполнение этого требования может вызвать конфликты имен с
почтовый агентсобственные распорядки. В частности, избегайте main упаковка. Обратите внимание, что поскольку
среда компиляции настроена на почтовый крючок, без указания имен пакетов в вашем
переменные и подпрограммы в порядке (на самом деле, это так и должно было работать).

Ваш скрипт может делать с почтой все, что угодно. Однако в большинстве случаев вы заканчиваете
вверх с помощью почтовый агент примитивы, чтобы сохранить почту или переслать ее (но вы можете
переделайте свой собственный и, конечно же, назовите их). Интерфейс прост: каждый
функция принимает только один аргумент, строку, которая является аргументами команды, если таковые имеются.
Например, в сценарии escape на perl вы должны выразить:

{СОХРАНИТЬ список; FORWARD «пользователи»; КОРМИТЬ ~ / bin / newmail -tty; ОТКЛОНЯТЬ }

с:

& сохранить ('список');
& вперед ('"пользователи"');
&кормить('~ / bin / newmail -tty ');
&отклонять;

Правило простое: каждая команда заменяется вызовом функции, а оставшиеся
параметры, заключенные в строку, если есть. В качестве альтернативы вы можете указать параметры как
список: все предоставленные вами аргументы объединены в большую счастливую строку с использованием пробела
символ как разделитель. Затем на этом результирующем
строка аргумента.

Каждая функция возвращает логический статус успеха команды (т.е. 1 означает успех). Для
те функции, которые обычно не изменяют последнюю переменную состояния выполнения фильтра,
успех всегда возвращается. Это позволяет (интуитивно) написать:

&выход(0) если & сохранить ('uucp');
& bounce ('root') || & сохранить ('аварийный');

и получите ожидаемый результат. Письмо будет сохранено в папке аварийного восстановления только при
сохранение в папке uucp не удалось, и письмо не могло быть возвращено в корневой каталог.

Важно понимать, что эти команды имеют точно, такой же эффект на
процесс фильтрации, когда они запускаются из сценария выхода Perl или из файла правил
как регулярные действия. А &отклонять вызов просто прервет выполнение текущего perl
скрипт и автомат фильтра восстановят управление и попытаются найти новое совпадение. Но Perl
дает вам гораздо больше возможностей, в частности, системные вызовы, структуры управления, такие как if и
для, необработанные регулярные выражения и т. д.

Специальный Perl @INC массив (который контролирует путь поиска для требовать) немного
изменен путем добавления пути к собственной частной библиотеке mailagent. Это оставляет дверь открытой для
будущие сценарии perl библиотеки mailagent, которые могут потребоваться сценарию perl.
Кроме того, следующие специальные переменные устанавливаются perl перед вызовом вашего
сценарий:

@АРГВ Аргументы скрипта, переданные командой PERL. Этот
массив настроен точно так же, как и следовало ожидать, если вы
вызвал команду непосредственно из оболочки, за исключением того, что @ARGV [0] это
имя скрипта (так как вы не можете использовать perl's $0 добраться до этого; это было бы
укажите имя почтового агента).
$ адрес Адресная часть строки From :.
$ cc Необработанное содержимое строки Cc :.
@cc Список адресов в строке Cc: без комментариев.
конверт $ Почтовый конверт, вычисленный с использованием первой строки «От» сообщения.
$ дружелюбный Часть комментария в строке From :, если таковая имеется.
$ от Содержимое строки From: с адресом и частью комментария.
% заголовок Эта таблица, проиндексированная по имени поля, возвращает необработанное содержимое на
соответствующая строка заголовка. См. ниже.
$ msgpath Полный путь к папке (или сообщению в папке MH), в которой находится
произошла последняя операция сохранения. Это предназначено для использования, если вы хотите
создать собственное уведомление о получении почты.
длина $ Длина сообщения в байтах.
$ lines Количество строк в сообщении.
$ логин Логин адреса в строке От :.
$ приоритет Содержание строки Precedence :, если таковая имеется.
@relayed Список имен хостов (возможно, необработанные IP-адреса, если нет сопоставления DNS).
в (вычисленной) строке заголовка Relayed :.
$ reply_to Адрес электронной почты, на который следует отправить ответ с комментарием.
подавлено.
$ отправитель Отправитель сообщения (может иметь комментарий), полученный таким же образом
Отправитель: строка рассчитывается почтовым агентом.
$ тема Тема сообщения.
$ в Необработанное содержимое строки To :.
Список адресов в строке Кому: без комментариев.

Ассоциативный массив % заголовок дает вам доступ ко всем полям в заголовке
сообщение. Например, $ в действительно ценность $ header {'Кому'}. Ключ указан
используется нормализованный регистр, т.е. первая буква каждого слова в верхнем регистре, остальные
в нижнем регистре. Это не зависит от реального физического представления в
само сообщение.

Псевдоключи Руководитель, Тело и Все соответственно дает вам доступ к необработанному заголовку
сообщение, тело и все сообщение. В % заголовок массив действительно является ссылкой на
почтовый агентвнутренней структуры данных, поэтому изменение значений повлияет на фильтрацию
процесс. Например, команда SAVE записывает Руководитель, X-фильтр: линия, конец
заголовок (одна новая строка), а затем Тело (это только пример, а не задокументированный
характерная черта :-). В = Тело = ключ особенный: это ссылка Perl на скаляр, содержащий
тело с удаленной кодировкой передачи контента.

Обратите внимание, что $ msgpath переменная содержит только снимок пути к папке в то время, когда
был вызван побег PERL. Если вы делаете на perl свою экономию, то вам нужно посмотреть
на $ main'folder_saved вместо этого, чтобы получить актуальное значение пути к папке.

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

Программа Окружающая среда
Все программы, запущенные mailagent через RUN и друзей, наследуют следующие
переменные среды: HOME, USER и NAME, соответственно, устанавливаются из конфигурации
параметры главная, пользователь и имя. Если почтовый агент запускается фильтр, то ПУТЬ
также устанавливается в соответствии с файлом конфигурации (если вы используете фильтр C) или
независимо от того, что вы установили PATH (если вы используете фильтр оболочки).

Все программы выполняются изнутри главная каталог. Это включает скрипты
запускается с помощью команды PERL и почтовых перехватчиков. О последнем будет рассказано подробно.
дальше.

Файл включение
Некоторые команды, такие как FORWARD или KEEP, позволяют указать имя файла в двойных кавычках.
чтобы фактически загрузить параметры из этого файла. Если не указан полный путь, следующие
используется для поиска файла: сначала в месте, на которое указывает почтовый фильтр
переменная, если установлена, иначе в Maildir и, наконец, в домашнем каталоге. Обратите внимание, что это
не путь поиска в том смысле, что если почтовый фильтр определен, а файла нет,
будет сообщено об ошибке.

В файле должен быть указан каждый параметр (будь то адрес, заголовок или шаблон) в строке следующим образом:
сам. В этом файле разрешены комментарии в стиле оболочки (#), а начальные пробелы -
обрезанные (но не конечные пробелы).

Макрос Замены
Все команды перед выполнением проходят через механизм подстановки макросов. В
доступны следующие макросы:

%% Настоящий знак процента
% A Интернет-адрес, извлеченный из От: поле (abc in [электронная почта защищена]),
преобразован в нижний регистр.
% C Имя ЦП, на котором работает почтовый агент. Это полное имя хоста с
доменное имя, например lyon.eiffel.com.
% D День недели (0-6)
% H Имя хоста (имя машины, на которой почтовый агент работает), без домена
имя. Всегда в нижнем регистре, независимо от имени машины.
% I Имя домена в Интернете, извлеченное из От: поле (до нашей эры in [электронная почта защищена]),
преобразован в нижний регистр.
% L Длина части тела в байтах без кодирования передачи содержимого.
% N Полное имя отправителя (логин, если его нет)
% O Название организации, извлеченное из От: поле (b in [электронная почта защищена]), преобразованный
в нижний регистр.
% R Тема исходного сообщения с ведущими Re: подавлено
% S Re: тема исходного сообщения
% T Время последней модификации отправленного файла (команды MESSAGE и NOTIFY)
% U Полное имя пользователя
% Y Полный год с четырьмя цифрами (так называемый гггг формат)
% _ Пробел (полезно для размещения пробелов в отдельных узорах)
% & Список селекторов, у которых обнаружено совпадение (среди тех, которые указаны с помощью обычного
выражение, такое как 'X- *: / foo / i'. Если мы найдем Foo подстрока в X-Mailer:
строка заголовка, тогда% & будет установлено на это значение). Значения в списке - запятая.
разделены.
% ~ Нулевой символ, удаленный из результирующей строки.
%цифра Значение соответствующей обратной ссылки из последнего совпадения.
%#вар Значение пользовательской переменной вар
%=вар Значение переменной конфигурации mailagent вар как указано в
~ / .mailagent .
% d День месяца (01-31)
% e Электронный адрес пользователя (ваш!).
% f Содержимое строки «От:», что-то вроде% N <% r> или% r (% N) в зависимости от того, как
почтовик настроен.
% h Час дня (00–23)
% i Идентификатор сообщения, если доступен (в противном случае это пустая строка)
% l Количество строк в сообщении после удаления кодировки передачи содержимого
% m Месяц года (01-12)
% n Имя отправителя в нижнем регистре
% o Организация (где почтовый агент пробеги)
% r Обратный адрес сообщения
% s Тема исходного сообщения
% t Текущие часы и минуты (в формате ЧЧ: ММ)
% u Логин пользователя
% y Год (последние две цифры)
% [To] Значение поля заголовка (здесь To :)

Определяемые пользователем Макрос
Почтовый агент позволяет вам определять свои собственные макросы двумя способами: на уровне фильтра через
Команда MACRO, или на уровне Perl в ваших собственных командах или действиях Perl.

После определения пользовательский макрос (скажем, Foo) можно заменить с помощью % - (foo), В случае
однобуквенный макрос, который можно оптимизировать в % -f например, то есть круглые скобки могут
опускаться.

Есть шесть типов макросов:

СКАЛЯР Дается скалярное значение, например: red. Значение макроса - это буквальный скаляр
значение, дальнейшая интерпретация данных не выполняется.

EXPR Выражение perl будет Evaled, чтобы получить значение, например: $ красный, Обратите внимание, что
оценка будет проводиться в usrmac пакет, поэтому, если вы имеете в виду
к переменной в другом пакете, было бы разумно указать ее, как в
$ foo'bar.

CONST Это действительно то же самое, что и EXPR, но известно, что значение является константой. Так что
при первой замене выражение будет вычислено, а затем
его результат кэшируется.

FN Имя функции Perl (без символа &), например main'do_this,
функция будет вызываться с одним параметром: именем самого макроса.
Это оставляет дверь открытой для дальнейших пользовательских соглашений, заставляя
оценка с помощью одной единственной функции Perl.

PROG Программа, которую нужно запустить для получения фактического значения. Обрезается только завершающий символ новой строки,
другие сохранились. Программа каждый раз разветвляется. В списке аргументов
переданный программе,% n раскрывается как имя макроса, который мы пытаемся
оценивать. Если вы укажете это в правилах фильтрации, не забудьте избежать
первый %.

PROGC На самом деле то же самое, что и PROG, но программа разветвляется только один раз и значение кэшируется.
для дальнейшего изучения.

На уровне Perl четыре функции позволяют управлять макросами и определять их (все являются частью
usrmac упаковка):

новое имя, стоимость, типа)
Замените или создайте макрос% - (имя). Например:

new ('foo', "$ mailhook'header {'X-Foo'}", 'EXPR');

создаст новый макрос Foo что расширилось бы до значения гипотетического
Икс-Фу заголовка.

удалить (имя)
Удалите все значения, записанные для макроса.

push (имя, стоимость, типа)
Сложите новый макрос в стек, создав его при необходимости.

поп (имя) Удалите последнее определение макроса в стеке.

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

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

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

Обычно журналы добавляются в журнал агентов файл, позвонив & main'add_log (строка) (См.
подраздел Общие Цель Процедуры). Для обычных действий почтового агента это нормально.

Но mailagent позволяет вам определять альтернативные файлы журналов, называемые по имени. Этот общий
интерфейс регистрации определяется в usrlog пакет:

новое имя, файл, флаг)
Записывает новый файл журнала, известный как имя и сделано в файл. Если путь, указанный для
этот файл не является абсолютным, он находится под каталог журнала каталог. Если флажок is
установлено значение true, любая запись в этот файл также будет скопирована в значение по умолчанию.
общесистемный файл журнала. Ничего не происходит, если файл журнала с тем же именем уже
был определен.

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

main'usr_log (имя, нить)
Добавляет запись в файл журнала имя. Файл журнала по умолчанию известен как по умолчанию и
нельзя ни переопределить, ни удалить. Обратите внимание, что эта функция доступна из
main упаковка. Называя это с имя установить в строку 'По умолчанию' в основном
эквивалент прямого вызова main'add_log за тем примечательным исключением, что
-i В этом случае опция mailagent учитываться не будет. Это может быть или не быть
Вам пригодится.

Если вы позвоните & main'usr_log при несуществующем имени файла журнала ведение журнала перенаправляется на
общесистемный файл журнала по умолчанию, определенный в вашем ~ / .mailagent.

Динамически Загрузка Новое Code
В ваших подпрограммах Perl (определяемые пользователем команды, перехватчики Perl и т. Д.) Вы можете почувствовать необходимость
динамически загружать новый код в почтовый агент. У вас есть прямой доступ к внутреннему
подпрограмма, используемая mailagent для реализации команды REQUIRE или загрузки вашей новой фильтрации
команды например.

Используя так называемый динамическая нагрузка интерфейс дает вам дополнительные возможности:

· Путь к публичной библиотеке mailagent автоматически добавляется к массиву @INC, который
позволяет вам определять ваши собственные общесистемные или частные файлы библиотеки Perl (частные
путь к библиотеке определяется перлиб переменная конфигурации, путь к публичной библиотеке
был определен во время установки).

· Как у Perl требовать, mailagent отслеживает, какие файлы были загружены в какие
пакеты и не будет перезагружать один и тот же файл в одном пакете дважды.

· Можно убедиться, что в загруженном файле определена конкретная функция,
с сообщением об ошибке, если это не так.

· Вы получаете выгоду от ведения журнала по умолчанию, выполняемого динамическая нагрузка когда возникает какая-то ошибка.

Для этого вы звоните:

& dynload'load (пакет, файл, функция)

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

. Как только Команды
Конструкции ONCE позволяют вам указать данную команду, которая будет запускаться один раз за каждый период (день,
неделя...). Команда обозначена значком имя и еще один день, комбинация двух
уникальный. Почему не использовать только один идентификатор? Что ж, это было бы хорошо, но предположим, что вы хотите
отправлять кому-нибудь ответное сообщение раз в неделю. Вы можете использовать адрес электронной почты
человек в качестве идентификатора команды. Но что, если вы также хотите отправить другое сообщение
по тому же адресу, на этот раз раз в месяц?

Вот прототип использования ONCE, который действует как программа отпуска, за исключением
что он отправляет ответ только один раз в день на указанный адрес:

{ОДИН РАЗ (% r, сообщение, 1 день) СООБЩЕНИЕ ~ /. сообщение };

Это основано на механизме подстановки макросов для отправки сообщения, содержащегося только один раз в день.
in ~ /. сообщение. Не используйте тег отпуск, если вы не знаете, что делаете: это
тег, используемый почтовым агентом внутри в режиме отпуска. Напомним, что нет ни селектора, ни шаблона
понимается как "Тема: *", следовательно, правило всегда выполняется, потому что этот шаблон
всегда совпадает.

Метки времени, связанные с каждой командой, хранятся в файлах в каталоге Hash.
Имя используется как ключ хеширования для вычисления имени файла (две первые буквы
используются). В файле отметки времени сортируются по имени, а затем по тегу. Конечно ты
мог бы сказать (инвертируя тег и имя):

{ОДИН РАЗ (сообщение,% r, 1d) СООБЩЕНИЕ ~ /. сообщение };

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

. Теги in Запись и Уникальное Произведение
Команды RECORD и UNIQUE позволяют указать список тегов, разделенных запятыми, между '('
а также ')'. Для каждого тега, присутствующего в списке, есть отдельная запись в базе данных.
связанный с идентификатором сообщения. Когда сообщение записано хотя бы для одного из тегов,
команда "терпит неудачу". Не указывать какие-либо теги означает искать любое вхождение этого
ID сообщения, независимо от того, помечено оно или нет.

Это очень полезно при получении писем, отправленных по разным спискам рассылки, и вы
хотите сохранить по одному экземпляру сообщения в каждой папке, но все же остерегаться
дубликаты. Ты можешь сказать:

Кому Cc: unix-wizards {
УНИКАЛЬНЫЙ (мастера);
Мастера SAVE;
ОТКЛОНЯТЬ;
};
Кому Cc: majordomo-users {
УНИКАЛЬНЫЙ (мажордом);
СОХРАНИТЬ мажордом;
ОТКЛОНЯТЬ;
};

и только один экземпляр сообщения окажется в каждой папке. Когда у вас есть папки
с конфликтующими интересами вы можете использовать список тегов вместо одного тега. Для
Например, предполагая, что вы хотите сохранить одну копию сообщений, отправляемых обоим расстояние
пользователей и агент-пользователи, но у вас есть отдельная копия, если она также размещена на мажордомо-пользователи,
тогда скажи:

Кому Cc: majordomo-users {
УНИКАЛЬНЫЙ (мажордом);
СОХРАНИТЬ мажордом;
ОТКЛОНЯТЬ;
};
Кому Cc: dist-users {
УНИКАЛЬНЫЙ (расстояние, агент);
СОХРАНИТЬ dist-users;
ОТКЛОНЯТЬ;
};
Кому Cc: agent-users {
УНИКАЛЬНЫЙ (расстояние, агент);
СОХРАНИТЬ dist-users;
ОТКЛОНЯТЬ;
};

Если у вас есть какое-то правило, использующее UNIQUE без каких-либо тегов, оно будет соответствовать, когда хотя бы один
был записан экземпляр сообщения, независимо от того, какой тег (если он вообще есть) использовался в
первое место.

Указание A период
Параметр периода команд ONCE или вакпериод параметр вашей конфигурации
файл имеет следующий формат: число, за которым следует модификатор. Модификатор является атомарным
период, такой как день или неделя, число - это количество атомных периодов, последний период
должно быть равно. Доступные модификаторы:

м минута
ч час (60 минут)
д день (24 часа)
неделя (7 дней)
М месяц (30 дней)
y год (365 дней)

Все периоды внутренне конвертируются в секунды, хотя вам все равно ...
Примеры допустимых периодов варьируются от «1 мин» до «136 лет» на 32-битной машине (почему?).

Таймауты
Чтобы избежать почтовый агент вечное ожидание команды, максимальное исполнение
По умолчанию разрешено время в один час. По прошествии этого времени ребенку отправляется
Сигнал SIGTERM. Если он не умирает в течение следующих 30 секунд, отправляется SIGKILL. Выход
из программы, если таковая имеется, отправляется пользователю по почте. Это поведение по умолчанию может
быть изменен путем установки надлежащего Runmax переменная в вашем файле конфигурации, чтобы разрешить больше
время для выполнения команды.

Существует также фильтр время ожидания очереди. Чтобы уменьшить нагрузку на систему, C фильтр
программа ожидает 60 секунд по умолчанию (или что угодно очередь было установлено в конфигурационном файле)
перед запуском почтовый агент. Во избежание конфликтов сообщения помещаются в очередь первым фильтром (который
потом будет спать очередь секунд) не обрабатываются почтовый агент's -q вариант до
они по крайней мере очередь секунд назад. Еще один параметр, связанный с очередью: очередь,
количество секунд, после которых почтовый агент помечает сообщения как "потерянные" при перечислении
очередь.

Наконец, также можно настроить политику тайм-аута блокировки. По умолчанию блокировка снята
когда ему исполнился один час (настроено замок переменная) и почтовый агент только сделаю
локмакс попытки, разделенные Lockdelay секунд, чтобы получить блокировку. Затем он продолжится
есть ли у него этот замок. Если вам нужна безопасная политика блокировки, убедитесь, что локмакс
раз Lockdelay больше замок, этот параметр достаточно "большой".

Избегающий Петли
The почтовый агент оставляет заголовок «X-Filter:» для каждого отфильтрованного сообщения, который, в свою очередь, используется
для обнаружения петель. Если сообщение, которое уже отфильтровано, должно быть обработано, почтовый агент входит в
особое состояние _SEEN_. Это состояние особенное в том смысле, что оно встроено, оно не совпадает
пользователем ALL, и некоторые действия недоступны, а именно: BACK, BOUNCE, FEED, FORWARD,
ПОДАЧА, УВЕДОМЛЕНИЕ, ПРОПУСК, ТРУБКА, ПОЧТЕНИЕ, ОЧИСТКА, ОЧЕРЕДЬ и ЗАПУСК. Также обратите внимание, что хотя ОДИН РАЗ
и конструкции SELECT включены, они не позволяют выполнять запрещенные команды.
В противном случае состояние _SEEN_ ведет себя как любое другое состояние, которое вы можете выбрать или отменить, поэтому
Guard не будет выбирать правило, когда мы находимся в состоянии _SEEN_.

Состояние _SEEN_ упрощает работу с сообщениями, которые зацикливаются из-за цикла псевдонима, который вы
не контролируйте. Если в состоянии _SEEN_ не найдено никаких действий, письмо остается в
почтовый ящик, как обычно. Кроме того, если сохранение не выполняется, выполняется ОТКЛЮЧЕНИЕ. Это нормально
поведение.

Заголовок «X-Filter:» добавляется только при сохранении сообщения. Такие действия, как PIPE или
GIVE не помечают сообщение как сохраненное, и поэтому они добавить этот заголовок
линия. Вы можете добавить его через ANNOTATE, если хотите предотвратить зацикливание, если программа
сообщение, которое вы скармливаете, может каким-то странным образом вернуть его вам.

Сообщение Файлы
Текст сообщения, которое нужно отправить обратно (для СООБЩЕНИЯ или УВЕДОМЛЕНИЯ), считывается из файла и
прошло через механизм подстановки макросов. Специальный макрос %T установлен на дату
последней модификации этого файла. Формат день месяца, и год добавлен
до месяца, только если он отличается от текущего года.

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

Вот пример файла отпуска. Мы добавляем копию, а также название нашего
организация в шапке:

Копия: таран
Организация:% o
Приоритет: навалом

[Последняя правка внесена% T]

Уважаемый% N:

Я получил ваше письмо по поводу "% R".
Прочитаю, как только вернусь из отпуска.

С уважением,
--
% U <% u @% C>

ОТПУСК РЕЖИМ


Когда пришло время взять отпуск, можно настроить почтовый агент в режиме отпуска.
Каждая вакпериод, сообщение Vacfile будет отправлено обратно пользователю (с макросами
замены), если пользователь явно указан в к or Cc поле и если отправитель
не специальный пользователь (корень, UUCP, Новости, демон, почтмейстер, ведущий новостей, Usenet, Почтовик
демон, Почтовик-агент or никто). Сопоставления выполняются без учета регистра, поэтому
ПОЧТОВЫЙ ДЕМОН также будет признан специальным пользователем. Кроме того, любое сообщение с тегами
с Приоритет: поле установлено в одной посылкой, список or хлам не будет вызывать сообщение об отпуске.
Это встроенное поведение, конечно, может быть перегружено подходящими правилами (путем тестирования и
отправив сообщение об отпуске самостоятельно через СООБЩЕНИЕ).

Внутри mailagent используется команда ONCE с тегами (%р, отдых, $ vacperiod), Из этого следует
вы не должны использовать отпуск в ваших собственных командах ONCE, если вы не знаете, что вы
делает.

Кроме того, сообщение об отпуске отправляется только в том случае, если не было выдано ни одной команды «ОТПУСК выключен», или
если другой "ОТПУСК включен" перезаписал предыдущий. Обратите внимание на то, соответствует ли правило или
not не имеет отношения к алгоритму. По умолчанию, конечно, разрешено сообщение об отпуске.
когда окно отпуск параметр конфигурации установлен на on.

Если вас не устраивает то, что сообщение об отпуске отправляется людям, обратившимся
вы только под копирку, тогда вы можете написать в верхней части файла правил:

Копия: таран {ОТПУСК выключен; ОТКЛОНЯТЬ };

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

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

От: / ^ \ w + $ /, / ^ \ w + @ \ w + $ /, /^[\w.-pting+@.*\.hp\.com$/i
{ ОТПУСК ~ / .hp_vacation 1 нед; REJECT HP};

Предполагая, что домен моей организации .hp.com и что сообщения, не имеющие домена
являются локальными сообщениями, указанное выше правило устанавливает файл ~ / .hp_vacation, отправляется раз в неделю для
все сотрудники HP.

Команда VACATION не позволит вам изменить путь сообщения (но разрешит частоту
все равно меняется), когда исправлен для переменной конфигурации установлено значение ON. Это должно быть
используется в экстренных ситуациях, когда уместится только одно сообщение об отпуске. Например, когда
вы на больничном, простое триггерное сообщение, отправленное вашему почтовому агенту из дома, может измениться
~ / .mailagent конфигурация, чтобы заставить ~ / .i_am_sick сообщение, независимо от того, что
разные правила должны сказать. Собственно, именно поэтому эта функция была добавлена,
удивительный... :-)

ПЕРЕМЕННЫЕ


Обратите внимание на следующие переменные: они могут происходить из окружающей среды или быть
установить в файле правил:

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

Maildir это расположение ваших почтовых папок. Любой относительный путь понимается как
начиная с Maildir. Если не установлен, ~ / Почта используется.

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

Автоматические Авторы


В любом месте сообщения может быть строка @RR, выровненная по левому краю, которая будет возвращать
подтверждение отправителю письма. После @RR необязательно может следовать
адрес, и в этом случае подтверждение будет отправлено на этот адрес. По факту
(но давайте сохраним это в секрете), это способ узнать, кто управляет моим
почтовый агент, а кто не ...

The Отправить письмо программа обычно реализует такую ​​функцию через заголовок Return-Receipt-To:
строка, которая отправляет весь заголовок обратно после успешной доставки. Однако это не
реализован во всех почтовых транспортных агентах, и @RR - хорошая альтернатива :-).

ПРИМЕЧАНИЕ BENE


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

Однако вы всегда должны указывать заголовки в том, что можно назвать нормированный , признали
(по крайней мере для заголовков). Почтовый агент правильно распознает Копии:, CC: or Cc: по почте
сообщение и позволит вам выбрать эти поля с помощью нормализованного Cc: селектор. В
Фактически, он выполняет нормализацию для вас, а Копии: селектор не будет распознан как
такой. Само собой разумеется, что никаких физических изменений не производится.

Это также верно для заголовков, указанных в команде STRIP или KEEP. Если вы напишете STRIP
Cc, он правильно удалит все Копии: линия. Аналогичным образом, если вы используете регулярные выражения для
указать селектор, Re. *: будет соответствовать как оригиналу получили: и Обратный путь: поля,
внутренне известные через их нормализованное представление.

ПОЧТА КРЮКИ


Почтовые перехватчики позволяют mailagent прозрачно вызывать некоторые сценарии или выполнять дальнейшие действия.
обработка сообщения. Эти хуки активируются через СОХРАНИТЬ, СОХРАНИТЬ или УДАЛИТЬ.
команды. А именно, сохранение в папке, в которой установлен исполняемый бит, вызовет специальный
обработка. По умолчанию папка воспринимается как программа, в которую должна быть отправлена ​​почта.
к. Если программа "папка" возвращает нулевой статус, то сообщение считается сохраняются by
почтовый агент. В противном случае запускается вся обработка, связанная с неудачными командами сохранения.
(включая попытки аварийного сохранения). Исполняемые папки обеспечивают прозрачный способ (из
точки зрения файла правил) для работы с сообщениями особого типа.

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

Но если за токеном #: следует (разрешены пробелы, регистр не имеет значения) один из
следующие слова, то предпринимаются особые действия:

условиями, Файл содержит набор правил почтового агента, которые необходимо применить. Новый почтовый агент
создается процесс, чтобы иметь дело с ними, и статус выхода распространяется
вернуться к исходному почтовому агенту.

аудит По духу это похоже на то, что делает пакет Мартина Штрайхера audit.pl,
отсюда и название этого крючка. Специальные переменные, устанавливаемые PERL
инициализируются команды фильтра и скрипт загружается в специальный почтовый крючок
пространство имен пакетов, которое также дает вам интерфейс к собственному почтовому агенту.
рутины. Вы можете безопасно использовать выход функции здесь, так как дополнительный вилка is
сделано. Это единственное различие между аудит и еще один Perl крюк.

доставить То же, что и для аудит хук, но стандартный вывод вашего скрипта
контролируется почтовый агент и понимается как команды фильтрации mailagent. На
успешный возврат, будет вызван процесс почтового агента для фактического выполнения этих
команды в сообщении. Опять же, это похоже на дух Чипа Зальценберга.
доставить package и дал имя этой ловушке.

Perl Этот хук такой же, как и аудит но выполняется без разветвления нового
mailagent, и у вас есть интерфейс Perl для команд фильтрации mailagent.
Нет разницы с командой PERL, потому что она реализована так:
путем вызова почтового агента и принудительного выполнения команды PERL. Это
по духу похож на знаменитый Perl язык и он отвечает за
название этого крючка :-).

Как упоминалось ранее на этой странице руководства, ловушка вызывается из главная каталог
указано в вашем ~ / .mailagent (который может отличаться от вашего настоящего домашнего каталога, насколько
почтовый агент or почтовый крючок обеспокоены).

Для тех хуков, которые наконец запускаются Perl, специальный массив @INC имеет собственный почтовый агент.
к нему добавлен путь частной библиотеки, так что требовать впервые смотрит в это место.

ПАПКИ


Папка - это файл или каталог, который может быть целью доставки почтовым агентом,
то есть аргумент команд, подобных SAVE.

Папка Формат
По умолчанию письма записываются в папки в соответствии со стандартным почтовым ящиком в стиле UNIX.
формат: каждое письмо начинается с ведущей От строка с адресом отправителя и
Дата. Однако, установив ммдф параметр из ~ / .mailagent в ON, почтовый агент
сможет сохранять сообщения в формате MMDF: каждое сообщение зажато между двумя строками
из четырех символов Ctrl-A (код ASCII 1) и ведущего От линия удалена.

Когда режим MMDF активирован, каждая папка будет просканирована, чтобы определить, является ли она UNIX-style или
Почтовый ящик в стиле MMDF и сообщение будут сохранены соответственно. При сохранении в новый
папка, по умолчанию создается почтовый ящик в стиле UNIX, если только ммдфбокс конфигурация
переменная была установлена ​​в положение ON, и в этом случае формат MMDF имеет преимущественную силу.

Обратите внимание, что формат MMDF также является стандартом для упакованных папок MH, поэтому, включив
В режиме MMDF вы можете доставить прямо в эти упакованные папки. Команда MH вкл
в любом случае может включать почту из любой формы, т. е. не имеет значения,
папка находится в формате UNIX (также называемом в стиле UUCP) или в формате MMDF.

Папки в стиле MH также поддерживаются. В основном это каталог, в котором хранятся сообщения.
в отдельных файлах. Чтобы сохранить непосредственно в папку MH, просто укажите префикс имени папки.
с '+', как и с командами MH. Невидимые последовательности, указанные в вашем
Профиль MH ( mhprofile параметр в вашем ~ / .mailagent, по умолчанию ~ / .mh_profile) Будет
быть правильно обновленным, так как rcvstore бы.

Когда целевая папка является каталогом, почтовый агент пытается доставить индивидуально.
пронумерованный файл. Если присутствует файл префикса (параметр конфигурации префикс сообщения, по умолчанию
.msg_prefix), его первая строка используется для указания базового имени сообщения, затем
номер добавляется, чтобы дать имя файла сообщения для использования. То есть, если нет
такой файл, папка будет выглядеть как MH, но без какого-либо файла последовательности MH.

Папка компрессия
Если у вас есть одна или несколько широко доступных утилит сжатия файлов, таких как
сжимать or GZIP в вашем PATH (как настроено ~ / .mailagent), тогда вы можете использовать папку
сжатие, чтобы сэкономить место на диске, особенно когда вы на некоторое время отсутствуете и не
хотите, чтобы ваша почта заполняла файловую систему.

Чтобы добиться сжатия папки, вы должны создать файл, на который указывает сжимать
переменная конфигурации. В этом файле должны быть указаны имена папок, по одному в строке, с пустыми строками.
игнорируются и разрешены комментарии в стиле оболочки (#). Вы можете использовать шаблоны в стиле оболочки, чтобы указать
папки, и совпадение будет предпринято по полному пути к папке (~
происходит замена). Если вы не укажете шаблон, начинающийся с символа '/'
символ, то будет предпринята попытка сопоставления с базовым именем папки (т. е. последним
компонент пути к папке). Если вы хотите сжать все свои папки, просто поставьте
одиночный '*' внутри этого файла.

Mailagent использует расширение имени файла, чтобы определить, какая схема сжатия используется для
конкретная папка. Файл, на который ссылается спецификации переменная конфигурации (по умолчанию
is $ spool / compressors) используется для определения команд, которые mailagent будет использовать для выполнения
операции compress, uncompress и cat для определенного расширения.

The компрессоры файл содержит строки следующего вида:

день расширение сжатие_прог uncompress_prog cat_prog

где:

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

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

сжатие_прог
- это имя команды, выполняемой для сжатия папки. Программа должна
заменить несжатый файл на сжатый с расширением
добавляется к имени файла (например, сжимать or GZIP).

uncompression_prog
- это имя команды, выполняемой для распаковки папки. Программа должна
заменить сжатый файл на несжатый без расширения
(как распаковывать or Gunzip).

cat_prog это имя команды для вывода несжатого содержимого сжатого
папку в стандартный вывод (например, зкат or gzcat).

Поля разделены Вкладки чтобы разрешить использование пробелов в команде
полей.

Если файл, на который ссылается спецификации переменная конфигурации недоступна для
по какой бы то ни было причине, запись по умолчанию жестко зашита в почтовый агент (знает об обоих сжимать
и GZIP программ):

компресс .Z компресс распаковать zcat
gzip .gz gzip распаковать gunzip -c

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

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

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

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

На вновь созданных папках комптаг переменная конфигурации используется для определения
тип сжатия для папки.

ПОЧТА БИФФИНГ


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

Чтобы использовать biffing, все, что вам нужно, это настройка нескольких параметров biff в вашем
~ / .mailagent и выберите опцию стейк установлен на ВКЛ. Собственно, это единственный параметр, который вы
необходимо установить, чтобы получить минимальное поведение по умолчанию. Не забудьте запустить оболочку
команда "стейк y"на терминалах, где вы хотите получать уведомления (вы можете сделать это на
несколько tty, например, по одному на каждый виртуальный дисплей).

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

Модификация оборудования Биффинг Результат
Если формат по умолчанию не соответствует вашим потребностям, вы можете настроить сообщение biffing.
свободно, устанавливая биффмсг параметр, указывающий на файл, в котором хранится формат.
В вашем сообщении будут выполнены стандартные подстановки макросов, следующий набор макросов
заменяющий и дополняющий стандартный набор:

% -A То же, что и% -H, новая строка,% -B
% -B Основная часть сообщения biffing без кодирования передачи содержимого.
Если сообщение состоит из нескольких частей MIME, отображается текстовая / обычная часть. Если бы только
Часть text / html доступна, разметка HTML удалена для biffing.
% -H Заголовок сообщения biffing. Если отображается только От :, Кому: Тема: и
Дата: заголовки или все, что вы установили придурок переменная конфигурации в.
Все заголовки отображаются в виде одной строки текста независимо от их фактической длины.
В конце будут три точки в конце, сигнализирующие о том, что произошло усечение.
Для новостной статьи (после POST -b) поля Кому: и Копия: никогда не используются.
показано, даже если указано в придурок.
% -T То же, что и% -B, но обрезка активирована. Целью обрезки является удаление любых
ведущая цитата в сообщении, чтобы получить только самую значимую часть. Этот
предполагает, что символ кавычек является одним не буквенно-цифровым символом. В
ведущую строку атрибуции, которая может вводить цитату, также можно удалить,
и минимальная длина предложения может быть установлена ​​в файле конфигурации.
% B Относительный путь в% d папки сообщений, полный путь (% p), если не сохранен
в этом каталоге. Название группы новостей для новостных статей.
% D Каталог, в котором хранится сообщение. Если папка MH, это папка
полный путь. Домашний каталог заменяется на ~. Пусто для новостных статей.
% F Базовое имя (последний компонент пути) сообщения. Для сообщения MH это
номер сообщения. Пусто для новостных статей.
% P Путь к папке. Он имеет правильную семантику для MH и папок каталогов, т.е.
он указывает на сам каталог папки. В остальном то же, что и% p.
% a Тревожные символы (^ G). Может расширяться до более чем одного под контролем
Команда фильтрации BEEP. Используйте% b, если вам нужен только один звонок.
% b Сигнальный символ (^ G). В отличие от% a, это только расширяется, чтобы дать one колокол.
% d Полный путь, в котором хранятся такие папки, как та, в которую выполняется сохранение, если нет
квалифицированный (т.е. ваш путь MH для папок MH, например, ~ / Почта для других
папки). Пусто для новостных статей.
% f Папка, в которой была сохранена почта, для краткости домашний заменен на ~. Группа новостей, когда
статья была размещена для новостей.
% m Знак "+", если папка MH, в противном случае - пустая.
% p Полный путь (то же, что и% f) сообщения, но без ярлыка ~. В
название группы новостей для новостных статей.
% t Тип сообщения: обычно "mail", но устанавливается значение "article" для рассылки сообщений после
Команда POST.

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

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

%b
Новый% t для% u прибыл в% f:
----
% -A
----% b

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

Обрезки Ведущий Оформление заказа
При ответе на сообщение стандартной практикой является включение выдержки из
предложения, на которые идет ответ, с использованием не буквенно-цифровых символов, таких как '>', в качестве префикса
цитируемые строки. Что-то вроде:

Цитата Джона Доу:
> Это цитируемый материал.
> Еще одна строчка из почты Джона.

Это часть ответа Джону.

Ведущая строка «Цитирование ...» называется атрибуция строка, является необязательной и может быть
отсутствует или взять другую свободную форму.

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

С помощью % -T макрос в настраиваемом формате biff, вы можете запросить обрезку ведущего
цитатный материал, сохраняя линию атрибуции или нет, и даже заменяя обрезанный материал
с уведомлением о том, что так много строк было удалено.

Вся эта настройка выполняется из ~ / .mailagent файл конфигурации, используя
биффтрим, Bifftrlen и цитата переменные.

Сначала вам нужно включить обрезку с помощью настраиваемого формата biff с помощью параметра % -T макро.
Установив Bifftrlen до 3, вы можете запросить, чтобы котировки не менее 3 строк были
обрезаны. Превращение биффтрим выкл удалит уведомление об обрезке, при включении
цитата off также удаляет строку атрибуции, если она присутствует.

Например, при следующих настройках:

биффтрим: ВКЛ
бифтрилен: 2
biffquote: ВЫКЛ.

то в приведенном выше примере будет получен следующий вывод biffing (заголовок сообщения
не выдерживая):

[обрезаны 3 строки, начинающиеся с ведущего символа '>' и строка атрибуции]
Это часть ответа Джону.

потому что пустая строка после цитируемого материала считается частью
цитата. Сообщение "[обрезано ..]" можно отключить, установив биффтрим в положение ВЫКЛ.

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

. Compact MH-стиль Биффинг
Так называемый MH-стиль biffing - это способ представить уплотненное тело, в котором все линии
объединены в большую счастливую цепочку с последовательными пробелами, превращенными в одну
пробел. Чтобы включить его, вам необходимо установить бифмх переменная на ON.

Поскольку это сжатие дословно выводится на tty, разрывы строк будут происходить случайным образом и
это может затруднить чтение. Вы можете запросить автоматическое переформатирование
уплотненное тело поворотом биффнис в положение ON, и вывод biff будет хорошо вписываться в
Терминал.

К сожалению, невозможно настроить количество столбцов, которые следует использовать.
для форматирования: поскольку вы можете подключиться к любому tty, на котором вы вошли в систему, это заставит
почтовый агент чтобы проверить tty на его размер столбца, для каждого возможного tty, куда может идти вывод,
и нет надежного портативного способа сделать это. Извините.

РАСШИРЕНИЕ ФИЛЬТРАЦИЯ КОМАНДЫ


Как только вы дойдете до эксперту уровне, и при условии, что вы хорошо знакомы с Perl, вы
может возникнуть потребность в более сложных командах, не входящих в стандартный набор. Этот
в разделе объясняется, как вы можете достичь этого динамически, без необходимости глубоко погружаться
внутри исходного кода.

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

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

Обзор
Чтобы реализовать новую команду, скажем FOLD, вам нужно будет сделать следующее:

· Напишите подпрограмму Perl для реализации действия FOLD и поместите ее во внешний
файл. Скажем, мы пишем подпрограмму сложить и мы храним это в Fold.pl файл. Это
естественно сложная часть, где вам нужно знать некоторые основные вещи о
mailagent внутренности.

· Выберите, где вы хотите хранить Fold.pl файл. Затем проверьте синтаксис с помощью Perl -c,
просто чтобы убедиться...

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

· Кроме того, вы можете указать, следует ли FOLD изменять существующий
статус выполнения и будет ли это разрешено в специальном _SEEN_
состоянии.

· Напишите несколько правил, используя новую команду FOLD. Это легко часть! Обратите внимание, что ваш
команда также может использоваться внутри обработчиков perl, как если бы это была встроенная команда (это
означает, что для вас создана функция интерфейса в почтовый крючок пакет).

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

Новое Command Файл Формат
The новая команда Файл состоит из серии строк, каждая из которых описывает одну команду. Пустой
строки игнорируются, а комментарии в стиле оболочки, представленные символом острого (#),
допускается.

Каждая строка состоит из 3-х основных полей и 2-х дополнительных; поля разделены
пробелы или табуляции. Вот скелет:



The cmd_name это имя команды, которую вы хотите добавить. В нашем предыдущем примере это было бы
СКЛАДЫВАЙТЕСЬ. Следующее поле, путь, сообщает mailagent, где находится файл, содержащий команду
реализация находится. Скажем, мы храним это в ~ / mail / cmds / fold.pl, функция поле
имя Perl функция, реализующая FOLD, которую можно найти в Fold.pl. Мы тут
назвал нашу функцию сложить. Обратите внимание: если имя вашей функции находится в новая команда
package, что является поведением по умолчанию, если вы его не укажете, тогда нет необходимости
префикс имени функции с пакетом. В противном случае вы должны использовать полное имя.

Последние два поля являются необязательными и представляют собой логические значения, которые могут быть указаны с помощью правда or
Да чтобы выразить правду, и ложный or нет выражать ложь. Если статус_флаг установлено значение true,
тогда команда изменит последнюю переменную состояния выполнения. Если visible_flag правда,
тогда команда может использоваться, когда фильтр находится в состоянии _SEEN_. Значения по умолчанию:
соответственно правда и ложный.

Итак, в нашем примере мы бы написали:

FOLD ~ / mail / cmds / fold.pl сложить нет да

чтобы разрешить FOLD даже в состоянии _SEEN_ и выполнить его без изменения текущего
значение статус последней команды Переменная.

Writing An Реализация
Ваша функция perl будет загружена при необходимости в специальный пакет новая команда, так что его
собственное пространство имен защищено и случайно не конфликтует с другим почтовым агентом
процедуры или переменные. Когда вам нужно вызвать perl-интерфейс какого-нибудь распространенного почтового агента
функции, вам нужно будет не забыть использовать полное имя подпрограммы, например
& mailhook'leave для фактического выполнения команды LEAVE.

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

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

Каждая команда вызывается с одним аргументом, а именно с полной командной строкой, считанной из
правила фильтрации. Кроме того, специальные @АРГВ массив устанавливается путем выполнения в стиле оболочки
анализ командной строки (который не удастся, если кавычки не совпадают, но тогда вы можете сделать
синтаксический анализ самостоятельно, так как вы получаете командную строку). В конце вашего распорядка вы
должен возвращать статус сбоя, т. е. 0 для успеха и 1 сигнализировать об отказе.

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

Каждая команда вызывается из Eval построить, поэтому вы можете безопасно использовать умереть или позвоните по телефону
подпрограммы внешней библиотеки, которые используют умереть, Если вы используете требовать, имейте в виду, что почтовый агент
создание специального @ИНК массив, указав его путь к частной библиотеке первым, так что вы можете
размести все свои почтовый агентсвязанные файлы библиотеки в этом месте.

Особый - Special Переменные показатели
Следующие специальные переменные (некоторые из них помечены как доступные только для чтения, то есть вы не должны
изменить их, и вы действительно не можете) сделать доступным непосредственно в новая команда пакет, являются
предварительно устанавливаются фильтрующим автоматом и используются для управления процессом фильтрации:

$ mfile Базовое имя обрабатываемого почтового файла. Эта переменная доступна только для чтения.
В основном он используется в сообщениях журнала, как в [$ mfile], чтобы пометить каждый журнал, поскольку
один процесс почтового агента может обрабатывать несколько сообщений.

$ ever_saved Это логическое значение, которое должно быть набор в 1 однажды успешное сохранение
операция завершена. Если в конце фильтрации эта переменная
по-прежнему 0, то будет выполнен LEAVE по умолчанию.

$ folder_saved Значение этой переменной определяет $ msgpath набор удобных переменных
для побегов PERL. Он обновляется всякий раз, когда сообщение записывается в файл, чтобы
сохраните путь к записанному файлу.

$ cont Это статус продолжения, очень важная переменная, когда
имея дело с потоком управления. Четыре константы из main пакет может быть
используется, чтобы указать, должны ли мы продолжить текущее правило
($ FT_CONT), отменить текущее правило ($ FT_REJECT), перезапустить фильтрацию с
начало ($ FT_RESTART) или просто прервать обработку ($ FT_ABORT). Еще
это позже.

$ lastcmd Состояние последней ошибки, записанное последней командой (среди тех, которые
изменить статус выполнения). Вам не нужно обновлять это
сами, если вы не реализуете инкапсуляцию для других команд,
как НАЗАД или ОДИН РАЗ, поскольку по умолчанию $ lastcmd будет установлено значение, которое вы
вернуться в конце команды.

$ wmode Это записывает текущее состояние фильтрующего автомата (рабочий режим) в
буквальная строковая форма, обычно изменяемая командой BEGIN или как сторона
эффект, например, как в REJECT.

Все специальные переменные, настроенные для экранирования PERL, также устанавливаются в новая команда
упаковка. Это $ логин, % заголовоки т. д. Вы можете просматривать их по желанию.

Другие переменные, которые могут вам понадобиться, - это параметры конфигурации, хранящиеся в
~ / .mailagent конфигурационный файл. Что ж, правило простое. Значение каждого параметра
остановить из файла конфигурации хранится в переменной $ cf'param. Переменная $ main'loglvl is
копия $ cf'level, так как вводить всегда короче $ 'loglvl после каждого звонка
процедура регистрации & add_log.

Есть еще одна переменная, о которой стоит знать: $ main'FILTER, который является подходящим X-
Строка фильтра, которая должна быть добавлена ​​в ВСЕ письмо, которое вы отправляете через почтовый агент, чтобы
избегать петель. Также, когда вы сохраняете почту в папке, целесообразно добавить эту строку на случай, если
возникает проблема: затем вы можете определить виновника.

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

Когда мы говорим об изменении окружающей среды, мы имеем в виду ту, которая настроена через
файл конфигурации, значения которого попадают в cf упаковка. Ну, некоторые из этих переменных
копируются в окр пакет до начала фильтрации сообщения (под контролем
@ env'Env множество).

Все правила должны тогда ссылаться на версию в окр пакет, а не в cf пакет,
увидеть переделки. Глобальные изменения производятся путем прямого воздействия на переменную в
окр пакет, в то время как локальные изменения запрашиваются путем вызова & env'local рутина.

Так, например, cf'umask значение копируется как env'umask потому что Umask проводится в @ env'Env.
Глобальные изменения вносятся путем настройки этой копии напрямую, в то время как локальные изменения могут быть внесены
с:

& env'local ('umask', 0722);

для установки нового локального значения. Первый раз & env'local вызывается для переменной, ее значение
где-то сохраняется и будет восстановлен после выхода из области действия правила. Затем новый
значение влияет на переменную.

Переменные, требующие побочного эффекта при изменении их значения (например, переменная umask,
который требует системного вызова, чтобы ядро ​​увидело изменение) может указать его, обратившись к
% env'Spec массив, где ключ является именем переменной, требующей побочного эффекта,
значение интерпретируется как бит кода Perl, запущенного после восстановления исходного значения. Для
например, мы говорим где-то (в & env'init):

пакет env;
$ Spec {'umask'} = 'umask ($ umask)';

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

Внутри & анализировать_почта обычные звонки & env'setup перед началом его обработки в
инициализировать окр пакет и & env'cleanup в конце перед возвращением. Перед запуском
действия, указанные в правиле, совпадают, & apply_rules призывы & env'restore чтобы обеспечить
согласованный взгляд на среду при выполнении действий для этого конкретного правила.

изменяющего Контролировать Поток
Если вы хотите изменить поток управления для выполнения REJECT, RESTART или ABORT, у вас есть
три варианта. Если вы хотите управлять этим действием с помощью опции, точно так же, как и стандартный
UNIQUE делает (с -c, -r or -a), вы можете позвонить & main'alter_execution (опция, штат) предоставление
это два параметра: буква опции и состояние, в которое вы хотите перейти перед изменением
поток управления.

Вы также можете напрямую изменить $ wmode и $ cont переменные, но тогда у вас будет
делать собственные записи, если вы хотите. Или вы можете назвать подпрограммы низкого уровня
& main'do_reject, & main'do_restart и & main'do_abort выполнить соответствующие
эксплуатация (с протоколированием).

Помните, что состояние _SEEN_ является особым и напрямую обрабатывается на уровне фильтра, и
фильтр начинается в НАЧАЛЬНОМ состоянии. Действие по умолчанию - продолжить с текущего
правило, поэтому нет рутины для выполнения этой задачи.

Предпочтительный способ - вызвать почтовый крючок интерфейсные функции, & mailhook'begin,
& mailhook'rejectи т. д., и это будет работать, даже если вы переопределите эти функции
себя. Кроме того, это единственный интерфейс, который, скорее всего, не изменится на новые.
версий.

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

& header'format (поле rfc822)
Вернуть отформатированное поле RFC822, которое поместится в 78 столбцов, с правильными продолжениями.
вводится восемью пробелами.

& header'normalize (rfc822-имя-заголовка)
Нормализовать регистр в заголовке RFC822 и возвращать новое имя заголовка с каждым первым
буква в верхнем регистре.

& заголовок
Это часть проверки заголовка RFC822, в основном используется при разделении
переваривать. Это сбрасывает автомат распознавания (см. & Header'valid).

& header'valid (строка)
Возвращает логическое состояние, указывающее, все ли строки, данные до сих пор для этого
функция с последнего & заголовок являются частью допустимого заголовка RFC822. В
функция понимает первую строку From, которая является частью писем UNIX. В любом
время, переменная $ header' может быть можно проверить, чтобы узнать, нашли ли мы
хотя бы одно важное поле заголовка письма.

& main'acs_rqst (файл)
Выполните блокировку файла .lock, возвращая 0 в случае успеха и -1 в случае неудачи.
Если была старая блокировка, она снимается (ограничение по времени составляет один час). Использовать
& main'free_file чтобы снять блокировку.

& main'add_log (строка)
Добавьте string в файл журнала. Обычная идиома - добавить к этому вызову
if $ 'loglvl > ценностное , Где ценностное уровень ведения журнала, который вы хотите иметь до
выдача такого журнала ($ 'loglvl это короткая форма для $ main'loglvl).

& main'free_file (файл)
Удалите блокировку .lock с файла, полученного & main'acs_rqst. Возвращает 0, если блокировка
был успешно удален, -1, если это была устаревшая блокировка (полученная кем-то другим).

& main'header_found (файл)
Отсканируйте заголовок файла и попытайтесь определить, есть ли заголовок письма по адресу
начало или нет. Вернуть истину, если заголовок был найден.

& main'history_record
Запишите идентификатор текущего сообщения и верните 0, если сообщение не было
был замечен ранее, 1 если это дубликат.

& main'hostname
Вернуть значение имени хоста в нижнем регистре с добавлением возможного имени домена
к нему. Имя хоста кэшируется, так как его значение изначально должно быть получено
разветвление. (смотрите также & main'myhostname)

& main'internet_info (адрес электронной почты)
Проанализируйте интернет-адрес электронной почты и верните трехэлементный массив, содержащий
host, домен и часть страны интернет-хоста. Например, если
адрес [электронная почта защищена], он вернется (с, b, a).

& main'login_name (адрес электронной почты)
Проанализируйте интернет-адрес электронной почты и верните логин.

& main'macros_subst (* строка)
Выполните замену макроса на месте (строка, переданная как глобус типа), используя
информация, которая в настоящее время хранится в % main'Header множество. Делать pass *_ как
параметр, так как внутри macros_subst использует локальную переменную с таким именем
для выполнения замен, и вы получите неизмененную версию. Если
ты действительно хочешь пройти *_, то вы должны использовать возвращаемое значение из
macros_subst заменяемый текст, но он менее эффективен, чем
модифицировав его на месте.

& main'makedir (путь, режим)
Создать каталог, создав все промежуточные каталоги, необходимые для создания
пути действующий каталог. Не действует, если каталог уже существует. В
Параметр режима является необязательным, используется 0700 (восьмеричное число), если он не указан.

& main'myhostname
Возвращает имя хоста текущего компьютера без имени домена. В
имя хоста кэшируется, так как его значение изначально должно быть получено путем разветвления.

& main'run_command (команда-фильтр)
Выполнить указанную команду единого фильтра и вернуть статус продолжения,
которые обычно должны быть затронуты $ cont Переменная. Вам понадобится это
процедура при попытке реализовать команды, которые инкапсулируют другие команды, например
ОДИН РАЗ или ВЫБРАТЬ.

& main'seconds_in_period (период)
Возвращает количество секунд в указанном периоде. См. Раздел Указание A
период чтобы получить действительные строки периода.

& main'shell_command (программа, вход, Обратная связь)
Запустите команду оболочки и верните статус сбоя (0 для ОК). Входной параметр
может быть одной из следующих констант (определенных в main пакет): $ NO_INPUT
для закрытия стандартного ввода, $ BODY_INPUT для передачи тела текущего сообщения по конвейеру,
$ MAIL_INPUT для передачи всей почты как есть, $ MAIL_INPUT_BINARY для передачи всей почты
mail после удаления кодировки передачи содержимого и $ HEADER_INPUT на
передать заголовок сообщения по конвейеру. Параметр обратной связи может быть одним из $ FEEDBACK или
$ NO_FEEDBACK в зависимости от того, хотите ли вы использовать стандартный вывод для
изменить соответствующую часть сообщения. Если обратная связь не нужна,
вывод команды отправляется пользователю по почте. $ FEEDBACK_ENCODING - это
обрабатывается как $ FEEDBACK, но сообщит почтовому агенту, что нужно найти наиболее подходящее тело
кодирование, когда вводом является все сообщение.

& main'parse_address (rfc822-адрес)
Проанализируйте адрес электронной почты RFC822 и верните двухэлементный массив, содержащий
Интернет-адрес и часть комментария этого адреса.

& main'xeqte (действия-фильтры)
Выполните серию действий, разделенных знаком «;» персонаж, зовущий Команда Run
на самом деле выполнить работу. Вернуть статус продолжения. Обратите внимание, что
$ FT_ABORT будет никогда быть возвращенным, так как почтовый агент обычно останавливается после того, как
выполнила один набор действий, продолжая только в том случае, если увидела RESTART или REJECT.
Что делает ABORT, так это пропускает оставшиеся команды в строке и завершает работу, как если бы
все команды были выполнены. Ты мог бы сказать xeqte является эквивалентом Eval
функция в perl, так как она интерпретирует небольшой скрипт фильтра и возвращает управление
вызывающему после завершения, а ABORT - это perl's умереть.

Вы также можете использовать три функции из внешний пакет, который манипулирует постоянными
переменные (уже задокументированные в разделе, посвященном переменным), а также пользователь -
определенные макропрограммы.

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

Вот небольшой пример. Мы хотим написать команду для возврата почтового сообщения к
исходный отправитель, как это делает sendmail, с некоторым начальным текстом, объясняющим, что произошло.
Команда будет иметь следующий синтаксис:

ОТПРАВИТЬ ОБРАТНО причина

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

подчиненная отправка {
локальный ($ cmd_line) = @_;
локальная ($ причина) = соединение ('', @ARGV [1 .. $ # ARGV]);
если (open (MAILER, "|/ usr / lib / sendmail -odq -t ")) {
& 'add_log ("ОШИБКА не может запустить sendmail для отправки сообщения")
если $ 'loglvl;
1 вернуться;
}
распечатать ПОЧТУ <
От: mailagent
Кому: $ header {'Отправитель'}
Тема: Возвращенное письмо: Ошибка почтового агента
$ main'FILTER

--- Стенограмма заседания

$ причина

--- Неотправленное сообщение следует

$ header {'Все'}
EOF
закрыть ПОЧТУ;
$ ever_saved = 1; # Не хочу в почтовый ящик
$? == 0? 0: 1; # Статус ошибки
}

Предполагая, что эта команда помещена в ~ / mail / cmds / sendback.pl, строка, описывающая его в
новая команда файл будет:

ОТПРАВИТЬ ОБРАТНО ~ / mail / cmds / sendback.pl отсылка да нет

Теперь эту команду можно свободно использовать в любом правиле, и она будет регистрироваться как определяемая пользователем
команда диспетчером команд. Кто сказал, что это было непросто? :-)

Обратите внимание на использование переменной $ ever_saved, чтобы пометить письмо как сохраненное после того, как оно было
отскочил. В самом деле, если действие SENDBACK будет единственным выполняемым действием, мы не
хотите, чтобы почтовый агент ОСТАВЛЯЛ почту в почтовом ящике, потому что она никогда не сохранялась (это
поведение по умолчанию является лишь мерой предосторожности - лучше перестраховаться, чем сожалеть).

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

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

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

GENERIC ПОЧТА SERVER


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

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

Обзор
Чтобы реализовать команду почтового сервера (скажем, отправить файл, который отправит произвольный
файл из файловой системы в отдельном почтовом сообщении) необходимо сделать следующее:

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

· Выберите, хотите ли вы реализовать команду на Perl или в другом программировании.
язык. Если вы сделаете последнее, ваша команда будет известна как оболочка команда (т.е.
команда, запускаемая непосредственно из оболочки), в то время как в первом случае у вас есть
выбор сделать его видимым как оболочка команду, или подключите ее к почтовый агент in
в этом случае он известен как Perl команда. В последнем случае ваша команда будет
динамически загружается в почтовый агент со всеми преимуществами, которые дает вам. Мы тут
собираемся написать нашу команду в виде сценария оболочки.

· Напишите саму команду. Это самая сложная часть в этой схеме. Позже,
мы увидим прямую реализацию Отправить команда.

· Редактировать Comserver файл (определенный в вашем ~ / .mailagent), чтобы записать вашу новую команду.
Затем убедитесь, что этот файл надежно защищен. Вы должны владеть им и быть единственным
разрешено изменять его.

· Кроме того, вы можете скрыть некоторые аргументы в стенограмме сеанса
(подробнее об этом позже), разрешите команде принимать поток данных в качестве стандарт вход,
назначить путь к команде и т. д. Все эти параметры находятся в вашем
Comserver .

· Начните использовать команду ... что, конечно, самая приятная часть в этой схеме!

В следующих разделах мы узнаем о синтаксисе Comserver файл, что полномочия
как строится стенограмма сеанса, что такое командная среда и т. д.

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

Сервер поддерживает понятие полномочия. Один пользователь может иметь более одной мощности на
время, каждая мощность предоставляет только ограниченный доступ к некоторой чувствительной области. Несколько полномочий
зашиты на сервере, но при необходимости пользователь может создавать новые. Эти силы
программно-принудительно, что означает, что команда должна сама проверить, есть ли в ней необходимые
мощность (и) для правильной работы.

Полномочия защищены паролем и файлом допуска. Наличие хорошего пароля не
достаточно, вы должны быть очищены, чтобы (ab) использовать его. Файл разрешения представляет собой список электронных
шаблоны почтовых адресов, с использованием схемы метасимволов оболочки, кто-то очищается, если и
только если его адрес электронной почты совпадает хотя бы с одним из шаблонов из файла допуска.
Чем больше вы будете использовать метасимволы, тем слабее будет эта схема очистки, поэтому
будьте осторожны.

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

Пользователь с система власть позволяет создавать новые полномочия, удалять другие полномочия, изменять
пароли питания, а также список, удаление или изменение зазоров питания. Это как-то важно
мощность, которую должно задерживать небольшое количество пользователей с очень строгим допуском (нет
если возможно, метасимволы в адресе). Хороший пароль также должен защитить это
мощность.

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

Пользователь с корень власть может делать практически все, поскольку она мгновенно дает
individual ВСЕ полномочия, доступные на сервере (но безопасность). Единственное ограничение -
которая корень не может удалить корень только власть. Необходимо указать безопасность password
(другое проводное питание), чтобы продолжить. Само собой разумеется, только one человек должен
имеют как корень и безопасность разрешение, и только один человек должен знать безопасность
пароль и будет указан в файле допуска. В система власть не может навредить ни одному из этих
две силы. В конце концов, более чем один пользователь может иметь корень власть, но не дарить
так легко ...

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

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

Builtin Команды Определение
Теперь давайте посмотрим на эти встроенные команды. Пароли чувствительных команд будут
скрыто в стенограмме сеанса. Некоторые команды принимают ввод, читая почту
сообщение до EOF маркер, который представляет собой простую строку EOF на отдельной строке (аналог
с оболочкой здесь Документация).

добавить мощностью password
Добавить пользователей в файл допуска для мощностью. Если указан пароль питания, нет
требуется особая мощность, иначе система требуется мощность. За корень or
безопасность мощности, требуется соответствующая мощность, или password должен быть
указано. Команда считывает стандартный ввод до маркера EOF, чтобы получить
новые пользователи.

утвердить password команду
Записывает пароль в командной среде, затем выполняет команду. Если
требуется питание, но оно еще не получено, команда будет искать пароль
в среде и попытайтесь получить соответствующую мощность, используя этот пароль. Следовательно,
утвержденная команда (с правильным паролем) будет прозрачно выполняться без
хлопот с запросом питания, выдачей команды и последующим отпусканием
сила. Команда должна выполнить утвердить проверка пароля, просмотрев
на утвердить переменная в командной среде (см. ниже). Поскольку оформление
проверки (например, выполняемые при запросе мощности) не выполняются, нет
чувствительная команда должна когда-либо иметь дело с утвердить построить.

Делпауэр мощностью password [безопасность]
Удалите мощность из системы и связанный с ней список разрешений. В система
мощность требуется для удаления большинства полномочий, кроме корень и безопасность, безопасность
власть может быть удалена только сама по себе, и корень власть может быть удалена только когда
безопасность также указывается пароль.

Getauth мощностью password
Получите текущий файл допуска для данной мощности. Никакой специальной мощности не требуется, если
введен пароль или уже задержано питание. В противном случае питание системы
нужен для всех сил, но корень or безопасность где соответствующая мощность
обязательный.

новая сила мощностью password [псевдоним]
Добавьте новую мощность в систему. Затем команда читает стандартный ввод почты.
до маркера EOF, чтобы получить список разрешенных мощностей. В система сила
требуется для создания новой силы, если только это не корень or безопасность: безопасность мощностью
требуется для создания корень и корень сила требуется для создания безопасность.

ПАРОЛЬ мощностью старый новый
Измените пароль питания. Не имеет значения, если вы уже держите соответствующий
power, вы должны указать правильный старый пароль. Также password команда.

password мощностью новый
Измените пароль питания. Требуется соответствующая мощность, или вам нужно получить
система сила. Чтобы изменить корень or безопасность пароли, вам нужен
соответствующая мощность.

мощностью имя password
Просите новую силу. Конечно, корень не нужно запрашивать другие
сила но безопасность, реже вводите пароль. Эта команда не выполняется, когда
сервер не находится в доверенном режиме, без ведома пользователя: сообщение об ошибке в
файл расшифровки ничем не отличается от полученного с неверным паролем.

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

освободить мощностью
Избавьтесь от силы.

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

набор переменная ценностное
Установите для переменной соответствующее значение. Полезно для изменения внутренних переменных
например, значение маркера EOF или изменить некоторую командную среду. Пользователь может
определять свои собственные переменные для своих команд. За флажок-тип переменной, значение
on, Да or правда устанавливает переменную в 1, любая другая строка устанавливает его в 0 (ложный).
Используется сам по себе как набор, список всех определенных переменных вместе с
возвращаются их соответствующие значения.

установить авторизацию мощностью password
Замените файл разрешения на доступ к источнику питания на файл, полученный при стандартном вводе почты до
знак EOF. В система требуется питание, если вы не укажете правильный пароль
или власть уже твоя. Как обычно, корень or безопасность допуски могут быть только
поменяли при задержании власти.

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

Command Окружающая среда
В режиме сервера можно указать шесть типов команд и переменных. Два из
их, конец и помощь типы являются специальными и обрабатываются отдельно. Два типа вар и флажок относиться
к переменным и последним двум типам Perl и оболочка обратитесь к командам.

Каждый раз, когда почтовый агент запускает команду сервера, он устанавливает среду для этой команды: если
это Perl-type, то перед загрузкой файла устанавливается набор переменных perl.
команда; если это оболочка-type команда, инициализируются некоторые переменные среды и
файловый дескриптор №3 настроен так, чтобы указывать непосредственно на стенограмму сеанса почтового агента.

A оболочка-type команда разветвляется, в то время как Perl-type команда загружается прямо в почтовый агент
в cmdenv упаковка. Это работает так же, как команда фильтрации PERL, только
целевой пакет отличается, и предустановлен отдельный набор переменных.

Некоторые команды собирают дополнительные данные вплоть до маркера конца файла (по умолчанию строка
EOF в отдельной строке), и эти данные передаются командам оболочки через STDIN и на Perl
команды через @buffer переменная, установленная в пакете среды с именем cmdenv (в котором
команда загружается и запускается).

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

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

утвердить Подтвердить пароль для утвердить команды, пустые, если не во встроенной утвердить
построить.

авт Флаг, установленный в значение true, если в почтовом сообщении был найден допустимый конверт. Когда
этот флаг ложный, сервер не может быть переведен в доверенный режим.

CMD Командная строка, как написано в сообщении.

собирать Внутренний флаг установлен в значение true при сборе входных данных из документа. это
обычно сбрасывается до false перед вызовом команды.

отлаживать Истинно, когда активирован режим отладки (может быть установлен).

инвалид Список отключенных команд, разделенных запятыми, без пробелов между ними. Этот
инициализируется при вызове команды SERVER и -d опция используется.

ВФ Текущий маркер конца файла для команд здесь-документа. По умолчанию установлено на
«EOF» (можно изменить).

Ошибки Количество ошибок на данный момент.

Jobnum Номер задания, присвоенный текущему почтовому агенту.

журнал То, что было записано в расшифровку стенограммы, с некоторыми аргументами, возможно, скрытыми.

имя Имя команды.

упаковка Режим упаковки для отправки файла (можно установить).

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

полномочия Список полномочий, разделенных двоеточием (:), которыми пользователь в настоящее время успешно владеет.
просил и получил.

Запросы Количество обработанных запросов.

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

надежных Истинно, когда сервер находится в режиме доверия, где могут быть получены полномочия. Это активировано
не провела обыск -t опция команды СЕРВЕР, при условии, что действительный почтовый конверт был
найдено.

UID Адрес отправителя сообщения, на который следует отправить расшифровку. От
расширение, реальный идентификатор пользователя для сервера, который является основой мощности
механизм очистки.

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

Сессия Запись
Стенограмма сеанса автоматически отправляется обратно пользователю, который запросил сервер.
доступ. Эта стенограмма показывает команды, запущенные пользователем, и их статус: OK or FAILED.
Между этими двумя строками стенограмма показывает любой вывод, явно сделанный командой для
стенограмма. Как правило, расшифровка стенограммы может использоваться для пересылки сообщений об ошибках обратно в
пользователя, но даже при правильном выполнении команд может потребоваться явное сообщение,
констатировать, что только что было сделано.

Команда perl может получить доступ к стенограмме через MAILER дескриптор файла, определенный в cmdenv
пакет, в то время как команда оболочки может получить к нему доступ через файловый дескриптор # 3.

Обратите внимание, что стенограмма сеанса отправляется по почте отправитель сообщения, т.е. кто бы ни
В строке заголовка конверта написано, что это так. Что касается сервера, то этот адрес электронной почты
используется в качестве идентификатора пользователя, так же как простое имя для входа можно рассматривать как идентификатор пользователя. За
чувствительные команды, аутентификация на основе этой информации очень слабая. Более того
«безопасная» аутентификация обеспечивается сервером, который основан на пароле.
К сожалению, открытый пароль должен быть передан в самом сообщении и может быть
подслушивали.

запись Новое Команды и Переменные показатели
Команды и переменные сервера определены в Comserver файл, определенный в вашем
~ / .mailagent. Формат файла - это таблица с элементами в строке, разделенными
символы табуляции. Каждая строка определяет одну команду или переменную. Любое нерелевантное поле может быть
вводится как один символ '-' (минус). Формат допускает комментарии в стиле оболочки (#).

В каждой строке есть следующие поля:

имя напишите скрывать собирать информацию путь дополнительно

где:

имя - это имя команды или переменной, распознаваемое сервером.

напишите один из Perl, оболочка, вар, флажок, помощь or конец.

скрывать указывает, какие аргументы в команде должны быть скрыты (имя команды
является нулевым аргументом) в стенограмме сеанса. Используйте '-', если нет аргументов
нужно скрыть. Обычно это используется, чтобы скрыть чистые пароли в
команды. Если необходимо скрыть более одного аргумента, то список
числа, разделенные знаком "," (запятая), могут быть указаны с нет пространства между
их. Например, «2,4» скроет аргументы 2 и 4 в расшифровке.

собирать информацию является флагом (укажите либо 'y', либо 'n', но вы можете использовать полные слова
'да' или 'нет'), указывающий, собирает ли команда дополнительные данные в
здесь-документ до маркера EOF. В качестве альтернативы вы можете указать "-" в
место "н".

путь указывает путь к команде (допускается подстановка ~ имени). Если не
актуально (например, при определении переменной) или когда вы хотите оставить ее
пусто, используйте '-'. Если для Perl or оболочка команда,
то ожидается, что реализация этой команды будет найдена в сервдир,
как определено в ~ / .mailagent. Если имя команды CMD например, тогда
Ожидается, что команда perl находится в файле с именем CMD of cmd.pl, в то время как
Ожидается, что команды оболочки будут найдены в CMD of cmd.sh файл. Обратите внимание, что
команда отключена, если она не может быть найдена в то время, когда Comserver
файл проанализирован.

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

Особый - Special Command Тип
В настоящее время существует два специальных типа команд.

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

The помощь тип обычно прикрепляется к помощь команда и вывод справки по команде,
справка для каждой команды, хранящейся в helpdir переменная (определенная в вашем
~ / .mailagent) в файле с тем же именем, что и сама команда. Например, если предположить
команда стрелять, его файл справки ожидается в helpdir / стрелять. Если файл не найден
там mailagent ищет в своей публичной библиотеке (/ usr / share / mailagent) файл справки.
Справка предоставляется только в том случае, если файл справки существует и не имеет нулевого размера.

Создающий Корень Power
Чтобы запустить сервер, вам необходимо создать корневую мощность. Все остальные силы
затем могут быть созданы с использованием интерфейса сервера, который обеспечивает согласованность и регистрирует ваши
действия. Если вы вообще не планируете использовать способности, вы можете пропустить этот раздел.

Во-первых, вам нужно подобрать надежный пароль для корень сила. Кто-то с корень мощностью
может делать с сервером практически все, поэтому будьте осторожны. Предположим, вы выбираете корень-
pass в качестве пароля.

Редактировать ПАРОЛЬ (определено в вашем ~ / .mailagent) и добавьте следующую строку:

корень: :

т.е. введите пароль между '<' и '>'. Он не останется в таком виде надолго,
но это самый простой способ его запустить. Защитить ПАРОЛЬ файл плотно (чтение-запись
разрешения только для вас). Затем создайте powerdir / root файл, защитите его таким же образом и
добавьте к нему свой адрес электронной почты в отдельной строке. Тот обязательно будет адрес, который будет
появиться в От: строка ваших писем. Поскольку файлы зазора поддерживают стиль оболочки
шаблоны, вы можете использовать логин@*домен.top чтобы разрешить отправку писем под вашим логином с любого компьютера в
ваш домен.

Вы почти закончили. Теперь просто введите следующую команду:

mailagent -i -e 'СЕРВЕР -t'

и скормить его стандартный ввод с помощью:

От Электронная почта: адрес
От: Электронная почта: адрес

root-пропуск Power root
пароль root root-pass
^D

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

Побочным эффектом повторного создания вашего пароля будет его шифрование в ПАРОЛЬ файл,
так что никто, смотрящий на этот файл, не может угадать ваш корень пароль, надеюсь.

Как только у вас будет действующий корень установленная мощность, вы можете создать система власть с помощью
новая сила. Затем можно создавать и удалять дополнительные полномочия с помощью система только мощность.

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

Обратите внимание, что проверки зазора выполняются с использованием адреса конверта сообщения, который является
немного сложнее подделать, чем простые поля заголовка, такие как Отправитель:. Конверт извлекается
посмотрев на первую строку заголовка, которая в системах Unix выглядит так:

От конверт-адрес дата отправки

и вставляется агентом почтового транспорта (MTA). Если вы используете Отправить письмо как MTA,
только тогда надежных пользователей, заявленных в sendmail.cf файл умеют создавать "подделки"
адрес конверта, функция, обычно используемая диспетчерами списков рассылки, поскольку этот адрес
затем используется в качестве цели возврата на случай, если почта не может быть доставлена. Если это первый
строка заголовка отсутствует, отправитель вычисляется с использованием Отправитель: поле, если оно присутствует, то
От: поле, но авт переменная установлена ​​в значение false, и сервер не будет переключаться на
доверенный режим; Другими словами, на этом сеансе невозможно будет получить полномочия.

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

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

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

Вот моя реализация оболочка команда (доступна в рассылке почтового агента
недооценивают ее разное / оболочка):

#!/ Бен / ш

# Выполнять команды со стандартного ввода-вывода, передаваемые сервером почтового агента.
# Файловый дескриптор №3 - это канал для транскрипции сеанса.

# Убедитесь, что у нас есть сила оболочки.
# Даже не позволяйте корневому серверу обходить это по соображениям безопасности.
case ": $ powers:" в
*:оболочка:*) ;;
*)
echo «В доступе отказано». > & 3
выйти из 1
;;
ESAC

# Возможно, оболочка была определена ... В противном случае используйте / Бен / ш
case "$ shell" в
'') оболочка = '/ Бен / ш';;
ESAC

# Обычно вывод команды оболочки включается в расшифровку только в
# в случае ошибки или когда пользователь запрашивает трассировку. Однако здесь нам необходимо
# посмотреть, что произошло, чтобы все было перенаправлено на стенограмму сеанса.

exec $ оболочка -x> & 3 2> & 3

Обратите внимание, как мы делаем доступ к $ полномочия и $ shell переменная окружения. Этот последний
определяется пользователем, чтобы разрешить динамическую настройку оболочки.

Предполагая, что мы храним эту команду в servdir / shell.sh (не забудьте добавить исполнение
бит в файле ...), вот как мы объявляем его и его переменную в Comserver .

оболочка оболочки - y -
оболочка var - - -

Этот пример показывает, что существует отдельное пространство имен для переменных и команд.
Причем имя команды совпадает с ее типом - пусть это вас не смущает :-).

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

Для того, чтобы создать оболочка мощность, необходимая для использования вновь созданного оболочка команда, вы
необходимо добавить следующее правило в ваш файл правил:

Тема: Сервер {СОХРАНИТЬ сервер; СЕРВЕР -t};

который сохранит всю почту сервера в специальной папке и обработает их. Обратите внимание -t
опция, которая разрешает доверенный режим, в котором могут быть получены полномочия. Теперь отправьте себе
следующая почта:

Тема: Сервер
система питания sys-pass
оболочка newpower shell-pass
[электронная почта защищена]
EOF

который запрашивает система мощность (необходимая для создания большинства способностей), а затем создает
новая сила оболочка, присвоение снаряд в качестве пароля и очистки [электронная почта защищена] за это.
Обратите внимание на заполнение здесь-документа для команды newpower до маркера EOF. Конечно,
вам необходимо заменить адрес своим реальным адресом.

Вы получите стенограмму сеанса в следующих строках:

---- стенограмма сеанса Mailagent для [электронная почта защищена] ----

----> система питания ********
ОК.

====> оболочка newpower ********
ОК.

====> -
Конец обработки (.signature)

---- Конец стенограммы сеанса почтового агента ----

Обратите внимание на скрытые пароли и подсказки, которые меняются после отключения питания системы.
предоставленный. Поскольку моя почтовая программа автоматически добавляет подпись, обработка на этом останавливается.

Теперь давайте воспользуемся этой новой командой ... Отправьте себе следующее письмо:

Тема: Сервер
установить оболочку / bin / ksh
установить eof END
оболочка
ls -l / И т.д. / пароль
END
силовой снаряд снаряд
оболочка
ls -l / И т.д. / пароль
END

Если у вас все в порядке, вы должны получить стенограмму следующего вида:

---- стенограмма сеанса Mailagent для [электронная почта защищена] ----

----> установить shell / bin / ksh
ОК.

----> установить eof END
ОК.

----> оболочка
В доступе отказано.
Команда вернула ненулевой статус (1).
НЕ УДАЛОСЬ.

----> силовая оболочка ********
ОК.

====> оболочка
+ лс -л / И т.д. / пароль
-rw-r - r-- 1 корневая система 691 01 окт 14:24 / И т.д. / пароль
ОК.

====> -
Конец обработки (.signature)

---- Конец стенограммы сеанса почтового агента ----

Первый вызов оболочка команда не работает, так как нам не хватает оболочка сила. Струна
"Доступ запрещен." отражается самой командой в файловый дескриптор # 3 и делает его
к стенограмме.

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

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

ПРИМЕРЫ


Вот несколько примеров файлов правил. Во-первых, если вы не укажете файл правил или он
пусто, применяется следующее встроенное правило:

Все: / ^ Тема: [Cc] ommand / {LEAVE; ПРОЦЕСС };

Каждое письмо остается в почтовом ящике. Кроме того, письмо с "Тема: Команда" в любом месте
сообщение обрабатываются.

В настоящее время я использую следующий файл правил:

почтовый каталог = ~ / mail;

Все: / ^ Тема: [Cc] ommand / {SAVE cmds; ПРОЦЕСС };

Кому: / ^[электронная почта защищена]/ {POST -l mail.gue};
Судя по всему - Кому: таран,
Группы новостей: mail.gue {BOUNCE [электронная почта защищена] };

<_SEEN_>
Судя по всему - Кому: таран,
Группы новостей: mail.gue {DELETE};

От: root, Кому: root {НАЧАЛО КОРНЯ; ОТКЛОНЯТЬ };
/ ^ Выходные данные ежедневного цикла / {WRITE ~ / var / log / york / daily.% D};
/ ^ Еженедельный вывод результатов / {WRITE ~ / var / log / york / еженедельно };
/ ^ Ежемесячный вывод результатов / {WRITE ~ / var / log / york / ежемесячно };

От: ram {BEGIN RAM; ОТКЛОНЯТЬ };
Кому: таран {LEAVE};
X-Mailer: / mailagent / {ВЫЙТИ};
{ УДАЛИТЬ };

Каталог папки установлен на ~ / mail. Все командные письма сохраняются в папке
~ / mail / cmds и обработано. Они не появляются в моем почтовом ящике. Письма, адресованные GUE
список рассылки (французская группа пользователей Eiffel, а именно Groupe des Utilisateurs Eiffel):
размещен в местной группе новостей mail.gue и не появляются в моем почтовом ящике. Любые последующие
сделанное в этой группе отправлено мне по почте inews (а не напрямую в список рассылки,
потому что эти письма возвращались мне снова и передавались в группу новостей, которая, в свою очередь,
отправил бы их обратно в список и так далее, и так далее). Отсюда следующее правило
который улавливает эти последующие действия и отправляет их в список рассылки. Эти письма будут
действительно возвращаются, но правило _SEEN_ просто удалит их.

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

Следующая группа правил запрещает почтовой системе отправлять обратно письма, когда я нахожусь в
расширение псевдонима группы. Это Отправить письмо вариант, который я отключил на своей машине. Забота
взяты, однако, для того, чтобы письма не приходили из почтового ящика, которые я получаю как слепую копию
копия.

ПРЕДОСТЕРЕЖЕНИЕ


Чтобы ограничить нагрузку на систему, только one почтовый агент разрешен
для запуска команд. Если новое письмо приходит во время работы другого почтового агента, это
почта поставлена ​​в очередь и будет обработана позже main почтовый агент.

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

БЕЗОПАСНОСТЬ


Во-первых, позвольте мне обсудить, что безопасность значит здесь. Оно делает означают безопасность системы от
нападения злоумышленников. Если ваша система позволяет .вперед крючки и / или крон рабочие места должны быть установлены
обычные пользователи, то ваша система совсем небезопасна. Период. Итак, мы не беспокоимся о
безопасность на системном уровне, а скорее на уровне вашей учетной записи, где
хранятся ценные данные.

Чтобы избежать вредоносного вторжения через троянских коней, C фильтр откажется бежать, если
файл конфигурации ~ / .mailagent или указанный файл правил доступен для записи всем или нет
принадлежит пользователю. Эти тесты применяются, даже если фильтр не запускает setuid,
потому что они ставят под угрозу безопасность вашей учетной записи. В почтовый агент также будет выполнять
некоторые из этих проверок, если они не вызываются через C фильтр.

Действительно, если кто-то может написать в ваш ~ / .mailagent файл, то он может легко изменить ваш
условиями, параметр конфигурации, чтобы указать на другой поддельный файл правил, а затем отправить вам
mail, который запустит почтовый агент, запущенный от имени вас. С помощью команды RUN этот потенциал
злоумышленник может запустить любую команду, используя ваши привилегии, и может установить троянского коня для
позднее прочтение. Применяя ту же логику, файл правил также должен быть надежно защищен.

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

Версии после 3.0 PL44 поставляются с улучшенным (с точки зрения безопасности) C фильтр
это не только выполнит вышеупомянутые проверки, но также обеспечит Perl
исполняемый файл и почтовый агент скрипт, который он собирается выполнить, не защищены слабо (когда
Execsafe включен или при работе с привилегиями суперпользователя). Кроме того, если фильтр is
настроить в вашем .вперед как описано на этой странице руководства, он сможет проверить себя на наличие
безопасности и предупредит вас, если он может быть взломан, что может победить все
проверки безопасности.

Mailagent также был расширен, так что все программы, запускаемые через RUN и друзей, а также
почтовые перехватчики проверяются на наличие очевидных недостатков защиты перед запуском.
скрипты (начинающиеся с магического токена #!) и скрипты perl, следующие за волшебным "exec perl
если заклинание $ under_shell специально проверяется для дальнейшей безопасности соответствующего
переводчик. Эти проверки проводятся систематически (когда Execsafe включен или когда
работает с привилегиями суперпользователя), даже если безопасный параметр не был установлен на ON. Также,
все файлы собираются быть exec ()ed проверяются с использованием того же расширенного метода проверки, который используется при
безопасный включен (тесты владения пропускаются, однако при проверке наличия exec ()-ость
файл).

Используйте почтовый агент онлайн с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

Команды Linux

Ad




×
Реклама
❤️Совершайте покупки, бронируйте или заказывайте здесь — никаких затрат, что помогает поддерживать бесплатность услуг.