2010-09-13 21 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

相關問題