Loading...

垃圾邮件的计划

Original

2002年8月

(本文描述了我们构建的垃圾邮件过滤技术,该技术用于测试Arc的基于网络的邮件阅读器。改进的算法在更好的贝叶斯过滤中进行了描述。)

我认为可以阻止垃圾邮件,而基于内容的过滤器是实现这一目标的方法。垃圾邮件发送者的致命弱点在于他们的消息。他们可以绕过你设置的任何其他障碍。至少到目前为止,他们是这样做的。但他们必须传递他们的信息,无论是什么。如果我们能编写识别他们消息的软件,他们就无法绕过这一点。


对于收件人来说,垃圾邮件是很容易识别的。如果你雇人来阅读你的邮件并丢弃垃圾邮件,他们会很容易做到这一点。我们需要做多少工作,除了人工智能,才能自动化这个过程?

我认为我们能够用相当简单的算法解决这个问题。事实上,我发现你可以仅仅使用单个单词的垃圾邮件概率的贝叶斯组合来相当好地过滤现代垃圾邮件。使用稍微调整过的(如下所述)贝叶斯过滤器,我们现在每1000封垃圾邮件中少于5封漏掉,且没有误报。

统计方法通常不是人们在编写垃圾邮件过滤器时首先尝试的方法。大多数黑客的第一反应是尝试编写识别垃圾邮件的个别特征的软件。你查看垃圾邮件,想,这些家伙真是厚颜无耻,竟然试图给我发送以“亲爱的朋友”开头或主题行全部大写并以八个感叹号结尾的邮件。我可以用大约一行代码过滤掉这些东西。

于是你这样做了,最开始它确实有效。一些简单的规则会大大减少你收到的垃圾邮件。仅仅查找单词“点击”就能捕获我垃圾邮件语料库中79.7%的电子邮件,误报率仅为1.2%。

在我尝试统计方法之前,我花了大约六个月的时间编写寻找个别垃圾邮件特征的软件。我发现识别最后几百分之一的垃圾邮件变得非常困难,并且随着我使过滤器变得更严格,我得到了更多的误报。

误报是指被错误识别为垃圾邮件的无辜电子邮件。对于大多数用户来说,错过合法邮件比收到垃圾邮件要严重得多,因此产生误报的过滤器就像一种治疗痤疮的药物,给患者带来了死亡的风险。

用户收到的垃圾邮件越多,他就越不可能注意到他垃圾邮件文件夹中有一封无辜的邮件。奇怪的是,你的垃圾邮件过滤器越好,误报就越危险,因为当过滤器真的很好的时候,用户更可能忽略他们捕获的所有内容。

我不知道为什么我会这么长时间避免尝试统计方法。我想这可能是因为我沉迷于自己识别垃圾邮件特征,就好像我在与垃圾邮件发送者进行某种竞争游戏。(非黑客通常不会意识到这一点,但大多数黑客都是非常有竞争力的。)当我尝试统计分析时,我立刻发现它比我聪明得多。它发现,当然,“virtumundo”和“teens”这样的术语是垃圾邮件的良好指示。但它还发现“per”、“FL”和“ff0000”也是垃圾邮件的良好指示。实际上,“ff0000”(明亮的红色的html代码)被证明是与任何色情术语一样好的垃圾邮件指示。


以下是我如何进行统计过滤的简要说明。我从一个垃圾邮件语料库和一个非垃圾邮件语料库开始。目前每个语料库中大约有4000条消息。我扫描每个语料库中每条消息的整个文本,包括标题和嵌入的html和javascript。我目前将字母数字字符、破折号、撇号和美元符号视为标记的一部分,而将其他所有内容视为标记分隔符。(这里可能还有改进的空间。)我忽略全数字的标记,并且我也忽略html注释,甚至不将其视为标记分隔符。

我计算每个标记(忽略大小写,目前)在每个语料库中出现的次数。在这个阶段,我最终得到了两个大型哈希表,每个语料库一个,将标记映射到出现次数。

接下来,我创建一个第三个哈希表,这次将每个标记映射到包含它的电子邮件是垃圾邮件的概率,我的计算方法如下[1]:


