Spamassassin将某些内容标记为不是垃圾内容的垃圾内容。我怎么这么说呢?


14

这是有关训练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: <tdsfndprd@amadeus.com>
X-Envelope-To: <nick@xxx.xxx>
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 <tdsfndprd@amadeus.com>
Received: from obeap115 (nat-dns-mnp.amadeus.net [82.150.225.129])
    by mail1.amadeus.net (Postfix) with ESMTP id 3F7A9200042
    for <nick@xxx.xxx>; Fri, 20 Jan 2017 07:55:10 +0000 (GMT)
From: eticket@garuda-indonesia.com
TO: NICK@XXX.XXXX
Message-ID: <CTS/GA/C50D54421A07/1@tds.amadeus.com>
FND-Request-ID: <CTS/GA/C50D54421A07/1@tds.amadeus.com>
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

第一步必须要问为什么将其标记为垃圾邮件。没有这些,我们可以提出一般性建议,向您展示如何调整火腿的贝叶斯引擎,但我们无助于专门解决点火失败的规则。请在您的问题中添加电子邮件正文的前几行和所有标题
MadHatter

@MadHatter感谢您的建议,并相应地更新了问题。
尼克·詹宁斯

您不会说贝叶斯得分是多少。您是否正在使用贝叶斯引擎?
MadHatter

分数是5.0 ..它插入主题:***** SPAM 5.0 *****
Nick Jennings

1
那是SA的总得分,而不是贡献的贝叶斯得分。但请放心,从您撰写的其余内容来看,贝叶斯引擎似乎没有点火,因为您从未训练过它,并且打算解决这个问题!
MadHatter

Answers:


22

在这种情况下,既有具体建议也有一般建议可能会有用。

具体

这里的根本问题是,鹰航航空公司祝福他们的小棉袜,正在发送带有许多垃圾邮件特征的确认电子邮件。主题行是“非常粗暴”,他们发送仅包含HTML的电子邮件,其中包含大量图像和很少的文本,信封发送者(tdsfndprd@amadeus.com)很明显是机器构造的随机数,而他们的(外包)确认系统的电子邮件提供者(amadeus.com)的SPF记录毫无用处(尽管我们的所有建议相反,有些人错误地认为记录中列出某些发送系统和结尾的价值~all)。

您几乎无能为力。如果您想确保这些消息能够成功通过,请在您的一行中~/.spamassassin/user_prefs显示一条信息,whitelist_from *@amadeus.com将这些消息发送给您。更进一步并篡改所触发规则的权重可能是一个坏主意。SpamAssassin(SA)规则集是通过过滤大量垃圾邮件并找出适用于大多数垃圾邮件的特征而创建的;您可以通过关闭这些规则,将您的收件箱打开的不仅仅是Garuda确认电子邮件。

一般

这正是贝叶斯引擎处理得很好的情况。它的目的是过滤掉不触发其他规则,但包含了你不想看的东西,而通过电子邮件,做触发这些规则,但包含了你的东西帮助电子邮件想读。

IIRC,如果您不训练引擎,引擎将无能为力。最简单的培训方法是维护两个文件夹,分别称为(say)spamham。到spam你把它发到您的收件箱邮件的副本,但你不想; 放入ham您的邮件副本,这些副本违反了SA的规定,但您确实想要,例如此确认电子邮件。

然后每晚(或如此),您都会进行一项cron工作,

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

相应地修改路径。随着时间的流逝,这将教会引擎您喜欢做什么和不喜欢做什么。由于高贝叶斯评分可以增加+4.0点到电子邮件的SA得分,而低一个可以减去1.9,一个训练有素的引擎可以真正帮助SA分清什么想从读什么书,你没有-但你必须付出努力教它


1
听起来很合理。我将尝试垃圾邮件/火腿邮箱流。谢谢!
尼克·詹宁斯

1
“祝福他们的小棉袜”
Alex Reinking

@MadHatter对此进行了跟进。我尝试将Spamassassin更改过的SPAM电子邮件拖到Ham文件夹中,当我运行sa-learn --ham ...命令时,它说它发现0封电子邮件可供学习:Learned tokens from 0 message(s) (0 message(s) examined)...我尝试.eml将SpamAsssasin将原始电子邮件放入的附件添加到Ham文件夹中直接在服务器上,但是仍然说它发现有0条消息要处理...
Nick Jennings

我应该补充说,按照report_safe 1设置,我将原始电子邮件作为附件处理。
尼克·詹宁斯

@NickJennings,那么您可能必须使用具有MIME功能的客户端来剥离原始电子邮件,并发送到sa-learn。如果太痛苦了,请关闭report_safe。除了将贝叶斯过滤器的假设与SA的假设分开来之外,最好将火腿学习器与其他被误识别为垃圾邮件的东西一起训练。我将自己收到的所有个人邮件送给我,因为这是我最想阅读的内容。
MadHatter

7

您似乎正在使用鸽舍。我花了几周的时间试图弄清楚平滑的集成,该集成使用户可以轻松训练服务器端垃圾邮件过滤器而不必复制邮件。

关键部分是Antispam Dovecot插件。反垃圾邮件插件上触发移动 3个文件夹组之间的操作:trashunsurespam。具体来说,当检测到从(但不到spam)的过渡spam时,将触发垃圾邮件学习操作;当检测到从spam到的过渡unsure时,将触发火腿学习操作。

它支持不同的培训后端。一个简单的是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_notspamantispam_mail_sendmail_args

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


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

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

   antispam_spam_flags = "Junk;$JUNK"

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

使用此补丁程序,如果邮件收到垃圾邮件标记或释放其所有垃圾邮件标记,则反垃圾邮件将触发学习操作。标志是IMAP功能,客户端使用它来存储服务器端的信息位。事实证明,Thunderbird和KMail使用这些标志来存储邮件的垃圾/垃圾邮件状态。

Junk当您将邮件标记为垃圾邮件时,该标志由Thunderbird设置。同样对于$JUNKKMail标记。因此,使用此配置,您可以通过在KMail的Thunderbird中将邮件标记为Junk / NonJunk来触发服务器端学习。

其他客户端(例如K9-Mail)仍然可以很好地运行,因为默认情况下是将垃圾邮件移到“垃圾邮件”文件夹中,反垃圾邮件也会触发该垃圾邮件。


我想,您可以在IMAPSieve中实现相同的功能。这是在我的TODO上的,但是不幸的是,我目前没有可立即进行测试的环境,并且鸽舍也足够新。


这看起来很有趣,一定会调查一下。
尼克·詹宁斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.