译文

如何混淆电子邮件来防止垃圾发送者

翻译:cssrain | 2009-06-02 23:33:21 | 阅读614 | 来源

 

一直以来我都认为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++) {

                   // 判断当前linkclass是否含有"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/

【本文翻译仅为外语学习及阅读目的,原文作者个人观点与译者及译言网无关】

分享:

添加评论