在接收到的邮件上运行Linux脚本
我写了一个小脚本,可以在维基百科上查找一个词,然后把结果打印到命令行上。我想把这个词通过邮件发送到我的服务器,然后让服务器把结果再发回给我。
到目前为止,我创建了一个新用户叫“wiki”,所有的邮件都发到这个用户那里。我收到了邮件,没问题。在 /etc/aliases 文件里,我把收到的邮件重定向到我写的脚本。
# See man 5 aliases for format
wiki: "|/home/wiki/scripts/wiki"
这个部分运行得很好。
我的脚本在命令行下运行得也不错,就像我直接输入
$ ./wiki <whatever>
但是当我给 wiki@mydomain.com 发送邮件时,却出现了权限被拒绝的错误。
我的 wiki 脚本的权限设置是:
-rwxr-xr-x 1 wiki wiki 427 2011-04-18 22:54 wiki
到底出了什么问题!我需要设置什么权限呢?
编辑(2011年4月18日晚上8:20):这是我的脚本。
#!/bin/bash
read MSG
echo $MSG >> "newfile"
FROM=$(echo "$MSG" | cut -d " " -f2)
DATA=$(echo "$MSG" | cut -d " " -f3)
if [ MSG ]
then
RTN=`nslookup -q=txt $DATA.wp.dg.cx | grep "text =" | cut -d"=" -f2`
echo $RTN | sendmail -s "wikipedia: '$DATA'" $FROM
else
echo wilkipedia nslookup. Please supply a command line argument.
fi
2 个回答
根据你使用的邮件服务器(比如说 postfix),你可能需要设置一下,让它可以处理邮件转发。通常情况下,使用 ~/.procmailrc 这个文件是最简单的办法。
这是我解决问题的方法...
我放弃了之前的bash脚本,改用python写了同样的功能。选择python是因为它有处理邮件的功能。我还对用户输入做了一些字符串转义的处理,这样就可以安全地把它交给python的
subprocess.popen()
方法。我想把标准输入写入一个本地文件,这样可以查看文本的解析情况,但邮件应用程序(是mail还是postfix,我不太确定)没有权限写文件——这其实最后是件好事。为了调试,我直接把原始的标准输入(包括邮件头)作为字符串返回,然后发邮件给自己,看看发生了什么。
我设置了 /etc/aliases 文件,内容是
wiki: "|/home/wiki/scripts/wiki.py"
wiki.py 的权限设置是
4 -rw-r--r-- 1 wiki mail 1902 2011-04-19 21:04 wiki.py
这样邮件程序就能成功把邮件交给你的脚本。如果你的脚本出错,没能发邮件回来,可以去检查 "/var/log/mail.log" 看看输出。如果邮件到达了脚本,但因为语法错误或bug出错了,你应该会收到来自MAILER-DAEMON的邮件,说明邮件无法送达。
我没有使用
procmail
或者创建.procmailrc
文件。/etc/aliases
完全可以正常工作。它会把你的邮件传递给标准输入流,在python中可以尝试这样:
extra=""
while 1:
line = sys.stdin.readline()
if not line:
break
extra = extra + line.strip(" ")