如何在Perl脚本中维护邮件收件人列表?

Laz*_*zer 1 email perl

我的Perl脚本用于监视Unix上的目录,它存储在更新监视目录时向其发送通知邮件的用户列表.

这是使用的构造

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;
Run Code Online (Sandbox Code Playgroud)

所以,现在,对于我想要发送通知邮件的每个新用户,我需要转到代码并将其添加到$sendto.这对我来说很好,但我想稍后将该实用程序分发给用户,并且不希望他们手动将地址添加到列表中,至少不直接编辑Perl代码.

我能想到两种选择

  1. 维护具有收件人列表的外部文件.我可以添加一个标志,以便当用户说dirmon.pl -a d@server.com,电子邮件地址被附加到文件,下次发送邮件时,邮件也会转到此收件人(dirmon.pl -r d@server.com从列表中删除用户).唯一的问题是我需要在脚本中再添加一个外部文件,我试图将其最小化.

  2. 我可以在"Perl脚本可以修改自己吗?"的行上自我修改Perl代码..我不确定这是不是一个好主意.

第一种方式是最好的方式吗?有没有更好的方法来维护收件人列表?

bri*_*foy 5

我设置了一个角色地址,例如noc@example.com,然后管理人员通过您的邮件传递程序发送它.这样,随着人们来去,你不会改变代码.这在监视程序脚本中尤为重要,您可以根据假期中的人员,刚刚加入团队的人员等来调整收件人.您希望将所有复杂性从代码中推出.

如果您不想这么做,请将地址放在配置文件中.您希望程序在不更改代码的情况下响应现实世界中的更改.任何需要您更改源的解决方案都存在风险.我在Mastering Perl中谈到了这个问题.

如果您使用其中一个Email :: Sender模块发送邮件而不是跳过箍来调用命令行程序,那么您也会有更轻松的时间.除此之外,您可能对AnyEventWatchdog等框架感兴趣,这些框架旨在为您处理其他内容.