2010-09-13 17 views
1

My Perl script监视Unix上的目录,存储更新其监视目录时发送通知邮件的用户列表。如何维护我的Perl脚本中的邮件收件人列表?

这是用于构建

dirmon.pl

my $subject = '...';  
my $msg  = '...'; 
my $sendto = '[email protected] [email protected] [email protected]'; 
my $owner = '[email protected]'; 

...  

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 [email protected]时,电子邮件地址被附加到文件中,并且在下一次发送邮件时,邮件也会发送给此收件人(dirmon.pl -r [email protected]将用户从列表中删除)。唯一的问题是我需要在脚本中增加一个外部文件,我正在尽量减少这个脚本。

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

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

+4

您可以创建一个邮件列表,并有脚本发布改变了这一点。您的用户可以根据需要订阅/取消订阅该列表。 – Fozi 2010-09-13 14:31:46

+0

在邮件列表中的文本文件?名单在哪里? – Lazer 2010-09-13 14:33:18

+1

不,我的意思是邮寄名单作为服务。 http://en.wikipedia.org/wiki/Electronic_mailing_list – Fozi 2010-09-13 14:37:00

回答

5

我会设置一个角色地址,例如[email protected]然后管理人员通过邮件传送程序发送它。这样,随着人们来来去去,你不会改变代码。这对于看门狗脚本尤为重要,您可以根据休假的人,刚加入团队的人等来调整收件人。您想要将代码中的所有复杂性都推送出去。

如果您不想这么简单,请将地址放在配置文件中。你希望你的程序在不改变代码的情况下对现实世界中的变化做出响应。任何需要您更改源的解决方案都是有风险的。我在掌握Perl中谈了很多。

如果您使用其中一个Email::Sender模块发送邮件,而不是跳过呼吁命令行程序,您也将有更容易的时间。除此之外,您可能对框架有兴趣,如AnyEventWatchdog,这些框架旨在为您处理其他位。

2

您的邮件服务器会为您提供90%的概率。设置一个类似于您的脚本发送报告的“build @ [yourco.com]”的邮件地址。有兴趣的人可以通过服务器使用的任何机制将自己添加到此列表中。

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

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

或者,您可以使用现有的Perl或Apache“留言簿”脚本,并将其设置在内部服务器上。有数百个论文在附近流动。然后人们将自己添加到脚本的“留言簿”网页,他们会收到电子邮件报告。有可能,您可以使用它来承载最新的报告。这可能会因防火墙问题而变得复杂,但你会得到漂移...这比听起来更微不足道;不到几个小时的工作。这里

所有三个想法是写自己少很多工作。

干杯。

+2

或者你可以使用其中一个免费的。 – Fozi 2010-09-13 17:37:25

+0

@Fozi:是的,确切地说。 – dawg 2010-09-13 17:44:39

相关问题