使用 postfix 将垃圾邮件发送到特殊文件夹

使用 postfix 将垃圾邮件发送到特殊文件夹

我有一个运行 amavis 和 SpamAssassin 的 postfix 服务器来帮助过滤垃圾邮件。被检测为垃圾邮件的邮件在发送到用户的 Maildir 时如下所示:

来自 tom@tom-mint 2013 年 3 月 15 日星期五 01:46:20
返回路径:<tom@tom-mint>
X-原始至:[电子邮件保护]
送到了(送去了:[电子邮件保护]
X-Virus-Scanned: Debian amavisd-new at my-server.com
X-Spam-Flag:是
X-Spam 分数:6.463
X-垃圾邮件级别:******
X-Spam-Status:是,分数=6.463 tagged_above=2 required=6.31
    测试=[DRUGS_ERECTILE=2.221,FH_FROMEML_NOTLD=0.18,
    FSL_HELO_NON_FQDN_1=0.001,HELO_NO_DOMAIN=0.001,RCVD_IN_PBL=3.558,
    RDNS_DYNAMIC=0.363,TO_NO_BRKTS_DYNIP=0.139]自动学习=否
日期:2013 年 3 月 15 日星期五 01:46:19 -0400
到:[电子邮件保护]
主题:***垃圾邮件*** 你好
用户代理:Heirloom mailx 12.5 6/20/10
内容类型:text/plain;字符集=us-ascii
发件人:tom@tom-mint(汤姆)
状态:RO

买点伟哥!

请特别注意以 开头的主题***SPAM***X-Spam-Flag: YES标题。

postfix将这些邮件存储在特殊垃圾文件夹中的最佳配置方法是什么?

根据我的研究,似乎我需要使用与 Postfix 不同的邮件传递工具来实现此目的,但我不确定哪种方法最好。似乎有很多过时的信息,我想知道 Postfix 是否能够将消息放入文件夹中。

邮件目录都是 Maildir。

答案1

粗略浏览一下 postfix 的 local(8) 本地投递代理手册页,没有发现这种功能的迹象 - 正如预期的那样。这种任务通常被卸载到 procmail(可能通过 mailbox_command 指令),它可以处理您描述的任务,同时管理您的厨房水槽。procmail 的缺点是配置文件格式,优点是灵活性和大量可轻松找到的示例。如果最近出现了比 procmail 更好的东西,我不知道。

不过,就我而言,即使我找到了让 MTA 做你想做的事情的方法,我也不会走那条路,因为这种邮件分类事情有一种膨胀的方式,而且没有一个 MTA(据我所知:也许是 Exchange 有,谁知道呢)可以很好地充当灵活的消息处理程序/传递代理。

这是一个 procmail 配方,它将根据唯一的标题内容执行您想要的操作(其中 DEFAULT 是传送目录,通常类似于 $HOME/Mail/):

:0
* ^X-Spam-Flag: YES
$DEFAULT/.Spam/

编辑: (这假设 maildir 邮箱格式,如下方注释中所述。如果使用 mbox,则省略最后的斜杠)

答案2

正如 Alien Life Form 所说,这是 procmail 的工作。它不是邮件服务器本地投递代理的替代品;它是一个单独的进程,将被称为MDA 已完成其工作。

每个想要使用 procmail 分类邮件的用户都需要.forward在其主目录中创建一个名为的文件。该文件应包含以下内容:

"|exec /usr/local/bin/procmail || exit 75"

带有"标志和所有东西。

ALF 已经发布了一个基本.procmail文件,它将把带有垃圾邮件标签的邮件分类到一个单独的文件夹中。

答案3

您的邮件投递代理是什么(请参阅 main.cf mailbox_command)?如果 MDA 是 dovecot,它支持 Sieve IETF 标准(rfc5228),它可以比 procmail 做更多的事情,而不会暴露可能的安全漏洞。不要将 procmail 固定在 postfix/dovecot 上,sieve 是完全集成的。如果您使用 Courier,那么 procmail 是一个不错的解决方案。但是,您会发现 Pigeonhole 的 sieve/sievec 程序更快、更干净。

以下是一个简单的筛选脚本,用于识别您的垃圾邮件标头并将邮件放入垃圾箱文件中。

require "fileinto";

if header :comparator "i;ascii-casemap" :contains "Subject" "**SPAM**"  
{
  fileinto "Trash";
  stop;
}

相关内容