(let ((g (* 2 (or (gethash word good) 0))) (b (or (gethash word bad) 0))) (unless (< (+ g b) 5) (max .01 (min .99 (float (/ (min 1 (/ b nbad)) (+
(min 1 (/ g ngood)) (min 1 (/ b nbad)))))))))

其中word是我们正在计算概率的标记,good和bad是我在第一步中创建的哈希表,ngood和nbad分别是非垃圾邮件和垃圾邮件的数量。

我用代码解释这一点是为了展示几个重要的细节。我想稍微偏向概率,以避免误报,通过反复试验,我发现一个好的方法是将good中的所有数字加倍。这有助于区分偶尔出现在合法电子邮件中的单词和几乎从不出现的单词。我只考虑总共出现超过五次的单词(实际上,由于加倍,在非垃圾邮件中出现三次就足够了)。然后还有一个问题是如何为在一个语料库中出现但在另一个语料库中不出现的单词分配概率。同样通过反复试验,我选择了.01和.99。这里可能还有调整的空间,但随着语料库的增长,这种调整无论如何都会自动发生。

特别细心的人会注意到,虽然我将每个语料库视为单个长文本流以计算出现次数,但在计算垃圾邮件概率时,我使用的是每个语料库中的电子邮件数量,而不是它们的总长度。这增加了另一种轻微的偏见,以保护免受误报。

当新邮件到达时,它会被扫描为标记,最有趣的十五个标记(有趣的标准是它们的垃圾邮件概率与中性.5的距离)用于计算邮件是垃圾邮件的概率。如果probs是这十五个单独概率的列表,你可以这样计算组合概率:

