Spamassassin 将一些并非垃圾邮件的内容标记为垃圾邮件。我该如何分辨?

Spamassassin 将一些并非垃圾邮件的内容标记为垃圾邮件。我该如何分辨?

这是关于训练 spamassassin 的一个一般性问题。我有一个新设置的邮件服务器,它通过 spamassassin 过滤传入邮件。我最近收到一份航班预订被标记为垃圾邮件(分数 5),我想告诉 spamassassin 它不是垃圾邮件。(也许这样做还会重新发送邮件而不修改 spamassassin 标头?)

我尝试四处搜索,但只找到了有关如何让 spamassassin 将邮件标记为垃圾邮件(而不是如何修复误报)的信息,或者有关如何让写电子邮件的人不被标记为垃圾邮件的信息。

因此,关于对错误调用向 spamassassin 提供反馈:

  1. 有没有办法在电子邮件客户端中执行此操作(例如:Thunderbird)

  2. 有没有办法通过邮件服务器上的命令行来执行此操作?

我希望使流程尽可能的流畅,但无论如何都要完成工作。

SpamAssassin 提供的有关该电子邮件的详细信息:

 0.0 FSL_HELO_NON_FQDN_1    No description available.
 0.6 HK_RANDOM_ENVFROM      Envelope sender username looks random
-0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at http://www.dnswl.org/, no trust [82.150.225.129 listed in list.dnswl.org]
-0.0 RCVD_IN_MSPIKE_H3      RBL: Good reputation (+3) [82.150.225.129 listed in wl.mailspike.net]
 0.0 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different
 1.0 SPF_SOFTFAIL           SPF: sender does not match SPF record (softfail)
 1.6 SUBJ_ALL_CAPS          Subject is all capitals
 1.1 MIME_HTML_ONLY         BODY: Message only has text/html MIME parts
 0.7 HTML_IMAGE_ONLY_20     BODY: HTML: images with 1600-2000 bytes of words
 0.0 HTML_MESSAGE           BODY: HTML included in message
-0.0 RCVD_IN_MSPIKE_WL      Mailspike good senders
 0.0 UNPARSEABLE_RELAY      Informational: message has unparseable relay lines
 0.0 T_REMOTE_IMAGE         Message contains an external image

显然,主要的罪魁祸首是全大写的主题行 SUBJ_ALL_CAPS 和 MIME_HTML_ONLY(我猜,没有文本替代)。

该电子邮件用于确认航班预订,主题如下:

 Subject: JENNINGS/NICHOLAS KOSSOW MR 24 JAN MOF DPS

标头:

