Как я могу поддерживать список получателей почты в моем скрипте Perl? - PullRequest
1 голос
/ 13 сентября 2010

Мой Perl-скрипт для мониторинга каталога в Unix, хранит список пользователей, которым отправляется уведомление при обновлении каталога, который он отслеживает.

Это конструкцияused

dirmon.pl

my $subject = '...';    
my $msg     = '...';
my $sendto  = 'a@server.com b@server.com c@server.com';
my $owner   = 'me@server.com';

...    

open my $fh, "|-", "mail", "-s", $subject, $owner, "-c", $sendto
    or die "$0: could not start mail: $!";

print $fh $msg or warn "$0: print: $!";
close $fh;

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

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

  1. Сохранение внешнего файла со списком получателей.Я могу добавить флаг, чтобы, когда пользователь говорит dirmon.pl -a d@server.com, адрес электронной почты добавлялся к файлу и при следующей отправке письма почта отправлялась и этому получателю (dirmon.pl -r d@server.com, чтобы удалить пользователя из списка).Единственная проблема с этим заключается в том, что мне нужен еще один внешний файл со сценарием, который я пытаюсь минимизировать.

  2. У меня может быть самоизменяющийся код Perl в строках «Может ли скрипт perl изменить себя?» .Я не уверен, что это хорошая идея.

Первый путь - лучший?Есть ли лучший способ для ведения списка получателей?

Ответы [ 2 ]

5 голосов
/ 13 сентября 2010

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

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

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

2 голосов
/ 13 сентября 2010

Существует 90% плюс вероятность того, что ваш почтовый сервер сделает это за вас.Настройте почтовый адрес, похожий на «build @ [yourco.com]», на который ваш скрипт отправляет отчеты.Заинтересованные стороны добавляют себя в этот список с помощью любого механизма, используемого вашим сервером.

Exchange, Postfix, Dovecot, Sendmail, apple mail, Zimbra - все списки рассылки поддержки.Эти серверы, вероятно, занимают более 90%.Создание списка рассылки буквально за секунды.

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

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

Все три идеи здесь гораздо меньше работы, чем написание вашей собственной.

Приветствия.

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