Создание почтовых роботов на Perl
То, что в Fido называлось FAQServer, и работало по 5 минут после каждого письма
в среде *nix/Internet оказалось очень легко реализовать.
Современные MTA (Mail Transport Agents) предоставляют удобный интерфейс
для почтовых роботов письмо пришедшее на заданный alias
перенаправляется на STDIN программы обработчика. В случае, если
используется Postfix (с виртуальными доменами postfix-style) возникает
проблема в перечне виртуальных доменов нельзя указать
программу только логин
В Postfix придётся ещё написать в файле virtual адрес в виртуальном домене (если, конечно, используются виртуальные домены): /^mysuperrobot\@domain\.tld$/ mysuperrobot\@real.server.hostname. Этот пример работает в случае, если разрешены регулярные выражения. Затем надо сохранить файл, обновить базу и перезапустить Postfix:
# postmap virtual # postfix reload
>Реализация
Теперь собственно о роботе. Тут всё просто. Надо по строке разбирать STDIN. Например вот так:
Код отображения справки в ответ на команду help будет выглядеть вот так:
Путь везде надо указывать полный. Если за этим не следить
глюки вылезут в самых неожиданных местах.
А дальше надо просто отправить ответ обычным способом:
Подразумевается, что в $msg находится текст сообщения.
Безопасность
Скрипт запускается с правами nobody, так что надо установить необходимые права доступа (755). Можно использовать скрипты с аттрибутом SUID. Остальное как в CGI. Нельзя допускать передачу указанных пользователем параметров функциям без их тщательной проверки. Все подозрительные места можно обнаружить автоматически, если есть возможность установить на скрипт права SUID root. Потом, конечно, надо будет отключить этот бит. Кстати говоря, если скрипт завершится с ошибкой, то ошибка придёт по e-mail отправителю запроса интересный способ отладки.
Если скрипт на C++ то надо все стандартные ошибки проверять. Переполнение буфера, пропуск строки формата в printf, и т.д.
0 TrackBacks
Listed below are links to blogs that reference this entry: Создание почтовых роботов на Perl.
TrackBack URL for this entry: http://www.ptitov.ru/mt/mt-tb.cgi/2

Leave a comment