2010-12-08 22 views
0

即时通讯使用procmail将电子邮件转发到我的Maildir中的不同文件夹。 我使用这两行来从邮件中获取FROM和TO,这很好。procmail是使用linux命令chrooted还是有限制的?

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

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

Firstname Lastname <[email protected]> 

现在我想提取<之间的电子邮件>。 为此,我管这个变量FROM和TO来对它进行像这样的格式化。

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甚至切割(切割<和>)。所有在控制台上工作,但我用它在procmail它只是没有返回。

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

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

有人可以帮忙吗?也许我需要设置procmail莫名其妙。

回答

1

奇怪。

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

SHELL=/bin/bash 

的用户壳牌设置为/ bin/false,这是正确的,因为它的邮件用户,没有ssh访问的。

0

您应该正确引用​​和“$TO”。

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

0

您已经解决了这个问题,但要回答您的实际问题,可以在chroot中运行procmail,但这当然不是由Procmail自己完成的。 Sendmail曾经有一个叫做Sendmail Restricted Shell的东西(原来叫rsh,但是改名为remsh),它允许系统管理员根据交付过程进行chroot。但总而言之,这是MTA的一项功能,而不是Procmail的功能。