我在从 procmail 本地传递的传入邮件中运行脚本(perl 和 ruby 失败)时遇到了一个奇怪的问题。
该系统是 CentOS 5.5,后缀作为我的邮件程序,然后设置了 .forward 以将电子邮件发送到 procmail。.procmailrc 和脚本与 Ubuntu 服务器上的工作设置相同。
这是 .procmailrc:
PATH= /usr/local/bin:/usr/bin:${PATH}
SHELL=/bin/bash
MAILDIR=$HOME/Maildir
DEFAULT=${MAILDIR}/
LOGABSTRACT=yes
LOGFILE=$HOME/Maildir/proclog
VERBOSE=YES
:0 wc
* ^To.*web@mydomain.com
| /home/web/perltest.pl
这是 perl 脚本:
#!/usr/bin/env perl
system("touch /home/web/touchedfile");
然后在收到电子邮件时日志中的失败:
procmail: Executing "/home/web/perltest.pl"
/home/web/perltest.pl: line 3: syntax error near unexpected token `"touch /home/web/touchedfile"'
/home/web/perltest.pl: line 3: `system("touch /home/web/touchedfile");'
行尾都是 UNIX。该脚本从命令行运行良好。
如果我直接从命令行通过管道连接到 procmail,整个设置工作正常,但是当它作为本地交付过程的一部分被调用时,#! 脚本中似乎忽略了行。
如果我在管道中显式执行 perl,我可以运行 perl 脚本,如下所示:
:0 wc
* ^To.*web@mydomain.com
| perl /home/web/perltest.pl
……但我真的不想认输并那样做。