procmail是否被chrooted或限制使用linux命令?

时间:2010-12-08 10:20:01

标签: email grep extract procmail

我使用procmail将电子邮件转发到我的Maildir中的不同文件夹。 我使用这两行来从邮件中获取FROM和TO,这非常好。

FROM=`formail -x"From:"`
TO=`formail -x"To:"`

这两个命令返回整行,没有From:和To:前缀。 所以我得到类似的东西:

Firstname Lastname <firstname.lastname@mail-domain.com>

现在我要在&lt;之间提取电子邮件和&gt;。 对于这个我管道变量FROM和TO像这样grepping它。

FROM_PARSED=`echo $FROM | grep -o '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*'`
TO_PARSED=`echo $TO | grep -o '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*'`

但是当我使用LOG = FROM_PARSED将FROM_PARSED打印到procmail日志中时,我在FROM_PARSED和TO_PARSED中得到一个空字符串。

但是如果我在我的控制台上运行这些命令,一切正常。我尝试了许多其他的grepping方法,使用grep,egrep,sed甚至cut(cutting&lt;和&gt;)。所有在控制台上工作,但我在procmail中使用它只返回任何内容。

是否有可能不允许procmail使用grep和sed命令?有点像chroot吗?

我的procmail日志中没有任何错误日志。我只想从FROM和TO行中提取有效的电子邮件地址。用formail提取工作,但用grep或sed解析失败,即使表达式是正确的。

有人可以帮忙吗?也许我需要以某种方式设置procmail。

3 个答案:

答案 0 :(得分:1)

奇怪。

我将此添加到用户.procmailrc文件

SHELL=/bin/bash

用户shell设置为/ bin / false,这是正确的,因为它是一个邮件用户,根本没有ssh访问。

答案 1 :(得分:0)

您应正确引用"$FROM"和“$TO”。

您还需要在grep前加LC_ALL=POSIX前缀,以确保[:alnum:]实际匹配26个知名字符+10个英文字母数字。

答案 2 :(得分:0)

您已经解决了这个问题,但为了回答您的实际问题,可以在chroot中运行procmail,但这肯定不是由Procmail本身完成的。 Sendmail过去经常使用称为Sendmail Restricted Shell(最初称为rsh但重命名为remsh)的东西,它允许系统管理员chroot交付过程。但总而言之,这是MTA的一个功能,而不是Procmail。