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

时间:2010-09-13 14:27:42

标签: perl email

My Perl script用于监视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;

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

我能想到两种选择

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

  2. 我可以在"Can a perl script modify itself?"的行上自行修改Perl代码。我不确定这是不是一个好主意。

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:2)

您的邮件服务器为您执行此操作的概率超过90%。设置类似于脚本发送报告的“build @ [yourco.com]”的邮件地址。感兴趣的各方通过服务器使用的任何机制将自己添加到此列表中。

Exchange,Postfix,Dovecot,Sendmail,Apple mail,Zimbra都支持分发列表。这些服务器的份额可能超过90%。设置分发列表几秒钟。

另一种解决方案:使用一些允许人们添加/删除自己并发送给它的公共分发列表。我认为谷歌有一个。

或者,您可以使用现有的Perl或Apache“留言簿”脚本并在内部服务器上进行设置。周围有数百篇论文。然后人们将自己添加到脚本的“留言板”网页,他们会收到电子邮件报告。您可以使用相同的方法来托管最新的报告。这可能因防火墙问题而变得复杂,但是你得到了漂移......这比它听起来要微不足道;不到一个小时的工作。

这里的所有三个想法都是写作自己的很少的工作。

干杯。