如何将电子邮件转发到 Linux 上的 perl 脚本?

如何将电子邮件转发到 Linux 上的 perl 脚本?

我希望发送到 Linux 机器上特定别名的所有邮件都能由 perl 脚本处理,但是 sendmail 给出了“服务不可用”错误,我不明白我遗漏了什么。

我创建了我的 handle_email.pl 脚本(现在,这只是将其参数打印到/tmp/email.txt)并在中添加了指向它的符号链接/etc/smrsh

然后我将其添加到/etc/aliases

mailtest: |handle_email.pl

然后运行newaliases。请注意,我也尝试过,mailtest: |/etc/smrsh/handle_email.pl但结果相同。我还尝试过将实际脚本复制到/etc/smrsh链接中,结果还是一样。

当我向 mailtest 别名发送邮件时,文件/tmp从未被创建,并且我在 /var/log/maillog 中得到以下内容:

Nov  1 14:43:59 localhost sendmail[24839]: qA1IhwHm024839: from=<xxx@xxx>, size=284, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA, relay=[10.7.160.180]
Nov  1 14:43:59 localhost smrsh: uid 8: attempt to use "handle_email.pl"
Nov  1 14:43:59 localhost sendmail[24850]: qA1IhwHm024839: to=|handle_email.pl, ctladdr=<mailtest@xxx> (8/0), delay=00:00:00, xdelay=00:00:00, mailer=prog, pri=30570, dsn=5.0.0, stat=Service unavailable
Nov  1 14:43:59 localhost sendmail[24850]: qA1IhwHm024839: qA1IhxHm024850: DSN: Service unavailable
Nov  1 14:44:00 localhost sendmail[24850]: qA1IhxHm024850: to=<xxx@xxx>, delay=00:00:01, xdelay=00:00:01, mailer=esmtp, pri=31594, relay=sy-int-mx.xxx. [<IP addr>], dsn=2.0.0, stat=Sent (qA1Ii4127508 Message accepted for delivery)

我收到一封描述失败的电子邮件,其中写道:

The original message was received at Thu, 1 Nov 2012 14:58:16 -0400
from [<ip address>]

   ----- The following addresses had permanent fatal errors -----
|/etc/smrsh/handle_email.pl
    (reason: Service unavailable)
    (expanded from: <mailtest@xxx>)

   ----- Transcript of session follows -----
smrsh: "handle_email.pl" not available for sendmail programs
554 5.0.0 Service unavailable

为什么 smrsh 无法执行我的脚本?

更新:回答评论中的问题。

我已将脚本复制到/etc/smrsh并删除了链接。文件权限为 0700(也尝试过 0755),第一行是#!/usr/local/bin/perl正确的。中只有一个文件/etc/smrsh。ls -l 输出:

[main:g:64] xxx:/etc/smrsh# ls -l
total 4
-rwx------. 1 root root 281 Nov  1 16:35 handle_email.pl

答案1

尝试将 /etc/smrsh/handle_email.pl 的权限更改为 755,我认为你会更成功。你可能需要重新启动 sendmail,以确保一切已正确初始化和配置。

答案2

smrsh 可能比较挑剔。在您的示例中,脚本归 root 所有。尝试将所有权更改为 mail。

答案3

您需要将 handle_email.pl 添加到 /etc/smrsh 中,同时还需要将每个从 handle_email.pl 执行的程序添加到其中。因此,如果您使用 echo 来写入 /tmp/email.txt,您还需要执行以下操作:

ln -s /bin/echo /etc/smrsh/echo

编辑:因此,您需要链接 /usr/bin/perl

相关内容