X-Envelope-From: <[email protected]>
X-Envelope-To: <[email protected]>
Received: from mail1.amadeus.net (unknown)
    by 147-49-15-51.rev.cloud.scaleway.com(Postfix 3.1.0/8.13.0) with SMTP id unknown
    Fri, 20 Jan 2017 07:55:10 +0000
    (envelope-from <[email protected]>
Received: from obeap115 (nat-dns-mnp.amadeus.net [82.150.225.129])
    by mail1.amadeus.net (Postfix) with ESMTP id 3F7A9200042
    for <[email protected]>; Fri, 20 Jan 2017 07:55:10 +0000 (GMT)
From: [email protected]
TO: [email protected]
Message-ID: <CTS/GA/C50D54421A07/[email protected]>
FND-Request-ID: <CTS/GA/C50D54421A07/[email protected]>
Job-ID: 1
Subject: JENNINGS/NICHOLAS KOSSOW MR 24 JAN MOF DPS
Date: Fri, 20 Jan 2017 07:55:09 +0000
Content-Type: multipart/mixed; 
    boundary="----=_Part_191904_1900935199.1484898909762"
MIME-Version: 1.0

答案1

在这种情况下,具体建议和一般建议都可能有用。

具体的

这里的根本问题是,加鲁达航空(真是的,他们那小小的棉袜)发送的确认电子邮件带有许多垃圾邮件的特征。邮件主题非常嘈杂,他们发送的纯 HTML 邮件包含大量图片和极少的文本,信封发件人 ( [email protected]) 显然是机器构造的随机数,而他们(外包)确认系统(amadeus.com)的电子邮件提供商的 SPF 记录毫无用处(尽管我们所有的建议都与此相反,有些人错误地认为列出一些他们的发送系统和目的~all)。

对于大多数这种情况,您无能为力。如果您想确保这些邮件能够通过,则在您的邮件中设置一行,上面~/.spamassassin/user_prefs写着“whitelist_from *@amadeus.com将使这些邮件发送给您”。进一步篡改触发的规则的权重可能不是一个好主意。SpamAssassin (SA) 规则集是通过过滤大量垃圾邮件并找出适用于大多数垃圾邮件的特征而创建的;通过关闭这些规则,您可能会向收件箱中发送更多内容,而不仅仅是 Garuda 确认电子邮件。

一般的

贝叶斯引擎正是擅长处理这种情况的。它旨在过滤掉那些不触发其他规则但包含你不想阅读的内容的电子邮件,同时帮助那些触发这些规则但包含你不想阅读的内容的电子邮件想读。

如果我没记错的话,如果你不训练它,引擎就不会做任何事情。训练它的最简单方法是维护两个文件夹,称为(比如说)spamhamspam你可以将进入收件箱但你不想要的电子邮件副本放入其中;也可以将ham违反 SA 但你想要的电子邮件副本放入其中,例如这封确认电子邮件。

然后每晚(左右)你都有一个 cron 任务,它说

sa-learn --spam --mbox mail/spam
sa-learn --ham  --mbox mail/ham

相应地修改路径。随着时间的推移,这将教会引擎你喜欢和不喜欢阅读什么。由于高贝叶斯分数可以为电子邮件的 SA 分数增加 +4.0 分,而低贝叶斯分数可以减去 1.9 分,因此训练有素的引擎可以真正帮助 SA 区分什么想读什么不要 - 但是你必须付出努力去教它

答案2

您似乎在使用 dovecot。我花了几周时间试图找到一种顺畅的集成方式,让用户可以轻松训练服务器端垃圾邮件过滤器,而无需复制邮件。

关键部分是反垃圾邮件Dovecot 插件。反垃圾邮件插件会触发移动三个文件夹组之间的操作:trashunsure和。具体来说,当检测到从 任何内容(但) 到 的spam转换时,将触发垃圾邮件学习操作,而当检测到从到 的转换时,将触发正常邮件学习操作。spamspamspamunsure

它支持不同的训练后端。一个简单的后端是mailtrain,它只是执行命令并将邮件放在标准输入上。它的配置可能如下所示:

plugin {
   antispam_backend = mailtrain
   antispam_mail_sendmail = /usr/local/bin/sa-learn-stdin.sh
   antispam_mail_spam = spam
   antispam_mail_notspam = ham
   antispam_mail_sendmail_args = -L
   antispam_spam = Junk;INBOX.Junk
   antispam_trash = Trash;INBOX.Trash
   antispam_allow_append_to_spam = no
}

和...一起/usr/local/bin/sa-learn-stdin.sh

#!/bin/bash
/usr/bin/spamc "$@" >> /tmp/sa-learn-log
exit 0

配置为“要作为垃圾邮件学习,请运行/usr/local/bin/sa-learn-stdin.sh -L spam,要作为正常邮件学习,请运行/usr/local/bin/sa-learn-stdin.sh -L ham。” 参数由antispam_mail_spamantispam_mail_notspam和进行配置antispam_mail_sendmail_args

这已经很不错了。如果您可以配置客户端将标记为垃圾邮件的邮件移至垃圾邮件文件夹,这已经是客户端和服务器之间相当自动化的集成。同样,如果您配置服务器在交付时将分类为垃圾邮件的邮件存储在垃圾邮件文件夹中(例如使用 Sieve),当用户将其移出垃圾邮件文件夹时,该邮件将被视为正常邮件。


为了改善与 Thunderbird 和 KMail 的集成,我编写了一个反垃圾邮件补丁,遗憾的是没有得到上游的任何反馈;使用风险自负

它为反垃圾邮件添加了一个配置选项,可以简单地将其添加到plugindovecot 配置中的部分:

   antispam_spam_flags = "Junk;$JUNK"

(引号很重要,可以防止他们$做出任何有趣的事情。)

补丁完成后,反垃圾邮件将如果邮件被标记为垃圾邮件或丢失了所有垃圾邮件标记,则触发学习操作。标记是 IMAP 的一项功能,客户端使用它来存储服务器端的信息。事实证明,Thunderbird 和 KMail 使用这些标记来存储邮件的垃圾邮件/垃圾邮件状态。

Junk当您将邮件标记为垃圾邮件时,Thunderbird 会设置该标志。KMail$JUNK的标志也是如此。因此,使用此配置,您可以在 KMail 中将 Thunderbird 中的邮件标记为垃圾邮件/非垃圾邮件,从而触发服务器端学习。

其他客户端(例如 K9-Mail)仍能顺利运行,因为它们默认将垃圾邮件移至垃圾邮件文件夹,而反垃圾邮件功能也会触发。


我认为,你可以在筛选。这是我的 TODO,但不幸的是我目前没有一个具有足够新的 dovecot 的可测试环境。

相关内容