垃圾邮件治理方案
喜欢构建东西吗? 试试 Hacker News。
2002年8月
(本文描述了我们在构建用于测试 Arc 的防垃圾邮件网页邮件阅读器时所采用的垃圾邮件过滤技术。改进算法见《更好的贝叶斯过滤》。)
我认为阻止垃圾邮件是可能的,而基于内容的过滤是实现这一目标的方法。垃圾邮件发送者的致命弱点在于他们的邮件内容。他们可以绕过你设置的任何其他障碍——至少到目前为止是这样。但无论内容是什么,他们都必须传递他们的信息。如果我们能编写出识别他们信息的软件,他们就无论如何也无法绕过了。
对收件人来说,垃圾邮件是很容易识别的。如果你雇个人帮你读邮件并丢弃垃圾邮件,他做起来应该没什么困难。那么,在不借助人工智能的情况下,我们需要做到什么程度才能自动化这个过程呢?
我认为我们可以用相当简单的算法来解决这个问题。事实上,我发现仅使用单个词语的垃圾邮件概率的贝叶斯组合,就能很好地过滤当下的垃圾邮件。使用一个稍作调整的(如下所述)贝叶斯过滤器,我们现在每 1000 封垃圾邮件中漏掉的少于 5 封,且误报率为 0。
人们在编写垃圾邮件过滤器时,通常首先尝试的并不是统计方法。大多数黑客的第一反应是尝试编写能够识别垃圾邮件个体特征的软件。你看着垃圾邮件会想,这些家伙居然敢给我发以“亲爱的朋友”开头,或者主题行全是大写并以八个感叹号结尾的邮件。我大概用一行代码就能过滤掉这些东西。
于是你确实这么做了,而且一开始很有效。几条简单的规则就能大大减少你收到的垃圾邮件。仅仅查找“点击”这个词,就能在我的垃圾邮件语料库中捕获 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 封,且误报为 0 时,我说的是基于我的邮件语料库过滤我的邮件。但这些数字并不误导人,因为这就是我提倡的方法:根据每个用户收到的垃圾邮件和非垃圾邮件来过滤他们的邮件。本质上,每个用户应该有两个删除按钮,普通删除和删除为垃圾邮件。任何被删除为垃圾邮件的邮件进入垃圾邮件语料库,其他所有内容进入非垃圾邮件语料库。
你可以用一个种子过滤器来启动用户,但最终每个用户应该根据他们实际收到的邮件拥有自己的逐词概率。这(a)使过滤器更有效,(b)让每个用户自己定义垃圾邮件的精确含义,以及(c)或许是最大的好处:让垃圾邮件发送者难以调整邮件以通过过滤器。如果过滤器的很大一部分“大脑”在个体数据库中,那么仅仅调整垃圾邮件以通过种子过滤器并不能保证它们能顺利通过各个用户不同且训练更充分的过滤器。
基于内容的垃圾邮件过滤通常与白名单结合使用,白名单是那些邮件无需过滤即可接收的发送者列表。构建这样一个白名单的一个简单方法是记录用户曾经发送过邮件的每个地址。如果邮件阅读器有一个“删除为垃圾邮件”按钮,那么你也可以将用户作为普通垃圾删除的每封邮件的发件人地址添加到白名单中。
我倡导使用白名单,但更多的是把它当作节省计算资源的手段,而非提升过滤效果的方法。我曾以为白名单能让过滤变得更简单,因为这样只需过滤来自从未联系过的人的邮件,而初次给你发信的人,按照惯例,在内容上会有所顾忌。熟人可能会在邮件中谈论性话题,但初次通信的人则不太可能。问题在于,一个人可能有多个邮箱地址,因此一个新发件地址并不能保证对方是首次与你通信。老朋友(尤其是黑客朋友)突然用新邮箱地址给你发邮件的情况并不罕见,所以不宜对未知地址的邮件实施过于严格的过滤,以免误伤。
从某种意义上说,我的过滤器自身就体现了一种白名单(及黑名单),因为它们基于完整邮件(包括邮件头)来判断。因此,它们“认识”可信发件人的邮箱地址,甚至了解邮件从他们那里到我这里的传递路径。同样,它们对垃圾邮件的状况也了如指掌,包括服务器名、邮件程序版本和协议等。
如果我认为自己能跟上当前垃圾邮件过滤的效率,我会视此问题为已解决。但能过滤掉当前大多数垃圾邮件意义不大,因为垃圾邮件在不断演变。确实,迄今为止的多数反垃圾邮件技术就像杀虫剂,只是催生了新的抗药性虫株。
我对贝叶斯过滤器抱有更大的希望,因为它们能随垃圾邮件的演化而演化。当垃圾邮件发送者开始用“c0ck”代替“cock”来规避基于单个词汇的简单过滤器时,贝叶斯过滤器会自动察觉。实际上,“c0ck”比“cock”更能说明问题,而贝叶斯过滤器能精确地量化其中的差异。
不过,任何提出垃圾邮件过滤方案的人都需要回答这个问题:如果垃圾邮件发送者完全了解你的策略,他们能多轻松地绕过你?例如,我认为如果基于校验和的过滤成为严重障碍,垃圾邮件发送者会转向用“疯狂填词”(mad-lib)技术生成邮件正文。
要击败贝叶斯过滤器,垃圾邮件发送者仅使邮件独特或停止使用某些“不雅”词汇是不够的。他们必须让自己的邮件与你的正常邮件难以区分。我认为这能极大地限制他们。垃圾邮件大多是销售宣传,除非你的正常邮件全是销售内容,否则垃圾邮件难免具有不同的特征。而且,垃圾邮件发送者当然还得改变(并持续改变)他们的整个基础设施,否则无论对正文做了什么手脚,邮件头在贝叶斯过滤器眼中依然会显得可疑。我对垃圾邮件发送者使用的基础设施了解不多,无法判断让邮件头显得无辜有多难,但猜测这比让邮件正文显得无辜更难。
假设他们解决了邮件头的问题,未来的垃圾邮件大概会是这样:
嘿,你好。你应该看看这个:http://www.27meg.com/foo
因为基于内容的过滤能给垃圾邮件发送者留下的销售宣传空间,大概也就这么大了。实际上,要绕过过滤器都难,因为如果邮件其他部分都是中性的,垃圾邮件的概率将取决于这个URL,而要让这个URL看起来也中性,得费一番功夫。
垃圾邮件发送者的范围很广,从运营所谓的“选择加入”列表、甚至不隐藏身份的企业,到劫持邮件服务器发送色情网站推广的家伙。如果我们通过过滤将他们的选择压缩到类似上述邮件的程度,那么这基本上会让处于“合法”一端的垃圾邮件发送者无利可图;他们受各种州法律约束,必须在邮件中加入关于为何其邮件不是垃圾邮件、如何取消“订阅”的说明文字,这类文本很容易识别。
(我曾认为,指望更严格的法律能减少垃圾邮件是天真的。现在我认为,虽然更严格的法律可能不会减少垃圾邮件发送者发送的数量,但它们确实能帮助过滤器减少收件人实际看到的垃圾邮件数量。)
沿着这个范围,如果你限制了垃圾邮件发送者能做的销售宣传,不可避免会让他们无生意可做。“生意”这个词很重要,值得记住。垃圾邮件发送者是商人。他们发送垃圾邮件,因为这有效。之所以有效,是因为尽管回应率低得惊人(最多每百万封15个回应,而普通目录邮寄是每百万3000个),但对他们来说成本几乎为零。对收件人来说成本却是巨大的,每百万收件人花一秒删除垃圾邮件,总共约5人周的劳动力,但这笔费用无需垃圾邮件发送者承担。
不过,发送垃圾邮件确实会让发送者有所付出。[2] 因此,我们能将回应率降到多低——无论是通过过滤,还是利用过滤器迫使垃圾邮件发送者稀释其宣传力度——就会有越少企业觉得发送垃圾邮件有利可图。
垃圾邮件发送者使用那样的销售话术,是为了提高回应率。这可能比进入垃圾邮件发送者的思维更令人作呕,但让我们快速瞥一眼那些回应垃圾邮件者的心理。这类人要么极度轻信,要么对自己的性兴趣深藏否认。无论如何,无论垃圾邮件在我们看来多么令人反感或愚蠢,对他们来说却是刺激的。如果这些话术听起来不诱人,垃圾邮件发送者不会这么说。而“你应该看看下面这个”之类的话,对垃圾邮件接收者的吸引力远不及垃圾邮件发送者现在使用的那些话术。结果:如果无法包含令人兴奋的销售宣传,垃圾邮件作为营销渠道的效果就会减弱,愿意使用的企业也会减少。
这是最终的巨大胜利。我开始编写垃圾邮件过滤软件,是因为不想再看到这些东西。但如果我们过滤垃圾邮件足够有效,它就会失效,垃圾邮件发送者最终会停止发送。
在与垃圾邮件斗争的众多方法(从软件到法律)中,我相信贝叶斯过滤将是最有效的一个。但我也认为,我们采取的反垃圾邮件措施越多样化越好,因为任何限制垃圾邮件发送者的措施都会让过滤变得更简单。即使在基于内容的过滤领域内,我也认为同时使用多种不同的软件是件好事。过滤器种类越多,垃圾邮件发送者就越难调整垃圾邮件以突破过滤。
附录:过滤实例
以下是我写这篇文章期间收到的一封垃圾邮件的例子。这封垃圾邮件中最具区分度的十五个词是:
qvp0045 indira mx-05 intimail $7500 freeyankeedom cdo bluefoxmedia jpg unsecured platinum 3d0 qves 7c5 7c266675
这些词混合了邮件头和正文的内容,这是垃圾邮件的典型特征。同样典型的是,在我的数据库中,这里的每个词的垃圾邮件概率都是0.99。事实上,概率为0.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”证明有罪相当。但认定有罪的证据仍更强。如果根据贝叶斯规则组合这些数字,最终概率是0.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
这里有几条好消息。首先,这封邮件可能不会绕过那些不幸专门研究编程语言、且有位名叫莫里斯的好友的人的过滤器。对于普通用户来说,这里排名前五的词都是中性的,不会增加垃圾邮件的概率。
其次,我认为基于词组对(见下文)的过滤很可能能抓住这封邮件:“成本效益”、“设置费”、“退款”——这些相当有罪证性。当然,如果他们继续向我(或我所在的网络)发送垃圾邮件,“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”(如“this approach offers”)的概率为.1或更低。
我之所以没有这样做,是因为基于单个单词的过滤已经效果很好。但这确实意味着,如果垃圾邮件更难检测,则仍有收紧过滤器的空间。(奇怪的是,基于词对的过滤器实际上相当于一个反向运行的马尔可夫链文本生成器。)
特定的垃圾邮件特征(例如,在收件人字段中看不到收件人地址)显然在识别垃圾邮件时具有价值。它们可以通过将其视为虚拟单词来纳入此算法。我可能会在未来的版本中这样做,至少针对一些最恶劣的垃圾邮件指标。特征识别垃圾邮件过滤器在很多细节上是正确的;它们缺乏的是组合证据的整体纪律。
识别非垃圾邮件特征可能比识别垃圾邮件特征更重要。误报如此令人担忧,以至于需要采取非常措施。我可能会在未来的版本中添加专门用于避免误报的第二级测试。如果一封邮件触发了第二级过滤器,即使其垃圾邮件概率高于阈值,它也会被接受。
我不期望这第二级过滤器是贝叶斯式的。它不仅是临时性的,而且不可避免地将基于猜测,因为误报的数量通常不足以大到发现模式。(无论如何,如果备份系统不依赖与主系统相同的技术,那也是件好事。)
我将来可能尝试的另一件事是对电子邮件的特定部分给予额外关注。例如,目前大约95%的垃圾邮件包含他们想让你访问的网站的url。(剩余的5%希望你拨打电话号码、通过电子邮件或美国邮寄地址回复,或在少数情况下购买某只股票。)在这种情况下,url本身几乎足以判断邮件是否为垃圾邮件。
域名与(非德语)电子邮件中的其他文本不同,因为它们通常由几个单词连在一起构成。虽然在一般情况下计算成本很高,但尝试分解它们可能是值得的。如果一个过滤器之前从未见过标记“xxxporn”,它的单独垃圾邮件概率将是.4,而“xxx”和“porn”单独在我语料库中的概率分别为.9889和.99,组合概率为.9998。
我预计,随着垃圾邮件发送者逐渐被迫停止在邮件文本中使用罪证性词汇,分解域名将变得更加重要。(当然,带有ip地址的url是一个极其罪证性的迹象,除了少数系统管理员的邮件。)
拥有一个协作维护的、由垃圾邮件发送者推广的url列表可能是一个好主意。我们需要一种由拉夫·莱文研究的信任度量来防止恶意或不合格的提交,但如果我们拥有这样的东西,它将提升任何过滤软件的性能。这也可以作为抵制的便利基础。
另一种测试可疑url的方法是在用户查看提及该网站的电子邮件之前,发送爬虫去查看该网站。你可以使用贝叶斯过滤器来评级该网站,就像对待电子邮件一样,网站上的任何内容都可以纳入计算邮件为垃圾邮件的概率。当然,导致重定向的url会特别可疑。
我认为一个真正的好主意的合作项目是积累一个庞大的垃圾邮件语料库。一个庞大、干净的语料库是让贝叶斯过滤良好工作的关键。贝叶斯过滤器实际上可以使用该语料库作为输入。但这样的语料库对其他类型的过滤器也有用,因为它可以用来测试它们。
创建这样的语料库会带来一些技术问题。当然,我们需要信任度量来防止恶意或不合格的提交。我们还需要删除语料库邮件中个人信息的方法(不仅是收件人地址和抄送,还有例如退订url的参数,这些参数经常编码收件人地址)。如果有人想承担这个项目,那对世界来说将是一件好事。
附录:定义垃圾邮件
我认为关于什么是垃圾邮件有一个大致的共识,但有一个明确的定义会很有用。如果我们想建立中央垃圾邮件语料库,甚至是有意义地比较垃圾邮件过滤率,我们就需要这样做。
首先,垃圾邮件不是未请求的商业电子邮件。如果我邻里的某人听说我在找一辆状况良好的旧Raleigh三速自行车,并给我发邮件想卖给我一辆,我会很高兴,但这封邮件既是商业性的又是未请求的。垃圾邮件的定义性特征(事实上,它的存在理由)不是它是未请求的,而是它是自动化的。
垃圾邮件通常也是商业性的,但这只是附带性的。例如,如果有人开始发送大量电子邮件来支持某种政治事业,那它和推广色情网站的邮件一样都是垃圾邮件。
我提议我们将垃圾邮件定义为未请求的自动化电子邮件。因此,这一定义包括了许多法律定义不涵盖的一些电子邮件。受说客影响的垃圾邮件法律定义往往排除由与收件人有“现有关系”的公司发送的邮件。但例如,从一家公司买东西并不表示你请求了他们持续发送电子邮件。如果我在线商店订购了东西,然后他们给我发送一连串垃圾邮件,那仍然是垃圾邮件。
发送垃圾邮件的公司通常会给你一种“退订”方式,或者要求你去他们的网站更改“账户偏好”以停止接收垃圾邮件。这不足以使邮件不再是垃圾邮件。不选择退出与选择加入不同。除非收件人明确勾选了一个明确标记的框(默认是未选中)请求接收该邮件,否则它就是垃圾邮件。
在某些商业关系中,你确实隐式地请求了某些类型的邮件。当你在网上订购时,我认为你隐式地请求了收据和订单发货通知。当Verisign给我发送域名即将过期的警告邮件时,我不介意(至少,如果他们是该域名的实际注册商)。但当Verisign给我发送提供免费构建我的电子商务网站指南的邮件时,那就是垃圾邮件。
注释:
[1] 本文中的示例被翻译成Common Lisp,信不信由你,为了更容易理解。这里描述的应用是我们为了测试一种尚未发布的新Lisp方言Arc而编写的。
[2] 目前,发送一百万封垃圾邮件的最低费率似乎约为200美元。那非常便宜,每封垃圾邮件仅1/50美分。但例如,过滤掉95%的垃圾邮件会使垃圾邮件发送者接触特定受众的成本增加20倍。很少有人有足够的利润空间来吸收这一点。
[3] 根据经验法则,一个国家名称前的限定词越多,统治者就越腐败。一个被称为X社会主义人民民主共和国的国家可能是世界上最不适合居住的地方。