我使用Procmail将电子邮件转发到我的Maildir中的不同文件夹。我使用这两条线从邮件中获取从邮件中获取,这很好。

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

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

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

现在,我想在<和>之间提取电子邮件。为此,我将变量从这样的变量中输送。

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

但是,当我使用log = from_parsed从_parss从_parss中打印到procmail日志中时,我会在from_parsed和to_parsed中获得一个空字符串。

但是,如果我在控制台上运行这些命令,则所有这些命令都可以正常工作。我尝试了许多其他Greping方法,使用GREP,EGREP,SED甚至切割(切割<和>)。所有工作都在控制台上,但我在Procmail中使用它只是什么都没有返回。

是否不允许Procmail使用GREP和SED命令?像chroot之类的东西?

我在Procmail日志中没有任何错误日志。我只想从“从和线”提取有效的电子邮件地址。提取作用作品,但用GREP或SED解析,即使表达正确,也会失败。

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

有帮助吗?

解决方案

奇怪的。

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

SHELL=/bin/bash

用户将外壳设置为 /bin /false,这是正确的,因为它是邮件用户,根本没有SSH访问。

其他提示

你应该正确报价 "$FROM" 和 ”$TO".

您还需要前缀 grepLC_ALL=POSIX 确保 [:alnum:] 实际上将与英语字母的26个著名字符 + 10位数字匹配。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top