我知道我的回答不会被很多人喜欢,但请在大拇指向下之前考虑这里概述的要点。
垃圾邮件发送者可以轻松地机器读取任何易于机器读取的内容。尽管他们的行为在我们看来很愚蠢,但他们并不是愚蠢的人。他们创新且足智多谋。他们不只是使用机器人来收集电子邮件,他们有大量的方法可供使用,除此之外,他们只需为良好的新电子邮件列表付费。这意味着,他们让全球成千上万的黑帽黑客来执行他们的工作。人们准备编写恶意软件来抓取他人浏览器的屏幕,最终使您尝试实现的任何方法都变得无用。这个帖子已经被 10 多个这样的人阅读了,他们在嘲笑我们。他们中的一些人甚至可能厌倦了流泪,发现我们无法对他们提出新的挑战。
请记住,您最终不是要节省自己的时间,而是要节省他人的时间。因此,请考虑在这里多花一些时间。没有容易执行的灵丹妙药。如果您在一家在网站上发布 100 人电子邮件的公司工作,并且您可以减少每人每天 1 封垃圾邮件,那么我们谈论的是每年 36500 封垃圾邮件。如果删除此类电子邮件平均需要 5 秒钟,那么我们谈论的是每年 50 个工作小时。更不用说减少的烦恼了。那么,为什么不花几个小时在这上面呢?
不仅您和收到电子邮件的人认为时间是一种资产。因此,您必须找到一种方法来混淆电子邮件地址,以使其无法破解。如果您使用一些广泛使用的方法来混淆电子邮件,那么破解它确实是值得的。由于结果是,破解者将获得数千封,如果不是数万或数十万封新电子邮件。而对他们来说,他们会得到钱。
所以,继续编写你自己的方法。这是一种罕见的情况,重新发明轮子确实有回报。使用一种机器不可读的方法,并且最好在不牺牲用户体验的情况下需要一些用户交互。
我花了大约 20 分钟来编写一个例子来说明我的意思。在示例中,我使用 KnockoutJS 只是因为我喜欢它,而且我知道您自己可能不会使用它。但无论如何都无关紧要。这是一种自定义解决方案,并未广泛使用。破解它不会带来回报,因为这样做的方法只能在广阔的互联网上的一个页面上工作。
这是小提琴:http: //jsfiddle.net/hzaw6/
下面的代码并不是好的代码示例。但只是一个快速的代码示例,机器很难弄清楚我们甚至在这里处理电子邮件。即使可以做到,大规模执行也不会有回报。
是的,我知道它在 IE = lte8 上不起作用,因为'无法获取未定义或空引用的属性'属性',但我根本不在乎,因为它只是方法的演示,而不是实际的实现,并且不打算按原样用于生产。随意编写自己的代码,它更酷,技术更可靠等。
哦,永远不要用 html 或 javascript 命名邮件或电子邮件。为任何名为 mail 或 email 的内容抓取 DOM 和 window 对象并检查它是否包含与电子邮件匹配的内容太容易了。这就是为什么您不希望任何变量包含完整形式的电子邮件,这也是您希望用户在分配此类变量之前与页面交互的原因。如果您的 javascript 对象模型包含任何处于 DOM 就绪状态的电子邮件地址,那么您就是将它们暴露给垃圾邮件发送者。
的HTML:
<div data-bind="foreach: contacts">
<div class="contact">
<div>
<h5 data-bind="text: firstName + ' ' + lastName + ' / ' + department"></h5>
<ul>
<li>Phone: <span data-bind="text: phone"></span></li>
<li><a href="#999" data-bind="click:$root.reveal">E-mail</a> <span data-bind="visible: $root.msgMeToThis() != ''"><input class="merged" data-bind="value: mPrefix" readonly="readonly" /><span data-bind="text: '@' + domain"></span></span></li>
</ul>
</div>
</div>
</div>
JS
function ViewModel(){
var self = this;
self.contacts = ko.observableArray([
{ firstName:'John', mPrefix: 'john.doe', domain: 'domain.com', lastName: 'Doe', department: 'Sales', phone: '+358 12 345 6789' },
{ firstName:'Joe', mPrefix: 'joe.w', domain: 'wonder.com', lastName: 'Wonder', department: 'Time wasting', phone: '+358 98 765 4321' },
{ firstName:'Mike', mPrefix: 'yo', domain: 'rappin.com', lastName: 'Rophone', department: 'Audio', phone: '+358 11 222 3333' }
]);
self.msgMeToThis = ko.observable('');
self.reveal = function(m, e){
var name = e.target.attributes.href.value;
name = name.replace('#', '');
self.msgMeToThis(name);
};
}
var viewModel = new ViewModel();
ko.applyBindings(viewModel);