我使用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。
答案 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。