如何sporoof mailto链接?

时间:2010-09-02 07:34:12

标签: html encoding obfuscation spam mailto

我希望访问者能够直接在我的网页上点击(或复制)电子邮件地址。但是,如果我能够(有点)让机器人和其他爬虫更难获得所述电子邮件地址并将其注册到垃圾邮件列表中,那就太棒了。

我找到了不同的方法(即使用JavaScript或纯HTML编码mailto HTML链接),但你们推荐什么? JavaScript技术似乎更复杂,但这可能会影响关闭它的用户,以及像Google这样的合法抓取工具。

另一方面,HTML版似乎有点基础,机器人编写者应该现在已经弄清楚...

我是否应该费心去做,或者垃圾邮件发送者是否会收到我的电子邮件?我知道反垃圾邮件过滤器越来越好,但如果我能做更多的事情来减缓垃圾邮件发送者的速度,我会的。

8 个答案:

答案 0 :(得分:37)

JavaScript仍然是最好的mailto混淆器之一。对于禁用JavaScript的用户,您可能希望将mailto链接替换为指向联系表单的链接。

以下是一种流行的JavaScript反垃圾邮件混淆器:

上述a php version也可以从服务器端生成混淆的电子邮件。

这是以上工具生成的用于混淆我的电子邮件地址的JavaScript代码(评论完整):

<script type="text/javascript" language="javascript">
<!--
// Email obfuscator script 2.1 by Tim Williams, University of Arizona
// Random encryption key feature by Andrew Moulden, Site Engineering Ltd
// This code is freeware provided these four comment lines remain intact
// A wizard to generate this code is at http://www.jottings.com/obfuscator/
{ coded = "lMnK@wMunFK8MDDMKKt.ktl"
  key = "1DtzZ8TGBuhRjJMKWI4gkUF2qidfOyPmSN7X30Vpso6xvErLnwQCbalA95HcYe"
  shift=coded.length
  link=""
  for (i=0; i<coded.length; i++) {
    if (key.indexOf(coded.charAt(i))==-1) {
      ltr = coded.charAt(i)
      link += (ltr)
    }
    else {     
      ltr = (key.indexOf(coded.charAt(i))-shift+key.length) % key.length
      link += (key.charAt(ltr))
    }
  }
  document.write("<a href='mailto:"+link+"'>Email Me</a>")
}
//-->
</script><noscript><a href='contact-form.html'>Email Me</a></noscript>

答案 1 :(得分:12)

这看起来像是一个非常酷的方法来编码角色,我认为这会打败基本的垃圾邮件机器人:

http://robspangler.com/blog/encrypt-mailto-links-to-stop-email-spam/

所以

<a href="mailto:test@test.com">Email</a>

变为

<a href="&#x6d;&#97;&#105;&#108;&#x74;&#111;&#58;&#116;&#101;&#115;&#116;&#x40;&#x74;&#101;&#115;&#x74;&#x2e;&#x63;&#111;&#109;">Email</a>

它的吸引力在于它不需要任何Javascript。

Plunker example here

答案 2 :(得分:10)

可以使用 reCAPTCHA Mailhide 功能。这将在use...@domain.tld表单上呈现电子邮件地址,其中省略号是查看完整地址的链接。这对游客来说有点麻烦,但应该给予高级保护。话虽如此,这种技术不会让访问者直接从您的网页复制地址。

我没有像谷歌那样得到关于“合法爬虫”的部分。至少,我无法理解谷歌为什么要将电子邮件地址编入索引。(参见下面的OP评论。)

答案 3 :(得分:5)

基于Daniel Vassallo的回答,一种加密mailto链接的方法可以避免使用更聪明的spambots来评估JS document.write(如化身指出的那样)将是Javascript函数中的解密,仅在单击链接时进行评估。例如,使用base64作为“加密”:

<script>

  function decryptEmail(encoded) {

    var address = atob(encoded);
    window.location.href = "mailto:" + address;

  }

</script>

<a href="javascript:decryptEmail('dGVzdEB0ZXN0LmNvbQ==');">Email</a>

Working Plunker

我不知道是否可以通过更复杂的爬虫来解决这个问题。

答案 4 :(得分:3)

您可以使用aemail.com等外部服务:

   @email是一个免费的电子邮件隐藏服务,可以使用短片隐藏电子邮件   点击链接后,网址会将发件人重定向到mailto-url。

在aemail.com输入电子邮件后,您会收到一个简短的网址,该网址可用于替换您的邮件。链接。点击链接后,您的用户将被重定向到&#39; mailto&#39;没有任何aemail.com通知的URL。 API可用于动态隐藏电子邮件/获取网址。

示例:

<a href="mailto:info@itee.com">Contact</a>

替换为

<a href="https://aemail.com/q2">Contact</a>

将保持电子邮件链接正常工作。

答案 5 :(得分:1)

我只是使用:

<script language="javascript" type="text/javascript">
var pre = "hideme";
document.write("<a href='mailto:" + pre + "@domain.com'>" + pre
+ "@domain.com</a>");
</script>
<noscript>Enable javascript to see our email!</noscript>

答案 6 :(得分:1)

当用户将鼠标悬停在链接上,或者在移动设备上触摸该链接时,我的版本会根据base64编码的电子邮件字符串动态生成链接。所有具有“ data-gen-email”属性的链接都可以使用。

// The string is your base64-encoded email
const emailAddress = atob("bWFpbHRvOnlvdUBkb21haW4uY29t");

// Select all links with the attribute 'data-gen-email'
const emailLinks = document.querySelectorAll('[data-gen-email]');

emailLinks.forEach(link => {
    link.onmouseover = link.ontouchstart = () => link.setAttribute('href', emailAddress);
});

您可以使用btoa('mailto:you@domain.com')或网络上的elsewhere将电子邮件编码为base64:

btoa('mailto:you@domain.com'); // "bWFpbHRvOnlvdUBkb21haW4uY29t"

html中的示例链接:

<a href="#" target="_blank" data-gen-email>Email Me!</a>

答案 7 :(得分:0)

//This sets the mailto link when clicked. 
//As the link is followed, the focus is also lost and the link reset to # 
//html should look like this :
//<a class="courriel" data-courriel="john" data-objet="Just a test" href="#">Some text</a>

$('.courriel').click(function() { 
  var sA = $(this).attr('data-courriel'); // get nickname
  var sO = $(this).attr('data-objet');    // get subject
//Adresses are hard coded here; a nick name is used; 
//this to prevent having a potentially decypherable encoded adress  in the <a> tag
  switch (sA) { 
    case 'john': 
      $(this).attr('href', 'mailto:john@lennon.com?subject=' + sO);
      break;
    case 'paul':
      $(this).attr('href', 'mailto:paul@mccartney.com?subject=' + sO);
      break;
    default:
        $(this).attr('href', '#');
  }


})
$('.courriel').focusout(function() { //reset the link to # on focus loss
    $(this).attr('href', '#');
})