Hoe een mailto-link spambestendig maken?

Ik wil dat bezoekers rechtstreeks op mijn webpagina op een e-mailadres kunnen klikken (of kopiëren). Als ik het echter (een beetje) moeilijker zou kunnen maken voor bots en andere crawlers om het e-mailadres te krijgen en het in een spamlijst te registreren, zou dat geweldig zijn.

Ik heb verschillende manieren gevonden om dit te doen (d.w.z. het coderen van mailto HTML-links), ofwel met JavaScript of in pure HTML, maar wat raden jullie aan? De JavaScript-technieken lijken ingewikkelder, maar dit kan mogelijk gevolgen hebben voor gebruikers die het hebben uitgeschakeld, en legitieme crawlers zoals Google.

Aan de andere kant lijkt de HTML-versie een beetje basaal, de botschrijvers zouden het nu al moeten weten…

Moet ik de moeite nemen om dit te doen, of krijgen de spammers mijn e-mail toch? Ik weet dat antispamfilters steeds beter worden, maar als ik iets meer kan doen om spammers te vertragen, zal ik dat doen.


Antwoord 1, autoriteit 100%

JavaScript blijft een van de beste mailto-obfuscators. Voor gebruikers met JavaScript uitgeschakeld, wil je misschien de mailto-link vervangen door een link naar een contactformulier.

Het volgende is een populaire JavaScript-antispam-e-mailverduistering:

Er is ook een php-versievan de hierboven om versluierde e-mails van de serverkant te kunnen genereren.

Dit is de JavaScript-code die de bovenstaande tool zou genereren om mijn e-mailadres te verdoezelen (opmerkingen intact):

<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 = "[email protected]"
  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>

Antwoord 2, autoriteit 38%

Dit ziet eruit als een echt coole methode die de karakters codeert, waarvan ik aanneem dat het de basis spambots zou verslaan:

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

Dus

<a href="mailto:[email protected]">Email</a>

wordt

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

Het is aantrekkelijk omdat er geen Javascript voor nodig is.

Plunker-voorbeeld hier.


Antwoord 3, autoriteit 32%

Voortbouwend op het antwoord van Daniel Vassallo, een manier om een ​​mailto-link te coderen die mogelijkslimmere spambots ontwijkt die JS document.writes evalueren (zoals aangegeven door incarnate) zou zijn om de decodering in een Javascript-functie te plaatsen die alleen wordt geëvalueerd wanneer op de link wordt geklikt. Gebruik bijvoorbeeld base64 als de “encryptie”:

<script>
  function decryptEmail(encoded) {
    var address = atob(encoded);
    window.location.href = "mailto:" + address;
  }
</script>
<a href="javascript:decryptEmail('dGVzdEB0ZXN0LmNvbQ==');">Email</a>

Werkende plunjer.

Ik beweer niet te weten of dit wel of niet te slim af zou kunnen zijn door een meer geavanceerde crawler.


Antwoord 4, autoriteit 23%

U zoude reCAPTCHA Mailhidekunnen gebruiken functionaliteit. Hierdoor worden e-mailadressen weergegeven op het formulier [email protected]waarbij het weglatingsteken een link is om het volledige adres te bekijken. Het is een beetje omslachtig voor de bezoeker, maar zou premium bescherming moeten bieden. Dat gezegd hebbende, laat deze techniek uw bezoekers niettoe om het adres rechtstreeks van uw webpagina te kopiëren.

Ik begrijp het gedeelte over de “legitieme crawlers” zoals Google niet. Ik zie in ieder geval niet in waarom Google het e-mailadres toch zou moeten indexeren.(Zie de opmerking van OP’s hieronder.)


Antwoord 5, autoriteit 21%

U kunt externe services gebruiken zoals aemail.com:

@email is een gratis service voor het verbergen van e-mail die e-mails verbergt met behulp van korte
URL’s die afzenders omleiden naar de mailto-url nadat ze op de link hebben geklikt.

Na het invoeren van een e-mail op aemail.com, krijgt u een korte URL die kan worden gebruikt om uw ‘mailto’-link te vervangen. Zodra er op de link is geklikt, wordt uw gebruiker doorgestuurd naar de ‘mailto’-URL zonder enige kennisgeving van aemail.com. APIkan worden gebruikt om e-mails te verbergen/URL’s dynamisch op te halen.

Voorbeeld:

<a href="mailto:[email protected]">Contact</a>

Vervangen door

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

Zorgt ervoor dat de e-maillink blijft werken.


Antwoord 6, autoriteit 4%

Ik gebruik gewoon:

<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>

Antwoord 7, autoriteit 4%

Mijn versie genereert de link on-the-fly uit een base64-gecodeerde e-mailstring wanneer de gebruiker de muisaanwijzer op de link plaatst of deze aanraakt op een mobiel apparaat. Alle links met het attribuut ‘data-gen-email’ zullen werken.

// 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);
});

Je kunt je e-mail coderen naar base64 met behulp van btoa('mailto:[email protected]'), of eldersop internet:

btoa('mailto:[email protected]'); // "bWFpbHRvOnlvdUBkb21haW4uY29t"

Voorbeeld link in html:

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

Antwoord 8

//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:[email protected]?subject=' + sO);
      break;
    case 'paul':
      $(this).attr('href', 'mailto:[email protected]?subject=' + sO);
      break;
    default:
        $(this).attr('href', '#');
  }
})
$('.courriel').focusout(function() { //reset the link to # on focus loss
    $(this).attr('href', '#');
})

Other episodes