我工作的地方经常将电子邮件发送到多个组,这意味着电子邮件将被过滤到随机目录中,即使在线程中,如果将新组添加到线程中也是如此。我希望看到发送邮件的每个组文件夹中的每封电子邮件,这意味着使用更多的磁盘空间,但磁盘空间很便宜。为此,有“c”标志,但问题是,如果为每个规则添加“c”,我将把每封电子邮件放在适当的文件夹中,并放在最后的收件箱中。所以我想要最后一条规则,它可以识别这封电子邮件是否已被识别/过滤到某个文件夹中,如果没有,则让它进入收件箱。我尝试使用“test -z $LASTFOLDER”,它似乎可以工作,除了这个 procmail 返回了 fetchmail 失败,这反过来又没有从 imap 服务器中删除我的电子邮件,并且发生了混乱。正确的做法是什么我应该使用其他东西来进行邮件过滤吗?我可以清楚地写下我想要的内容吗?
答案1
您可以对所有将邮件排序到列表文件夹的规则执行类似的操作:
:0
* ^List-Id:...
{
:0 c:
somefolder
:0 fw
| formail -a X-Chad-Loop: Chad was here
}
然后就在结束之前:
:0
* ^X-Chad-Loop:\ Chad\ was\ here
{
:0
/dev/null
HOST
}
我思考这也将记录交付到/dev/null
.如果你不喜欢这样,你就必须玩LOGABSTRACT
。
附带说明:请注意,它procmail
已经很长时间没有维护了,并且它存在众所周知的安全问题。甚至一些老牌开发人员现在也建议改用其他东西。就其价值而言,我个人的偏好是频分复用,其安全记录要好得多。
答案2
这个LASTFOLDER
想法完全没问题;您只需要确保不会最终向调用过程发出失败信号。您没有显示您的代码,但类似以下内容应该可以正常工作。
:0
* LASTFOLDER ?? .
/dev/null
该variable ?? regex
语法是 Procmail 用于检查变量的内置工具。单点将匹配除空字符串(或者从技术上讲,仅包含换行符的字符串)之外的任何值。