一个垃圾邮件的计划
Original2002年8月
(本文描述了我们在构建基于网络的无垃圾邮件阅读器时使用的垃圾邮件过滤技术。一种改进的算法在Better Bayesian Filtering中有所描述。)
我认为我们可以阻止垃圾邮件,内容过滤器是实现这一目标的方式。垃圾发送者的软肋在于他们的消息本身。他们可以绕过你设置的任何其他屏障。至少到目前为止是这样。但他们必须传递他们的信息,无论是什么。如果我们能编写出识别这些信息的软件,他们就无法逃脱。
对收件人来说,垃圾邮件是很容易识别的。如果你雇人来读你的邮件并丢弃垃圾邮件,他们几乎不会有困难。除了使用人工智能,我们还需要做些什么来自动化这个过程呢?
我认为我们可以利用相当简单的算法来解决这个问题。事实上,我发现仅仅使用个别单词的垃圾概率的贝叶斯组合就可以很好地过滤当前的垃圾邮件。使用稍微调整过的(如下所述)贝叶斯过滤器,我们现在错过的垃圾邮件不到1000封的5%,而且没有错误识别。
统计方法通常不是人们在编写垃圾邮件过滤器时首先尝试的方法。大多数黑客的第一反应是试图编写可识别垃圾邮件个别特性的软件。你看看垃圾邮件,你就会想,这些家伙居然试图给我发以"亲爱的朋友"开头或标题全部大写并以八个感叹号结尾的邮件。我只需要一行代码就可以过滤掉这些。
于是你就这么做了,起初它确实管用。一些简单的规则就可以大大减少你收到的垃圾邮件。仅仅查找"click"这个词就可以捕获我的垃圾邮件语料库中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中的所有数字乘以2是一个好办法。这有助于区分偶尔出现在合法电子邮件中的词和几乎从不出现的词。我只考虑总共出现超过5次的词(实际上,由于乘以2,在非垃圾邮件中出现3次就足够了)。还有一个问题是,对于出现在一个语料库中但不出现在另一个语料库中的词,应该赋予什么概率。我再次通过反复尝试选择了.01和.99。这里可能还有优化的空间,但随着语料库的增长,这种优化会自动发生。
特别敏锐的人会注意到,虽然我将每个语料库视为一个单一的长文本流,用于计算出现次数,但我使用每个语料库的电子邮件数量,而不是它们的总长度,作为计算垃圾概率的除数。这又增加了一些保护错误识别的偏置。
当新邮件到达时,它会被扫描成令牌,最有趣的15个令牌(根据它们的垃圾概率与中性的.5相差多远来衡量)用于计算该邮件是垃圾邮件的概率。如果probs是15个单独概率的列表,你可以这样计算结合概率:
(let ((prod (apply #'* probs))) (/ prod (+ prod (apply #'* (mapcar #'(lambda (x) (- 1 x)) probs)))))
一个在实践中出现的问题是,应该给从未见过的单词,即不存在于单词概率散列表中的单词,分配多大的概率。我通过反复尝试发现,使用0.4是一个不错的数值。如果你从未见过某个单词,它可能相当无害;垃圾邮件词往往过于熟悉。
在附录中有几个应用于实际电子邮件的算法例子。
如果上述算法给出一封邮件被判断为垃圾邮件的概率超过0.9,我就将其视为垃圾邮件。但在实践中,将阈值设在哪里并不重要,因为很少有概率落在中间范围。
统计方法的一大优势是,你不需要读很多垃圾邮件。在过去的六个月里,我读了数以千计的垃圾邮件,这确实有些令人沮丧。诺伯特·维纳说,如果你与奴隶竞争,你自己也会成为奴隶,而与垃圾邮件发送者竞争也有类似的贬低感。要识别个别垃圾邮件特征,你必须设法进入垃圾邮件发送者的思维,而坦率地说,我希望尽可能少地接触垃圾邮件发送者的思维。
但贝叶斯方法的真正优势,当然是你知道你在测量什么。像SpamAssassin这样的基于特征识别的过滤器会给电子邮件一个"垃圾邮件得分"。贝叶斯方法分配一个实际的概率。"得分"的问题是,没人知道它的含义。用户不知道它的意义,更糟的是,过滤器的开发者也不知道。一封电子邮件包含"sex"一词应该得多少"分"?概率当然可能被误判,但它的意义及如何结合证据计算它都很清晰。根据我的语料库,"sex"表示电子邮件是垃圾邮件的概率为0.97,而"sexy"则为0.99。同样清晰的是,贝叶斯定理说,在(不太可能出现的)没有其他证据的情况下,包含这两个词的电子邮件是垃圾邮件的概率为99.97%。
因为它在衡量概率,贝叶斯方法考虑了电子邮件中的所有证据,无论是积极的还是消极的。在垃圾邮件中出现频率相对较低的词语(如"though"、"tonight"或"apparently"),降低概率的作用与"unsubscribe"和"opt-in"这样的坏词增加概率的作用一样大。所以,一封本来很正常的邮件恰好包含"sex"一词,也不会被标记为垃圾邮件。
当然,最理想的情况是,应该为每个用户单独计算概率。我收到大量包含"Lisp"一词的邮件,到目前为止还没有收到任何垃圾邮件包含这个词。所以,对我来说,这个词就相当于一种密码,可以让邮件顺利通过过滤。在我之前的垃圾邮件过滤软件中,用户可以设置这样一个词汇列表,包含这些词的邮件将自动通过过滤。在我的列表上,我把"Lisp"这样的词,以及我的邮政编码等加了进去,这样(听起来相当像垃圾邮件的)网上订单收据就能通过过滤。我当时觉得自己很聪明,但发现贝叶斯过滤器自动帮我做了同样的事,而且还发现了我没想到的很多词。
在开始时我说,我们的过滤器每1000封邮件中只让5封垃圾邮件通过,且没有任何误判,这里指的是根据我自己的邮件语料库进行过滤。但这些数字并不具有误导性,因为这正是我所提倡的方法:根据用户收到的垃圾邮件和非垃圾邮件,对每个用户的邮件进行过滤。实质上,每个用户应该有两个删除按钮,一个是普通删除,另一个是标记为垃圾删除。任何被标记为垃圾的邮件都会进入垃圾邮件语料库,其他所有邮件都会进入非垃圾邮件语料库。
你可以为用户提供一个种子过滤器,但最终每个用户应该根据实际收到的邮件建立自己的每个词的概率。这样做(a)可以提高过滤的有效性,(b)让每个用户决定他们自己对垃圾邮件的准确定义,以及(c)也许最重要的是,这样会让垃圾邮件发送者很难调整邮件来通过过滤器。如果过滤器的大脑主要在个人数据库中,那么仅仅调整垃圾邮件来通过种子过滤器也不会保证能通过每个用户训练有素的、差异很大的过滤器。
基于内容的垃圾邮件过滤通常与白名单相结合,白名单是一个可以免过滤直接接受的发件人列表。建立这样一个白名单的一种简单方法是,保留用户曾经发送邮件的所有地址。如果邮件阅读器有一个"标记为垃圾"按钮,你也可以将用户删除为普通垃圾的邮件的发件人地址添加到白名单。
我支持使用白名单,但更多是作为一种节省计算的方式,而不是提高过滤效果的方式。我过去认为,白名单会使过滤更容易,因为你只需要过滤从未与你联系过的人发来的邮件,而第一次给你发送邮件的人受到习俗的约束,不太可能说一些很露骨的话题。熟悉的人给你发邮件谈论性的话题是可能的,但第一次给你发邮件的人就不太可能这样做。问题在于,人们可以有多个电子邮件地址,所以新的发件人地址并不能保证发件人真的是第一次给你写信。老朋友(尤其是黑客)突然用一个新的地址给你发邮件并不罕见,所以你不能过于严格地过滤来自陌生地址的邮件,以免产生误判。
从某种意义上说,我的过滤器本身就包含了一种白名单(和黑名单),因为它们是基于整封邮件(包括标头)的。因此,在某种程度上,它们"知道"可信发件人的电子邮件地址,甚至知道邮件从他们到我这里的路由。它们也同样了解垃圾邮件,包括服务器名称、邮件程序版本和协议。
如果我认为自己能保持目前的垃圾邮件过滤率,我会认为这个问题已经解决。但仅仅能过滤掉当前的大部分垃圾邮件并没有什么意义,因为垃圾邮件会不断发展。事实上,到目前为止的大多数反垃圾邮件技术就像杀虫剂一样,只会造就一种新的、更抗药的虫子。
我对贝叶斯过滤器更有希望,因为它们可以随垃圾邮件的变化而进化。所以当垃圾邮件发送者开始使用"c0ck"而不是"cock"来逃避基于单个词的简单垃圾邮件过滤器时,贝叶斯过滤器会自动注意到这一点。事实上,"c0ck"比"cock"更是一种有罪的证据,而贝叶斯过滤器精确知道这种差异有多大。
尽管如此,任何提出垃圾邮件过滤计划的人都必须能够回答这个问题:如果垃圾邮件发送者确切知道你在做什么,他们能有多好地绕过你?比如,我认为如果基于校验和的垃圾邮件过滤成为一个严重障碍,垃圾邮件发送者可能会转而采用随机组合技术来生成邮件正文。
要打败贝叶斯过滤器,垃圾邮件发送者仅仅使他们的电子邮件独一无二或停止使用个别令人反感的词是不够的。他们必须使他们的邮件与你的日常邮件无法区分。而这我认为会严重限制他们。垃圾邮件主要是销售宣传,所以除非你的日常邮件全都是销售宣传,否则垃圾邮件必然会有不同的特点。当然,垃圾邮件发送者还必须改变(并继续改变)他们的整个基础设施,因为否则头部信息看起来对贝叶斯过滤器来说会像以前一样糟糕,不管他们对邮件正文做了什么。我不了解垃圾邮件发送者使用的基础设施,所以不知道使头部信息看起来无害有多难,但我猜这可能比使邮件正文看起来无害更难。
假设他们能解决头部信息的问题,未来的垃圾邮件可能看起来像这样:
嗨,你应该看看以下内容:http://www.27meg.com/foo
因为这就是内容过滤将允许垃圾邮件发送者留下的最大销售宣传。(事实上,即使这样也很难通过过滤,因为如果邮件的其他部分都是中性的,垃圾邮件的概率就会取决于URL,要让它看起来中性需要一些努力。)
垃圾邮件发送者范围从经营所谓选择加入列表的企业(他们甚至都不试图隐藏身份)到劫持邮件服务器发送色情网站广告的人。如果我们使用过滤来将他们的选择缩小到上述类型的邮件,这应该基本上会让那些"合法"端的垃圾邮件发送者停止营业;他们感到有责任根据某些州法律包含关于他们的垃圾邮件为何不算垃圾邮件以及如何取消"订阅"的标准文字,这种文字很容易识别。
(我曾经认为相信更严格的法律会减少垃圾邮件是天真的。现在我认为,尽管更严格的法律可能不会减少垃圾邮件发送者发送的垃圾邮件数量,但它们确实可以帮助过滤器减少收件人实际看到的垃圾邮件数量。)
在整个范围内,如果你限制垃圾邮件发送者可以发送的销售宣传,你肯定会让他们停止营业。那个词"业务"是个很重要的词要记住。垃圾邮件发送者是商人。他们发送垃圾邮件是因为这行得通。之所以行得通,是因为尽管响应率极低(最高也只有每百万收件人中15人,而目录邮寄每百万收件人中3000人会响应),但对他们来说成本几乎为零。对收件人来说,成本是巨大的,每百万收件人中有人花一秒钟删除垃圾邮件就相当于5个人周,但垃圾邮件发送者不需要支付这笔费用。
发送垃圾邮件确实会给垃圾邮件发送者带来一些成本。[2]所以我们可以降低响应率——无论是通过过滤,还是通过使用过滤器迫使垃圾邮件发送者淡化他们的销售宣传——这样就会有越来越少的企业觉得发送垃圾邮件值得。
垃圾邮件发送者使用他们所使用的销售宣传是为了提高响应率。这可能比了解垃圾邮件发送者的思维还要令人发指,但让我们快速看一下响应垃圾邮件的人的思维。这个人要么令人吃惊地轻信,要么对自己的性兴趣彻底自我欺骗。无论哪种情况,再令人厌恶或愚蠢垃圾邮件在我们看来可能是,对他们来说都是令人兴奋的。垃圾邮件发送者不会说一些他们觉得收件人不会感兴趣的话。而"你应该看看以下内容"这样的话对垃圾邮件收件人的吸引力远远不及垃圾邮件发送者现在使用的那些话。结果是:如果垃圾邮件不能包含令人兴奋的销售宣传,它就不再是一种有效的营销工具,越来越少的企业会想使用它。
这就是最终的大胜利。我开始编写垃圾邮件过滤软件是因为我不想再看到那些东西。但如果我们能够很好地过滤掉垃圾邮件,它就不再有效,垃圾邮件发送者实际上就会停止发送。
在对抗垃圾邮件的所有方法中,从软件到法律,我认为贝叶斯过滤将是最有效的单一措施。但我也认为,我们进行的各种反垃圾邮件努力越多,效果就越好,因为任何限制垃圾邮件发送者的措施都会让过滤更容易。即使在内容过滤的世界里,我认为如果同时使用许多不同类型的软件也是件好事。不同的过滤器越多,垃圾邮件发送者伪装通过它们就越困难。
附录:过滤示例
这里是我写这篇文章时收到的一条垃圾邮件示例。该垃圾邮件中最有趣的15个单词是:
qvp0045 indira mx-05 intimail $7500 freeyankeedom cdo bluefoxmedia jpg unsecured platinum 3d0 qves 7c5 7c266675
这些单词来自于头部信息和正文,这是典型的垃圾邮件特征。垃圾邮件的另一个典型特征是,这些单词在我的数据库中每一个都有0.99的垃圾邮件概率。事实上,有超过15个单词的垃圾概率为0.99,这些只是我看到的前15个。
不幸的是,这使得这封电子邮件成为贝叶斯定理使用的一个无聊例子。要看到各种概率的有趣变化,我们必须看一下这封实际上相当不典型的垃圾邮件。
这封垃圾邮件中最有趣的15个单词及其概率如下:
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
这次的证据是好坏参半。一个像"最短"这样的词几乎和一个像"女士"或"提升"这样的词一样能表明无罪。但有罪的论点仍然更强。如果按照贝叶斯规则将这些数字相结合,得到的概率是0.9027。
"女士"显然来自以"亲爱的先生或女士"开头的垃圾邮件。它们并不常见,但在我的合法电子邮件中从未出现过"女士"这个词,关键在于比例。
"共和国"的得分很高,因为它常出现在尼日利亚骗局电子邮件中,也出现在几次提到韩国和南非的垃圾邮件中。你可能会说它在识别这封垃圾邮件时纯属意外。但我发现在检查垃圾邮件概率时,确实有许多这样的意外事件,它们有一种奇怪的倾向,会将事物推向正确的方向而不是错误的方向。在这种情况下,"共和国"一词在尼日利亚骗局电子邮件和这封垃圾邮件中出现,并非完全偶然。涉及经济不发达国家的各种可疑商业提议,其名称更有可能明确指出(因为它们实际上并非如此)它们是共和国。[3]
另一方面,"输入"是一个明显的错误。它主要出现在取消订阅说明中,但在这里以完全无辜的方式使用。幸运的是,这种统计方法相当稳健,可以容忍相当多的错误,而结果仍不会受到太大影响。
作为比较, here 是一个罕见的成功通过过滤器的垃圾邮件。为什么?因为碰巧它充满了出现在我实际电子邮件中的词:
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
这里有几个好消息。首先,对于那些恰好专注于编程语言并有一位名叫莫里斯的好朋友的人来说,这封邮件可能无法通过过滤器。对于普通用户来说,这里前五个最重要的词都是中性的,不会对垃圾邮件概率有任何贡献。
其次,我认为基于词对(见下文)的过滤可能会拦截这封邮件:"cost effective","setup fee","money back" - 这些都是相当有罪嫌疑的内容。当然,如果他们继续向我(或我所在的网络)发送垃圾邮件,"Hostex"本身也会被识别为垃圾邮件术语。
最后, here 是一封无辜的电子邮件。它最有趣的15个词如下:
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"一词有0.96的概率。如果基于词对,你会得到"special offers"和"valuable offers"有0.99的概率,而"approach offers"(如"this approach offers")只有0.1或更低的概率。
我没有这样做的原因是,单词级别的过滤已经很有效了。但这意味着,如果垃圾邮件变得更难被检测,过滤器还有收紧的空间。(有趣的是,基于词对的过滤器实际上就是一个反向运行的马尔可夫链文本生成器。)
具体的垃圾邮件特征(如收件人地址未出现在收件人栏中)当然也有助于识别垃圾邮件。它们可以通过将它们视为虚拟词来纳入这个算法。我未来的版本可能会这样做,至少对于一些最明显的垃圾邮件指标。专注于特征识别的垃圾邮件过滤器在许多细节上是正确的;它们缺乏的是一种整体的证据组合纪律。
识别非垃圾邮件特征可能比识别垃圾邮件特征更为重要。错误的识别是一个如此令人担忧的问题,以至于需要采取非常措施。我未来的版本可能会添加一个专门设计用于避免错误识别的第二级测试。如果一封邮件触发了这个第二级过滤器,即便它的垃圾邮件概率超过了阈值,也会被接受。
我不希望这个第二级过滤器采用贝叶斯方法。它不可避免地会是临时性的,而且基于猜测,因为错误识别的数量往往不足以发现模式。(不过,如果备用系统不依赖于主要系统的同样技术,这也并非不利。)
我未来可能尝试的另一件事是特别关注电子邮件的特定部分。例如,目前大约95%的垃圾邮件包含了一个他们希望你访问的网站网址。(剩下的5%希望你打电话、通过电子邮件回复或寄送纸质邮件,还有少数要求你购买某支股票。)在这些情况下,网址本身几乎就足以确定这封邮件是否为垃圾邮件。
域名与电子邮件正文中的其他文本有所不同,通常是由几个粘在一起的单词组成。虽然在一般情况下计算开销很大,但尝试分解它们可能是值得的。如果过滤器从未见过"xxxporn"这个词,它的垃圾邮件概率为0.4,而"xxx"和"porn"单独的概率(在我的语料库中)分别为0.9889和0.99,合并概率为0.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篇文章。
更多信息: