垃圾邮件计划
Original2002 年 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 (< (+ gb) 5) (max .01 (min .99 (float (/ (min 1 (/ b nbad)) (+ (min 1 (/ g ngood)) (min 1 (/ b nbad)))))))))
其中 word 是我们正在计算概率的标记,good 和 bad 是我在第一步中创建的哈希表,ngood 和 nbad 分别是非垃圾邮件和垃圾邮件的数量。
我以代码的形式解释了这一点,以显示几个重要的细节。我想稍微偏向概率以避免误报,通过反复试验,我发现一个好方法是将所有数字翻倍。这有助于区分合法电子邮件中偶尔出现的单词和几乎从不出现的单词。我只考虑总共出现五次以上的单词(实际上,由于翻倍,在非垃圾邮件中出现三次就足够了)。然后是一个问题,即在一个语料库中出现但在另一个语料库中没有出现的单词应分配多少概率。再次通过反复试验,我选择了 .01 和 .99。这里可能还有调整的空间,但随着语料库的增长,这种调整无论如何都会自动进行。
细心的人会注意到,虽然为了计算出现次数,我将每个语料库视为一个单独的长文本流,但我使用每个语料库中的电子邮件数量(而不是它们的总长度)作为计算垃圾邮件概率的除数。这又增加了一点偏差,以防止误报。
当新邮件到达时,它会被扫描成标记,最有趣的十五个标记(其中有趣程度是通过它们的垃圾邮件概率与中性 0.5 的差距来衡量的)用于计算邮件是垃圾邮件的概率。如果 probs 是十五个单独概率的列表,则可以这样计算组合概率:
(let ((prod (apply #'* probs))) (/ prod (+ prod (apply #'* (mapcar #'(lambda (x) (- 1 x)) probs)))))
实践中会出现一个问题,即分配给您从未见过的单词(即未出现在单词概率哈希表中的单词)的概率是多少。我再次通过反复试验发现,.4 是一个不错的数字。如果您以前从未见过某个单词,那么它可能相当无辜;垃圾邮件单词往往太熟悉了。
最后的附录中有该算法应用于实际电子邮件的示例。
如果上述算法给出的邮件被认定为垃圾邮件的概率超过 0.9,我会将该邮件视为垃圾邮件。但在实践中,我将这个阈值设在哪里并不重要,因为很少有概率会落在该范围的中间。
统计方法的一大优势是你不必阅读那么多垃圾邮件。在过去的六个月里,我读了成千上万封垃圾邮件,这真的有点令人沮丧。诺伯特·维纳说,如果你与奴隶竞争,你就会成为奴隶,与垃圾邮件发送者竞争也有类似的屈辱感。要识别单个垃圾邮件的特征,你必须努力了解垃圾邮件发送者的思想,坦率地说,我希望尽可能少地花时间了解垃圾邮件发送者的想法。
但是,贝叶斯方法的真正优势当然在于您知道自己在测量什么。像 SpamAssassin 这样的特征识别过滤器会为电子邮件分配垃圾邮件“分数”。贝叶斯方法会分配实际概率。“分数”的问题在于没有人知道它的含义。用户不知道它的含义,更糟糕的是,过滤器的开发人员也不知道。一封电子邮件中包含“性”一词应该得到多少分?概率当然可能会出错,但它的含义或应该如何结合证据来计算它几乎没有歧义。根据我的语料库,“性”表示包含该词的电子邮件是垃圾邮件的概率为 0.97,而“性感”表示概率为 0.99。同样明确的贝叶斯规则表明,在没有任何其他证据的情况下,包含这两个词的电子邮件有 99.97% 的概率是垃圾邮件。
由于贝叶斯方法测量的是概率,因此它考虑了电子邮件中的所有证据,包括好证据和坏证据。垃圾邮件中出现频率极低的单词(如“虽然”、“今晚”或“显然”)对降低概率的贡献与“取消订阅”和“选择加入”等坏词对增加概率的贡献一样大。因此,一封原本无害的电子邮件如果恰好包含“性”一词,就不会被标记为垃圾邮件。
当然,理想情况下,应该为每个用户单独计算概率。我收到很多包含单词“Lisp”的电子邮件,而且(到目前为止)没有垃圾邮件。因此,像这样的单词实际上是向我发送邮件的一种密码。在我之前的垃圾邮件过滤软件中,用户可以设置一个这样的单词列表,包含这些单词的邮件将自动通过过滤器。在我的列表中,我输入了“Lisp”之类的单词以及我的邮政编码,这样(否则听起来很像垃圾邮件的)在线订单收据就可以通过。我以为自己很聪明,但我发现贝叶斯过滤器为我做了同样的事情,而且发现了很多我没有想到的单词。
当我在开始时说我们的过滤器每 1000 封邮件中只有不到 5 封垃圾邮件通过,且误报率为 0 时,我指的是根据我的邮件语料库过滤我的邮件。但这些数字并不具有误导性,因为这是我所提倡的方法:根据每个用户收到的垃圾邮件和非垃圾邮件来过滤他的邮件。本质上,每个用户都应该有两个删除按钮,普通删除和删除为垃圾邮件。任何被删除为垃圾邮件的邮件都会进入垃圾邮件语料库,其他的都会进入非垃圾邮件语料库。
您可以让用户使用种子过滤器,但最终每个用户应该根据收到的实际邮件拥有自己的每个单词概率。这 (a) 使过滤器更有效,(b) 让每个用户决定自己对垃圾邮件的精确定义,以及 (c) 也许最重要的是使垃圾邮件发送者难以调整邮件以通过过滤器。如果过滤器的大脑大部分在各个数据库中,那么仅仅调整垃圾邮件以通过种子过滤器并不能保证它们能多好地通过各个用户不同且经过更多训练的过滤器。
基于内容的垃圾邮件过滤通常与白名单相结合,白名单是一份发件人列表,其中列出可以不经过滤而接受其邮件的发件人。建立此类白名单的一种简单方法是保留一份用户曾经发送过邮件的每个地址的列表。如果邮件阅读器有删除为垃圾邮件按钮,那么您还可以添加用户已删除的每封电子邮件的发件人地址作为普通垃圾邮件。
我支持白名单,但更多的是将其作为一种节省计算量的方法,而不是一种改进过滤的方法。我曾经认为白名单会使过滤变得更容易,因为您只需过滤来自您从未联系过的人的电子邮件,而第一次给您发邮件的人会受到惯例的限制,无法向您发送任何内容。您已经认识的人可能会给您发送一封谈论性的电子邮件,但第一次给您发邮件的人不太可能这样做。问题是,人们可以拥有多个电子邮件地址,因此新的发件人地址并不能保证发件人是第一次给您写信。老朋友(尤其是如果他是黑客)突然向您发送一封带有新发件人地址的电子邮件并不罕见,因此您不能通过特别严格地过滤来自未知地址的邮件来冒误报的风险。
不过,从某种意义上说,我的过滤器本身确实体现了一种白名单(和黑名单),因为它们基于整个邮件,包括标题。因此,在某种程度上,它们“知道”受信任发件人的电子邮件地址,甚至知道邮件从他们发给我的路线。它们对垃圾邮件也了解得一清二楚,包括服务器名称、邮件程序版本和协议。
如果我认为我可以保持当前的垃圾邮件过滤率,我会认为这个问题已经解决了。但能够过滤掉当今大多数垃圾邮件并不意味着什么,因为垃圾邮件在不断演变。事实上,迄今为止大多数反垃圾邮件技术就像杀虫剂一样,除了产生新的抗性细菌菌株外,什么也没有。
我对贝叶斯过滤器抱有更大的希望,因为它们会随着垃圾邮件的出现而不断演化。因此,当垃圾邮件发送者开始使用“c0ck”而不是“cock”来逃避基于单个单词的简单垃圾邮件过滤器时,贝叶斯过滤器会自动注意到。事实上,“c0ck”的证据远比“cock”更确凿,贝叶斯过滤器也知道得更清楚。
然而,任何提出垃圾邮件过滤方案的人都必须能够回答这个问题:如果垃圾邮件发送者确切知道你在做什么,他们如何才能绕过你?例如,我认为,如果基于校验和的垃圾邮件过滤成为一个严重的障碍,垃圾邮件发送者就会转而使用疯狂的技术来生成邮件正文。
为了打败贝叶斯过滤器,垃圾邮件发送者仅仅让他们的电子邮件独一无二或停止使用个别脏话是不够的。他们必须让他们的邮件与你的普通邮件没有区别。我认为这会严重限制他们。垃圾邮件主要是推销,所以除非你的普通邮件都是推销,否则垃圾邮件将不可避免地具有不同的特征。当然,垃圾邮件发送者还必须改变(并不断改变)他们的整个基础设施,因为否则无论他们对邮件正文做了什么,标题在贝叶斯过滤器看来都会一如既往地糟糕。我对垃圾邮件发送者使用的基础设施了解不够,不知道让标题看起来无害有多难,但我猜这比让邮件看起来无害还要难。
假设他们可以解决邮件头的问题,那么未来的垃圾邮件可能看起来会是这样的:
Hey there. Thought you should check out the following: http://www.27meg.com/foo
因为这就是基于内容的过滤给垃圾邮件发送者留下的推销空间。(事实上,甚至很难通过过滤器,因为如果电子邮件中的其他所有内容都是中性的,垃圾邮件的可能性将取决于 URL,并且需要花费一些精力才能使其看起来中性。)
垃圾邮件发送者的范围很广,从运营所谓的选择加入列表(甚至不试图隐藏其身份)的企业,到劫持邮件服务器发送垃圾邮件宣传色情网站的家伙。如果我们使用过滤功能将他们的选择范围缩小到上述邮件,那么“合法”垃圾邮件发送者基本上就会破产;他们觉得根据各州法律,有义务在邮件中包含关于为什么他们的垃圾邮件不是垃圾邮件以及如何取消“订阅”的样板文字,而这种文字很容易识别。
(我过去认为相信更严格的法律会减少垃圾邮件是天真的。现在我认为,虽然更严格的法律可能不会减少垃圾邮件发送者发送的垃圾邮件数量,但它们肯定可以帮助过滤器减少收件人实际看到的垃圾邮件数量。)
在整个过程中,如果你限制垃圾邮件发送者的推销,你不可避免地会让他们破产。记住*“生意”*这个词很重要。垃圾邮件发送者是商人。他们发送垃圾邮件是因为它有效。它之所以有效,是因为尽管响应率极低(每百万最多 15 个,而目录邮件每百万 3000 个),但对他们来说成本几乎为零。对于收件人来说,成本是巨大的,每百万收件人花一秒钟删除垃圾邮件,大约需要 5 个人工周,但垃圾邮件发送者不必支付这笔费用。
不过,发送垃圾邮件确实会给发送者带来一些损失。[2] 因此,无论是通过过滤,还是使用过滤器迫使垃圾邮件发送者减少垃圾邮件的量,响应率越低,认为值得发送垃圾邮件的企业就越少。
垃圾邮件发送者使用这种推销手段是为了提高回复率。这可能比了解垃圾邮件发送者的想法更令人厌恶,但让我们快速了解一下回复垃圾邮件的人的想法。这个人要么极其轻信,要么对自己的性兴趣深信不疑。无论哪种情况,垃圾邮件在我们看来都是令人厌恶或愚蠢的,但在他们看来却很刺激。如果这些话听起来不刺激,垃圾邮件发送者就不会说这些话。而“我觉得你应该看看下面的内容”对垃圾邮件收件人的吸引力远不及垃圾邮件发送者现在说的那些话。结果:如果垃圾邮件不能包含令人兴奋的推销手段,那么它作为营销工具的效果就会降低,想要使用它的企业就会减少。
这最终是一个重大胜利。我开始编写垃圾邮件过滤软件是因为我不想再看这些东西了。但如果我们在过滤垃圾邮件方面做得足够好,它就会停止工作,垃圾邮件发送者实际上也会停止发送垃圾邮件。
在所有打击垃圾邮件的方法中,从软件到法律,我相信贝叶斯过滤将是最有效的方法。但我还认为,我们采取的反垃圾邮件措施种类越多越好,因为任何限制垃圾邮件发送者的措施都会使过滤变得更容易。即使在基于内容的过滤领域,我认为如果同时使用多种不同类型的软件也是一件好事。过滤器种类越多,垃圾邮件发送者就越难调整垃圾邮件以通过它们。
附录:过滤示例
以下是我在撰写本文时收到的一封垃圾邮件的示例。这封垃圾邮件中最有趣的十五个单词是:
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。
“Madam” 显然来自以“尊敬的先生或女士”开头的垃圾邮件。它们并不常见,但“madam” 这个词从未出现在我的合法电子邮件中,这完全与比例有关。
“共和国”得分很高,因为它经常出现在尼日利亚的诈骗邮件中,在涉及韩国和南非的垃圾邮件中也出现过一两次。你可能会说,它有助于识别这些垃圾邮件,这只是一个意外。但我在检查垃圾邮件概率时发现,有很多这样的意外,它们有一种不可思议的倾向,将事情推向正确的方向,而不是错误的方向。在这种情况下,“共和国”一词出现在尼日利亚的诈骗邮件和这封垃圾邮件中并非完全是巧合。有一整类涉及欠发达国家的可疑商业提议,而这些提议反过来更有可能有明确说明(因为它们不是)它们是共和国的名称。[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”等明显无害的单词。
有趣的是,“描述”率如此无害。在我的 4000 封垃圾邮件中,没有一封出现过这种情况。数据结果充满了这样的惊喜。分析垃圾邮件文本时,您会了解到垃圾邮件发送者使用的语言子集有多么狭窄。正是这一事实,加上任何个人用户邮件的同样特征词汇,使得贝叶斯过滤成为一种不错的选择。
附录:更多想法
我还没有尝试过的一个想法是基于单词对,甚至是三元组,而不是单个单词进行过滤。这应该可以更准确地估计概率。例如,在我当前的数据库中,“offers”这个词的概率为 0.96。如果你基于单词对来计算概率,那么“special offers”和“valuable offers”的概率为 0.99,而“approach offers”(如“this approach offers”)的概率为 0.1 或更低。
我没有这样做的原因是,基于单个单词的过滤已经非常有效。但这确实意味着,如果垃圾邮件越来越难检测,过滤器还有空间收紧。(奇怪的是,基于单词对的过滤器实际上是反向运行的马尔可夫链文本生成器。)
特定的垃圾邮件特征(例如,在收件人:字段中看不到收件人的地址)当然在识别垃圾邮件方面有价值。可以将它们视为虚拟词,在本算法中加以考虑。我可能会在未来的版本中这样做,至少针对少数最恶劣的垃圾邮件指标。特征识别垃圾邮件过滤器在许多细节上是正确的;它们缺乏的是综合证据的整体原则。
识别非垃圾邮件特征可能比识别垃圾邮件特征更重要。误报令人担忧,需要采取特别措施。我可能会在未来的版本中添加专门为避免误报而设计的第二级测试。如果邮件触发了第二级过滤器,即使其垃圾邮件概率高于阈值,它也会被接受。
我不认为第二级过滤是贝叶斯方法。它必然不仅是临时性的,而且是基于猜测的,因为误报的数量往往不足以发现模式。(无论如何,如果备份系统不依赖与主系统相同的技术,那么这也是好的。)
我将来可能会尝试的另一件事是特别关注电子邮件的特定部分。例如,目前大约 95% 的垃圾邮件包含他们希望您访问的网站的 URL。(其余 5% 的垃圾邮件希望您拨打电话号码、通过电子邮件或美国邮件地址回复,或者在少数情况下购买某只股票。)在这种情况下,URL 本身实际上足以确定电子邮件是否为垃圾邮件。
域名与(非德语)电子邮件中的其他文本不同,因为它们通常由多个单词组成。虽然在一般情况下计算量很大,但可能值得尝试分解它们。如果过滤器之前从未见过标记“xxxporn”,则其单独的垃圾邮件概率为 0.4,而“xxx”和“porn”单独的概率(在我的语料库中)分别为 0.9889 和 0.99,组合概率为 0.9998。
我认为,随着垃圾邮件发送者逐渐被迫停止在邮件文本中使用不利于其发送的文字,分解域名将变得更加重要。(带有 IP 地址的 URL 当然是极具不利性的标志,少数系统管理员的邮件除外。)
建立一个由垃圾邮件发送者推广的 URL 列表可能是一个好主意。我们需要一个 Raph Levien 研究的信任指标来防止恶意或不合格的提交,但如果我们有这样的东西,它将为任何过滤软件提供助力。它也会成为抵制的便捷基础。
测试可疑 URL 的另一种方法是,在用户查看提及该网站的电子邮件之前,派出爬虫程序查看该网站。您可以使用贝叶斯过滤器对该网站进行评级,就像对电子邮件进行评级一样,网站上发现的任何内容都可以纳入计算电子邮件为垃圾邮件的概率。导致重定向的 URL 当然会特别可疑。
我认为一个真正好主意的合作项目是积累大量垃圾邮件语料库。大型、干净的语料库是让贝叶斯过滤发挥良好作用的关键。贝叶斯过滤器实际上可以使用语料库作为输入。但这样的语料库对其他类型的过滤器也很有用,因为它可以用来测试它们。
创建这样的语料库会带来一些技术问题。当然,我们需要信任指标来防止恶意或不合格的提交。我们还需要从语料库中的邮件中删除个人信息(不仅仅是收件人地址和抄送,还包括例如取消订阅网址的参数,这些参数通常会对收件人地址进行编码)的方法。如果有人想承担这个项目,这对世界来说是一件好事。
附录:垃圾邮件的定义
我认为人们对垃圾邮件的定义已经达成了大致的共识,但有一个明确的定义会很有用。如果我们想建立一个垃圾邮件的中心语料库,甚至有意义地比较垃圾邮件的过滤率,我们就需要这样做。
首先,垃圾邮件不是未经请求的商业电子邮件。如果我家附近有人听说我在寻找一辆状况良好的旧 Raleigh 三速自行车,并给我发了一封电子邮件,表示愿意卖给我一辆,我会很高兴,但这封电子邮件既是商业邮件,也是未经请求的邮件。垃圾邮件的定义特征(事实上,它存在的理由)不是未经请求,而是自动发送。
垃圾邮件通常具有商业性质,这纯属偶然。例如,如果有人开始发送大量电子邮件来支持某些政治事业,那么这些电子邮件就和宣传色情网站的电子邮件一样,都是垃圾邮件。
我建议我们将垃圾邮件定义为未经请求的自动电子邮件。因此,该定义包括了许多垃圾邮件法律定义所没有的一些电子邮件。垃圾邮件的法律定义,大概是受到游说者的影响,倾向于排除与收件人有“现有关系”的公司发送的邮件。但例如,从一家公司购买东西并不意味着你一直在向他们索要电子邮件。如果我从一家网上商店订购东西,然后他们给我发了一连串垃圾邮件,这仍然是垃圾邮件。
发送垃圾邮件的公司通常会为您提供“退订”的方式,或者要求您访问他们的网站并更改“帐户偏好设置”,以便不再接收垃圾邮件。但这不足以阻止邮件成为垃圾邮件。不选择退订与选择接收不同。除非收件人明确选中了明确标记的复选框(默认为否)以要求接收电子邮件,否则该邮件就是垃圾邮件。
在某些业务关系中,您确实会隐性地索要某些类型的邮件。当您在线订购时,我认为您会隐性地索要收据和订单发货时的通知。当 Verisign 向我发送警告域名即将过期的邮件时,我并不介意(至少,如果他们是该域名的实际注册商)。但是当 Verisign 向我发送提供免费的“构建我的电子商务网站指南”的电子邮件时,那就是垃圾邮件。
笔记:
[1] 本文中的示例被翻译成 Common Lisp,以便(信不信由你)提高可访问性。本文描述的应用程序是我们为测试尚未发布的新 Lisp 方言Arc而编写的。
[2] 目前最低费率似乎是发送一百万封垃圾邮件约 200 美元。这非常便宜,每封垃圾邮件只需 1/50 美分。但例如,过滤掉 95% 的垃圾邮件将使垃圾邮件发送者到达特定受众的成本增加 20 倍。很少有人能有足够大的利润来吸收这一点。
[3] 一般来说,国家名称前面的修饰语越多,统治者越腐败。一个名为“某社会主义人民民主共和国”的国家可能是世界上最不愿意居住的地方。
感谢Sarah Harlin 阅读本文草稿;感谢 Daniel Giffin(他也是 Arc 解释器的生产编写者)提出的许多关于过滤的好想法以及创建我们的邮件基础设施;感谢 Robert Morris、Trevor Blackwell 和 Erann Gat 就垃圾邮件进行的多次讨论;感谢 Raph Levien 就信任指标提出的建议;感谢 Chip Coldwell 和 Sam Steingold 就统计数据提出的建议。
你可以在 [
黑客与画家
](http://www.amazon.com/gp/product/0596006624)。
更多信息: