我希望发送到 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