0

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

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

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

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

现在我想提取 < 和 > 之间的电子邮件。为此,我像这样通过管道将变量 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(切割 < 和 >)。一切都在控制台上工作,但我在 procmail 中使用它,它什么也不返回。

是否可能不允许procmail使用grep和sed命令?类似 chroot 的东西?

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

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

4

3 回答 3

1

奇怪的。

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

SHELL=/bin/bash

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

于 2010-12-10T11:31:20.533 回答
0

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

于 2011-09-09T07:28:53.920 回答
0

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

您还需要前缀grepwithLC_ALL=POSIX以确保[:alnum:]实际匹配 26 个知名字符 + 10 位英文字母。

于 2010-12-10T10:40:04.047 回答