1

我写了一个小脚本,在维基百科上查找作品,然后将结果打印到命令行。我希望能够将该词通过电子邮件发送到我的服务器,然后让我的服务器将结果通过电子邮件发送给我。

到目前为止,我有一个名为“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
4

2 回答 2

0

根据您的邮件服务器(例如 postfix),您可能需要将其配置为允许通过管道发送邮件。大多数情况下,使用 ~/.procmailrc 是最简单的。

于 2011-04-18T23:13:50.440 回答
0

这是我为解决我的问题所做的...

  1. 我废弃了我的 bash 脚本,并在 python 中编写了相同的函数。我使用 python 是因为它的电子邮件解析功能。我还通过一些字符串转义预防代码运行用户输入,以便我可以安全地将其交给 python 的subprocess.popen()方法。

  2. 我试图将标准输入写入本地文件,以便我可以看到在哪里解析文本,但是邮件应用程序(邮件或后缀,不确定)没有写入文件的权限 - 最后可能是一件好事。为了调试,我只是在一个字符串中返回了原始标准输入(电子邮件标头和所有内容),然后通过电子邮件将其发回给自己以查看发生了什么。

  3. 我将 /etc/aliases 设置为读取

    wiki: "|/home/wiki/scripts/wiki.py"

  4. wiki.py 的权限是

    4 -rw-r--r-- 1 wiki mail 1902 2011-04-19 21:04 wiki.py

    这样邮件程序就成功地把它交给了你的脚本。如果您的脚本中有错误并且没有通过电子邮件发送给您,您也可以检查“/var/log/mail.log”的输出。如果邮件到达脚本,但由于语法或错误而出错,您应该收到来自 MAILER-DAEMON 的电子邮件回复,说明它无法投递。

  5. 我没有使用procmail或没有.procmailrc文件。/etc/aliases工作得很好。它将您的电子邮件传递给标准输入流,在 python 中试试这个:

extra="" while 1: line = sys.stdin.readline() if not line: break extra = extra + line.strip(" ")

于 2011-04-19T21:06:42.093 回答