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