(let ((prod (apply #'* probs))) (/ prod (+ prod (apply #'* (mapcar #'(lambda (x) (- 1 x)) probs)))))

在实践中出现的一个问题是,对于你从未见过的单词,即在单词概率哈希表中不存在的单词,应该分配什么概率。我发现,再次通过反复试验,.4是一个不错的数字。如果你从未见过一个单词,它可能是相当无辜的;垃圾邮件单词往往是过于熟悉的。

在附录的最后,有这个算法应用于实际电子邮件的示例。

如果上述算法给邮件的垃圾邮件概率超过.9,我就将其视为垃圾邮件。但实际上,我将这个阈值放在哪里并没有太大关系,因为很少有概率最终落在范围的中间。


统计方法的一个巨大优势是你不必阅读那么多垃圾邮件。在过去的六个月里,我确实阅读了数千封垃圾邮件,这真的有点令人沮丧。诺伯特·维纳说,如果你与奴隶竞争,你就会成为奴隶,与垃圾邮件发送者竞争也有类似的贬低感。要识别个别垃圾邮件特征,你必须试图进入垃圾邮件发送者的思维,坦率地说,我希望尽量少花时间在垃圾邮件发送者的思维中。

但贝叶斯方法的真正优势当然在于你知道自己在测量什么。特征识别过滤器如SpamAssassin会给电子邮件分配一个垃圾邮件“分数”。贝叶斯方法则分配一个实际的概率。“分数”的问题在于,没有人知道它意味着什么。用户不知道它意味着什么,但更糟糕的是,过滤器的开发者也不知道。一封电子邮件因为包含单词“性”而应该获得多少?概率当然可能是错误的,但关于它意味着什么,或者如何结合证据来计算它几乎没有歧义。根据我的语料库,“性”表示包含该电子邮件是垃圾邮件的概率为.97,而“性感”则表示.99的概率。而贝叶斯规则同样明确地表示,包含这两个单词的电子邮件在(不太可能的)没有其他证据的情况下,有99.97%的机会是垃圾邮件。

因为它在测量概率,贝叶斯方法考虑了电子邮件中的所有证据,包括好的和坏的。那些在垃圾邮件中很少出现的单词(如“虽然”或“今晚”或“显然”)对降低概率的贡献与像“退订”和“选择加入”这样的坏单词对提高概率的贡献一样多。因此,一封偶然包含“性”这个词的无辜电子邮件不会被标记为垃圾邮件。

理想情况下,当然,概率应该为每个用户单独计算。我收到很多包含“Lisp”这个词的电子邮件,而(到目前为止)没有垃圾邮件包含这个词。因此,像这样的单词实际上是向我发送邮件的一种密码。在我早期的垃圾邮件过滤软件中,用户可以设置这样单词的列表,包含这些单词的邮件会自动通过过滤器。我在我的列表中放入了“Lisp”这样的单词,还有我的邮政编码,以便(听起来相当像垃圾邮件的)在线订单收据能够通过。我以为我很聪明,但我发现贝叶斯过滤器为我做了同样的事情,而且还发现了很多我没有想到的单词。

当我一开始说我们的过滤器每1000封邮件中漏掉不到5封垃圾邮件且没有误报时,我指的是基于我的邮件语料库过滤我的邮件。但这些数字并不具有误导性,因为这正是我所倡导的方法:根据每个用户收到的垃圾邮件和非垃圾邮件过滤每个用户的邮件。基本上,每个用户应该有两个删除按钮,普通删除和作为垃圾邮件删除。任何被标记为垃圾邮件的邮件都会进入垃圾邮件语料库,而其他所有邮件则进入非垃圾邮件语料库。

你可以为用户提供一个种子过滤器,但最终每个用户应该根据他实际收到的邮件拥有自己的每个单词概率。这(a)使过滤器更有效,(b)让每个用户决定自己对垃圾邮件的精确定义,以及(c)也许最好的是,使垃圾邮件发送者很难调整邮件以通过过滤器。如果过滤器的大部分智能在于个别数据库中,那么仅仅调整垃圾邮件以通过种子过滤器并不能保证它们能顺利通过每个用户的不同且经过训练的过滤器。

基于内容的垃圾邮件过滤通常与白名单结合使用,白名单是可以接受的发件人列表,无需过滤。构建这样的白名单的一种简单方法是保留用户曾经发送邮件的每个地址的列表。如果邮件阅读器有一个作为垃圾邮件删除的按钮,那么你也可以添加用户作为普通垃圾邮件删除的每封电子邮件的发件人地址。

我支持白名单,但更多的是作为节省计算的一种方式,而不是作为改善过滤的一种方式。我曾经认为白名单会使过滤变得更容易,因为你只需过滤来自你从未听说过的人的电子邮件,而第一次给你发送邮件的人在他们可以对你说的内容上受到惯例的限制。你已经认识的人可能会给你发送一封谈论性的电子邮件,但第一次给你发送邮件的人不太可能这样做。问题是,人们可能有多个电子邮件地址,因此新的发件人地址并不能保证发件人是第一次给你写信。老朋友(尤其是黑客)突然用新的发件人地址给你发送电子邮件并不罕见,因此你不能冒险通过特别严格地过滤来自未知地址的邮件而导致误报。

不过,从某种意义上说,我的过滤器确实体现了一种白名单(和黑名单),因为它们是基于整个消息,包括标题。因此在这方面,它们“知道”受信任发件人的电子邮件地址,甚至知道邮件是如何从他们那里到达我的。它们对垃圾邮件也知道同样的事情,包括服务器名称、邮件版本和协议。


如果我认为我可以保持当前的垃圾邮件过滤率,我会认为这个问题已经解决。但能够过滤掉大多数现代垃圾邮件并没有太大意义,因为垃圾邮件在不断演变。事实上,到目前为止,大多数反垃圾邮件技术就像农药,只是创造了一种新的、抗药性的虫害。

我对贝叶斯过滤器更有希望,因为它们会随着垃圾邮件的演变而演变。因此,当垃圾邮件发送者开始使用“c0ck”而不是“cock”来逃避基于单个单词的简单垃圾邮件过滤器时,贝叶斯过滤器会自动注意到。实际上,“c0ck”比“cock”更具破坏性证据,贝叶斯过滤器确切知道它更具破坏性多少。

然而,任何提出垃圾邮件过滤计划的人都必须能够回答这个问题:如果垃圾邮件发送者确切知道你在做什么,他们能多好地绕过你?例如,我认为如果基于校验和的垃圾邮件过滤成为一个严重障碍,垃圾邮件发送者只会转向疯狂的填空技术来生成消息正文。

要击败贝叶斯过滤器,垃圾邮件发送者不仅需要使他们的电子邮件独特或停止使用个别的脏话。他们必须使他们的邮件与普通邮件无法区分。而我认为这将严重限制他们。垃圾邮件主要是销售宣传,因此,除非你的常规邮件都是销售宣传,否则垃圾邮件不可避免地会有不同的特征。而且,垃圾邮件发送者当然还必须改变(并不断改变)他们的整个基础设施,因为否则,邮件头对贝叶斯过滤器来说看起来仍然很糟糕,无论他们对消息正文做了什么。我对垃圾邮件发送者使用的基础设施了解不够,无法知道使邮件头看起来无辜有多难,但我猜这比使消息看起来无辜要难得多。

假设他们能够解决邮件头的问题,未来的垃圾邮件可能看起来像这样:

嘿,你好。觉得你应该查看以下内容:http://www.27meg.com/foo

因为这大约是基于内容的过滤器留给垃圾邮件发送者的销售宣传的空间。(实际上,即使要通过过滤器获得这一点也很困难,因为如果电子邮件中的其他所有内容都是中性的,垃圾邮件概率将取决于网址,而使其看起来中性需要一些努力。)

垃圾邮件发送者的范围从运行所谓的选择加入列表的企业,他们甚至不试图掩盖自己的身份,到劫持邮件服务器以发送推广色情网站的垃圾邮件的家伙。如果我们使用过滤器将他们的选择缩小到像上面那样的邮件,这应该会使垃圾邮件发送者在“合法”范围的业务停滞;他们因各种国家法律的要求而感到有义务包括关于他们的垃圾邮件不是垃圾邮件的原因,以及如何取消你的“订阅”的模板文本,这种文本很容易识别。

(我曾经认为相信更严格的法律会减少垃圾邮件是天真的。现在我认为,虽然更严格的法律可能不会减少垃圾邮件发送者发送的垃圾邮件数量,但它们肯定可以帮助过滤器减少收件人实际看到的垃圾邮件数量。)

在整个范围内,如果你限制垃圾邮件发送者可以进行的销售宣传,你将不可避免地使他们的业务停滞。这个词业务是一个重要的词。垃圾邮件发送者是商人。他们发送垃圾邮件是因为这有效。它有效是因为尽管响应率极其低(最多每百万15个,而目录邮件每百万3000个),但对他们来说,成本几乎为零。对收件人来说,成本是巨大的,每百万收件人花费5个工作周来删除垃圾邮件,但垃圾邮件发送者不必支付这些费用。

发送垃圾邮件确实会让垃圾邮件发送者付出一些代价。[2]因此,我们越能降低响应率——无论是通过过滤,还是通过使用过滤器迫使垃圾邮件发送者稀释他们的宣传——就会有越来越少的企业觉得值得发送垃圾邮件。

垃圾邮件发送者使用他们所使用的那种销售宣传的原因是为了提高响应率。这可能比进入垃圾邮件发送者的思维更令人作呕,但让我们快速看看回应垃圾邮件的人的思维。这个人要么令人惊讶地轻信,要么对他们的性兴趣深感否认。在这两种情况下,尽管垃圾邮件在我们看来令人厌恶或愚蠢,但对他们来说却是令人兴奋的。垃圾邮件发送者不会说这些话,如果它们听起来不令人兴奋。而“觉得你应该查看以下内容”对垃圾邮件接收者的吸引力显然远不如垃圾邮件发送者现在所说的那种话。结果是:如果它不能包含令人兴奋的销售宣传,垃圾邮件作为营销工具的效果就会降低,越来越少的企业想要使用它。

这就是最终的大胜利。我开始编写垃圾邮件过滤软件是因为我不想再看这些东西。但如果我们在过滤垃圾邮件方面变得足够优秀,它将停止工作,垃圾邮件发送者实际上会停止发送它。


在所有对抗垃圾邮件的方法中,从软件到法律,我相信贝叶斯过滤将是最有效的单一方法。但我也认为,我们采取的反垃圾邮件努力越多,效果就越好,因为任何限制垃圾邮件发送者的措施都将使过滤变得更容易。即使在基于内容的过滤器的世界中,我认为如果有许多不同类型的软件同时使用,那也是一件好事。过滤器的种类越多,垃圾邮件发送者调整垃圾邮件以通过它们的难度就越大。

附录:过滤示例

这里 是我在写这篇文章时收到的一封垃圾邮件示例。这封垃圾邮件中最有趣的十五个单词是:

qvp0045 indira mx-05 intimail $7500 freeyankeedom cdo bluefoxmedia jpg unsecured platinum 3d0 qves 7c5 7c266675

这些单词是来自标题和消息正文的混合,这在垃圾邮件中是典型的。垃圾邮件的另一个典型特征是,这些单词在我的数据库中都有.99的垃圾邮件概率。实际上,有超过十五个单词的概率为.99,而这些只是第一次看到的前十五个。

不幸的是,这使得这封电子邮件成为贝叶斯规则使用的一个无聊示例。要查看有趣的概率多样性,我们必须查看 这个 实际上相当不典型的垃圾邮件。

这封垃圾邮件中最有趣的十五个单词及其概率是:


madam 0.99 promotion 0.99 republic 0.99 shortest 0.047225013 mandatory 0.047225013 standardization 0.07347802 sorry 0.08221981 supported 0.09019077
people's 0.09019077 enter 0.9075001 quality 0.8921298 organization 0.12454646 investment 0.8568143 very 0.14758544 valuable 0.82347786

这次证据是好坏混合的。像“shortest”这样的单词几乎与“madam”或“promotion”一样多地证明无辜。但罪名的证据仍然更强。如果你根据贝叶斯规则结合这些数字,结果概率为.9027。

“Madam”显然来自以“亲爱的先生或女士”开头的垃圾邮件。它们并不常见,但“madam”从未出现在我的合法电子邮件中,关键在于比例。

“Republic”得分高是因为它经常出现在尼日利亚诈骗邮件中,并且在提到韩国和南非的垃圾邮件中也出现过一两次。你可以说这只是一个偶然,帮助识别这封垃圾邮件。但我发现,在检查垃圾邮件概率时,有很多这样的偶然事件,它们有一种神奇的倾向,推动事情朝着正确的方向发展,而不是错误的方向。在这种情况下,“Republic”这个词出现在尼日利亚诈骗邮件和这封垃圾邮件中并不是完全偶然。涉及欠发达国家的可疑商业提议有一个完整的类别,而这些提议更有可能有明确(因为它们不是)表明它们是共和国的名称。[3]

另一方面,“enter”是一个真正的失误。它主要出现在退订说明中,但在这里是以完全无辜的方式使用的。幸运的是,统计方法相当稳健,可以容忍相当多的失误,而不会使结果开始偏离。

作为比较, 这里 是一个罕见的例子,一封垃圾邮件成功通过了过滤器。为什么?因为它恰好充满了在我实际电子邮件中出现的单词:


perl 0.01 python 0.01 tcl 0.01 scripting 0.01 morris 0.01 graham 0.01491078 guarantee 0.9762507 cgi 0.9734398 paul 0.027040077 quite 0.030676773 pop3
0.042199217 various 0.06080265 prices 0.9359873 managed 0.06451222 difficult 0.071706355

这里有几个好消息。首先,这封邮件可能不会通过没有专门研究编程语言并且有一个叫Morris的好朋友的人的过滤器。对于普通用户来说,这里所有前五个单词都是中性的,不会对垃圾邮件概率产生贡献。

其次,我认为基于单词对的过滤(见下文)可能会抓住这一点:“成本效益”、“设置费用”、“退款”——这些都是相当有罪的东西。当然,如果他们继续向我发送垃圾邮件(或我所在的网络),那么“Hostex”本身也会被识别为垃圾邮件术语。

最后, 这里 是一封无辜的电子邮件。它最有趣的十五个单词如下:


continuation 0.01 describe 0.01 continuations 0.01 example 0.033600237 programming 0.05214485 i'm 0.055427782 examples 0.07972858 color 0.9189189
localhost 0.09883721 hi 0.116539136 california 0.84421706 same 0.15981844 spot 0.1654587 us-ascii 0.16804294 what 0.19212411

这里的大多数单词表明邮件是无辜的。有两个闻起来不好的单词,“color”(垃圾邮件发送者喜欢彩色字体)和“California”(出现在推荐信和表单菜单中),但它们不足以抵消像“continuation”和“example”这样明显无辜的单词。

有趣的是,“describe”被评为如此无辜。在我的4000封垃圾邮件中,它没有出现过一次。数据中充满了这样的惊喜。当你分析垃圾邮件文本时,你会发现垃圾邮件发送者所使用的语言子集是多么狭窄。正是这一事实,加上任何单个用户邮件的同样特征词汇,使得贝叶斯过滤成为一个不错的选择。

附录:更多想法

我还没有尝试的一个想法是基于单词对,甚至是三元组进行过滤,而不是单个单词。这应该会产生更准确的概率估计。例如,在我当前的数据库中,单词“offers”的概率为.96。如果你基于单词对计算概率,你会发现“special offers”和“valuable offers”的概率分别为.99,而“approach offers”(如“这种方法提供”)的概率则为.1或更低。

我之所以没有这样做,是因为基于单个单词的过滤已经效果很好。但这确实意味着,如果垃圾邮件变得更难检测,还有进一步收紧过滤器的空间。(有趣的是,基于单词对的过滤实际上将是一个反向运行的马尔可夫链文本生成器。)

特定的垃圾邮件特征(例如,在“收件人”字段中看不到收件人的地址)当然在识别垃圾邮件时具有价值。它们可以通过将其视为虚拟单词来在此算法中考虑。我可能会在未来的版本中这样做,至少对于一些最明显的垃圾邮件指示器。

识别非垃圾邮件特征可能比识别垃圾邮件特征更重要。误报是一个令人担忧的问题,它们需要采取非常规措施。我可能在未来的版本中添加一个专门设计用于避免误报的第二级测试。如果一封邮件触发了这一第二级过滤器,即使其垃圾邮件概率超过阈值,它也将被接受。

我不期望这一第二级过滤是贝叶斯的。它不可避免地不仅是临时的,而且是基于猜测的,因为误报的数量不会足够大以便注意到模式。(如果备份系统不依赖于与主系统相同的技术,那也是好的。)

我可能在未来尝试的另一件事是对电子邮件的特定部分给予额外关注。例如,当前约95%的垃圾邮件都包含他们希望你访问的网站的url。(其余5%希望你拨打电话号码、通过电子邮件或美国邮政地址回复,或者在少数情况下购买某种股票。)在这种情况下,url几乎足以单独确定电子邮件是否为垃圾邮件。

域名与电子邮件中其余文本的不同之处在于,它们通常由几个单词组合而成。尽管在一般情况下计算成本很高,但尝试将其分解可能是值得的。如果过滤器从未见过标记“xxxporn”,它将具有.4的个别垃圾邮件概率,而“xxx”和“porn”分别在我的语料库中具有.9889和.99的概率,组合概率为.9998。

我预计,随着垃圾邮件发送者逐渐被迫停止在消息文本中使用有罪的单词,分解域名将变得更加重要。(带有ip地址的url当然是一个极其有罪的迹象,除非在少数系统管理员的邮件中。)

维护一个由垃圾邮件发送者推广的url的合作维护列表可能是个好主意。我们需要一种信任度量,类似于Raph Levien研究的类型,以防止恶意或无能的提交,但如果我们有这样的东西,它将为任何过滤软件提供支持。这也将是抵制的一个方便基础。

测试可疑url的另一种方法是发送爬虫在用户查看提到它的电子邮件之前查看该网站。你可以使用贝叶斯过滤器对该网站进行评分,就像对电子邮件一样,网站上发现的任何内容都可以包含在计算电子邮件是垃圾邮件的概率中。指向重定向的url当然会特别可疑。

我认为一个真正好的合作项目是积累一个巨大的垃圾邮件语料库。一个大型、干净的语料库是使贝叶斯过滤效果良好的关键。贝叶斯过滤器实际上可以将该语料库用作输入。但这样的语料库对其他类型的过滤器也很有用,因为它可以用于测试它们。

创建这样的语料库会带来一些技术问题。我们当然需要信任度量,以防止恶意或无能的提交。我们还需要从语料库中的邮件中删除个人信息(不仅仅是收件人地址和抄送,还包括例如退订url的参数,这些参数通常编码了收件人地址)。如果有人想承担这个项目,那将是对世界的一件好事。

附录:定义垃圾邮件

我认为对垃圾邮件的定义有一个粗略的共识,但有一个明确的定义将是有用的。如果我们想建立一个中央垃圾邮件语料库,甚至有意义地比较垃圾邮件过滤率,我们需要这样做。

首先,垃圾邮件并不是未经请求的商业电子邮件。如果我邻居听说我在寻找一辆状况良好的老Raleigh三速车,并给我发了一封电子邮件,提供出售一辆车的机会,我会很高兴,然而这封电子邮件既是商业的又是未经请求的。垃圾邮件的定义特征(实际上,它的存在理由)并不是它是未经请求的,而是它是自动化的。

垃圾邮件通常是商业性的,这也是偶然的。如果有人开始发送大量电子邮件以支持某种政治原因,例如,它与推广色情网站的电子邮件一样,都是垃圾邮件。

我建议我们将垃圾邮件定义为未经请求的自动化电子邮件。因此,这一定义包括一些许多法律定义中不包括的电子邮件。法律定义的垃圾邮件,显然受到游说者的影响,往往排除那些与收件人有“现有关系”的公司发送的邮件。但例如,从公司购买某物并不意味着你已经请求了他们的持续电子邮件。如果我从在线商店订购某物,然后他们给我发送一系列垃圾邮件,这仍然是垃圾邮件。

发送垃圾邮件的公司通常会给你一种“退订”的方式,或者要求你访问他们的网站并更改你的“账户偏好”,如果你想停止接收垃圾邮件。这不足以使邮件不再是垃圾邮件。不选择退出并不等同于选择加入。除非收件人明确勾选了一个清晰标记的框(其默认值为否),请求接收电子邮件,否则这就是垃圾邮件。

在某些商业关系中,你确实会隐含地请求某些类型的邮件。当你在线订购时,我认为你隐含地请求一份收据,以及订单发货时的通知。我不介意Verisign给我发送警告,提醒我某个域名即将到期(至少,如果他们是实际注册商)。但当Verisign给我发送电子邮件,提供免费的电子商务网站建设指南时,那就是垃圾邮件。

注释:

[1] 本文中的示例被翻译成Common Lisp,信不信由你,这是为了更大的可访问性。这里描述的应用程序是我们编写的,用于测试一种名为Arc的新Lisp方言,该方言尚未发布。

[2] 目前最低的费用似乎是发送一百万封垃圾邮件约200美元。这非常便宜,每封垃圾邮件的成本为1/50美分。但例如,过滤掉95%的垃圾邮件将使垃圾邮件发送者到达特定受众的成本增加20倍。很少有人有足够大的利润空间来吸收这个成本。

[3] 作为经验法则,国家名称前的修饰词越多,统治者就越腐败。一个名为“社会主义人民民主共和国X”的国家可能是你在世界上最不想居住的地方。

感谢 Sarah Harlin阅读草稿;Daniel Giffin(他也在编写生产Arc解释器)提供了几个关于过滤的好主意,并创建了我们的邮件基础设施;Robert Morris、Trevor Blackwell和Erann Gat就垃圾邮件进行了许多讨论;Raph Levien提供了关于信任度量的建议;Chip Coldwell和Sam Steingold提供了关于统计的建议。

你会在 黑客与画家 中找到这篇文章和其他14篇文章。