我一直在试图将传入的电子邮件传递给perl脚本,以便我可以通过发送电子邮件的发票来监视潜在的问题,而且没有太多的运气。 使用Red Hat Linux 2.6.32-696-6.3.el6.x86_64,cPanel 56.0(build 51)和Exim 4.87
使用cPanel,我已经将[email protected]收到的电子邮件转发到|/home/myuser/emailtest.pl 。 我从不同search拼凑的脚本看起来像这样(脚本权限设置为755):
#!/usr/bin/perl # This is a test! use strict; use warnings; use File::Touch; use File::stat; use Time::localtime; my $file_list = ('/home/myuser/testfile'); touch $file_list; my $timestamp = ctime(stat($file_list)->mtime); #print $timestamp; #print "\n";
我最初得到一个反弹的错误,经过一些阅读,我看到它可能是因为我打印的时间戳。 我并不需要打印时间戳,我只是在自己运行脚本的时候这样做,以validation是否可以“触摸”文件,还可以读取date。 在注释掉打印命令之后,不再有反弹。 当从shell运行脚本时,脚本仍然有效,并且我可以从'ls'validation时间戳,但是当我发送电子邮件到我的testing帐户时,仍然没有运气。
但是,当电子邮件到达时,脚本似乎没有成功地触摸文件。 我没有得到反弹,但'testfile'永远不会改变,除非我从shell手动运行脚本。 我已经尝试将脚本移动到/ home / myuser / public_html以及相同的结果。
我想最终能够在接收到电子邮件时“触摸”文件,然后使用每日cron作业来检查文件的时间戳。 如果4天没有更改文件,我想让它给我发一封电子邮件,让我知道可能有问题。 如果已经是当前date,我想在那里放一张支票,以免碰到文件,但是所有这些都取决于能够根据收到的电子邮件“触摸”文件,这就是我被卡住的地方。
有谁可以看到这个问题在这里? 如果PHP(或者其他解决scheme)更适合这个,或者我忽略了一些其他的东西,我不会用Perl解决这个问题。
在某些情况下,您可以使用exim的〜/ .forward文件的扩展语法来将传入的消息传入perl脚本。 另请参阅在exim中转发和过滤 。
你可以使用procmail来交付。 这是非常可编程的,可以做多个交货。 您需要在用户的主目录中需要过滤邮件的.procmailrc文件。
有一些用例的例子。 我怀疑你想过滤邮件符合一些标准,然后交付。 filter语言允许您提供多个select标准,并过滤标题,正文或两者。
procmail应该作为YUM包提供。 通常,在Eximconfiguration中启用它,以便在.procmailrc文件存在时将其用作MDA。 如果您想先阅读文档,应该可以在线获取文档。