一直以来我都认为” mailto: “是一个神圣的链接。通过它,我可以在网页中发布我的email地址,并且任何人都可以通过单击这个链接联系我。当然前提是在一个纯洁的Web环境下---在垃圾邮件发送者出来之前。举个例子说:今天你在你的网页中使用了” mailto: “,那么30秒后你将收到第一封伟哥信息。垃圾邮件发送者的速度之快另你惊讶。从今以后,你将收到越来越多的垃圾邮件。那么我们有什么办法,在自己的网页中发布自己邮箱的同时,不引起垃圾邮件发布者的注意呢?
最明显的解决办法是在你的HTML中使用机器不可读的Email。比如:“bob (at) bobsdomain dot com”。虽然这可以使垃圾邮件发送者不再那么容易,但它同时也会为难您的用户。
另一种选择是使用JavaScript生成的电子邮件地址,然后对字符串加点编码。如:
<p>contact :
<script type="text/javascript">
document.write('<a href="mai'+"lto"+"bob"+'@'+'bobsdomain.com">bob@'+"bobsdomain.com</a>");
</script>
</p>
这将阻止大多数垃圾邮件发送者,但如果用户禁用JavaScript将不会看到您的地址。(我不推荐使用 document.write() )
一个更好的解决办法是使用它们两者相结合的技术,以阻止垃圾邮件,同时不会造成用户的困难。首先在我的网页中使用一个人性化的,同时垃圾邮件发送者不能收集的email地址。我们还将它链接到一个联络网页,例如:
<p>Contact <a href="contact.html" class="email">bob (at) bobsdomain dot com</a></p>
请注意,我们为链接添加了一个class,并设置为”email”。
接下来写一个JavaScript函数搜寻网页的伪装的电子邮件,并将它转换成真正的” mailto: “链接。我们将创建一个' email.js '文件,将它包括在我们的HTML里:
<script type="text/javascript" src="email.js"></script>
所需要的代码很短,代码如下:
<script type="text/javascript">
function EmailUnobsfuscate() {
var link = document.getElementsByTagName && document.getElementsByTagName("a");//查找所有的a
var email, e;
for (e = 0; link && e < link.length; e++) {
// 判断当前link的class是否含有"email"
if ((" "+link[e].className+" ").indexOf(" email ") >= 0) {
// 获取全小写的email地址
email = link[e].firstChild.nodeValue.toLowerCase() || "";
// 转换email地址
email = email.replace(/dot/ig, ".");//将dot转为.
email = email.replace(/(at)/ig, "@");//将(at)转为@
email = email.replace(/s/g, "");//将空格转为""
//判断是否为有效email
if (/^[^@]+@[a-z0-9]+([_.-]{0,1}[a-z0-9]+)*([.]{1}[a-z0-9]+)+$/.test(email)) {
// 把真正的email插入到页面中
link[e].href = "mailto:" + email;
link[e].firstChild.nodeValue = email;
}
}
}
}
</script>
最后,我们需要确保在网页加载完毕后运行email.js:
window.onload = EmailUnobsfuscate;
使用两者结合的结果是:
n 我们的原始HTML网页中没有”mailto:”链接,同时也不会轻易收到垃圾邮件发送者发来的垃圾邮件。
n 绝大多数的用户(那些启用JavaScript )将看到一个标准的电子邮件地址和“mailto:”链接。
n 少部分禁用脚本的用户可以看到“bob (at) bobsdomain dot com”的地址。
说了这么多,意图就是展示这些概念,而不是这些代码。尽管例子能正常工作,但我还是建议你:
n 使用您自己的伪装电子邮件格式,例如: “bob {@} bobsdomain – dot - com”。因为垃圾邮件发送者可以阅读这篇文章后变换编码的电子邮件,然后轻易的对付你!
n 使用不同的链接标识符--- “email”有点明显!
n 使用JavaScript库,例如jQuery ,使代码更为简短。您还应该确保它应付空格或其他DOM节点周围的电子邮件地址文字(不处理的代码段) 。
n 使用一个更强大的事件处理程序来取代window.onload。
祝您好运。
例子演示:http://www.cssrain.cn/demo/howtoemail.html
原文地址:http://www.sitepoint.com/blogs/2009/05/05/stop-spam-harvesting-email-obfuscation/