Wie kann man einen Mailto-Link spammsicher machen?

Lesezeit: 7 Minuten

Ich möchte, dass Besucher eine E-Mail-Adresse direkt auf meiner Webseite anklicken (oder kopieren) können. Wenn ich es jedoch Bots und anderen Crawlern (ein bisschen) schwerer machen könnte, diese E-Mail-Adresse zu erhalten und sie in einer Spam-Liste zu registrieren, wäre das großartig.

Ich habe verschiedene Möglichkeiten gefunden, dies zu tun (dh Mailto-HTML-Links zu codieren), entweder mit JavaScript oder in reinem HTML, aber was empfehlen Sie? Die JavaScript-Techniken scheinen komplizierter zu sein, aber dies kann möglicherweise Benutzer betreffen, die es deaktiviert haben, und legitime Crawler wie Google.

Auf der anderen Seite scheint das HTML ein bisschen einfach zu sein, die Bot-Autoren sollten es inzwischen herausgefunden haben …

Soll ich mir überhaupt die Mühe machen, oder bekommen die Spammer trotzdem meine E-Mail? Ich weiß, dass Antispam-Filter immer besser werden, aber wenn ich etwas mehr tun kann, um Spammer zu verlangsamen, werde ich es tun.

Benutzer-Avatar
Daniel Wassallo

JavaScript bleibt einer der besten Mailto-Obfuscatoren. Für Benutzer mit deaktiviertem JavaScript möchten Sie möglicherweise den mailto-Link durch einen Link zu einem Kontaktformular ersetzen.

Das Folgende ist ein beliebter JavaScript-Anti-Spam-E-Mail-Obfuscator:

Es gibt auch eine php-version der oben genannten, um verschleierte E-Mails von der Serverseite generieren zu können.

Dies ist der JavaScript-Code, den das obige Tool generieren würde, um meine E-Mail-Adresse zu verschleiern (Kommentare intakt):

<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="https://stackoverflow.com/questions/3624667/mailto:"+link+"">Email Me</a>")
}
//-->
</script><noscript><a href="contact-form.html">Email Me</a></noscript>

  • Dies mag eine dumme Frage sein, und ich entschuldige mich dafür, dass ich einen so alten Thread kommentiere/frage, aber sobald die Webseite generiert ist, scheint die E-Mail-Adresse im Klartext zu existieren, und Sie können mit der rechten Maustaste klicken und die E-Mail-Adresse kopieren. Wäre es für diese Spam-Bots nicht wirklich einfach, diese Informationen abzugreifen, nachdem sie entschlüsselt und auf der gerenderten Seite angezeigt wurden? Ich kann mir nicht vorstellen, dass es so einfach ist, aber ich kann einfach nicht herausfinden, was das verhindert, und ich würde es sehr gerne wissen. Vielen Dank! 🙂

    – Soundfx4

    12. Juni 2014 um 20:08 Uhr

  • Als Antwort auf den obigen Kommentar sind Spam-Bots SEHR einfach, sie wurden entwickelt, um nach HTML-Mailto-Links zu scannen, die Verschleierung selbst verschlüsselt den Mailto-Link, sodass der Spam-Bot ihn nicht lesen kann. Es ist unwahrscheinlich, dass es einen Bot gibt, der intelligent genug ist, um dies zu entschlüsseln, da ein intelligenter Bot nicht kosteneffektiv wäre.

    – Raptus

    10. Dezember 2014 um 14:13 Uhr

  • Ich bin mir ziemlich sicher, dass der auf PhantomJS basierende Bot diese E-Mail problemlos lesen kann.

    – Boris Okunskiy

    16. Dezember 2014 um 20:51 Uhr

  • Richtig – jedes Headless-Browser-Kit kann diesen Link problemlos lesen. Ich fürchte, keine clientseitige Verschlüsselung oder Verschleierung wird gegen moderne Headless-Browser-Kits funktionieren. Wenn Sie verhindern möchten, dass Ihre E-Mail-Adresse erfasst wird, stellen Sie stattdessen ein E-Mail-Formular bereit. Oder gehen Sie einfach damit um, dass es geerntet wird, und holen Sie sich einen Mailserver mit guter Spamfilterung – moderne Anbieter wie GMail sind intelligent genug, um so ziemlich alles zu filtern.

    – mindplay.dk

    7. Februar 2015 um 13:30 Uhr

  • der Link ist tot

    – Fanky

    Vor 17 Stunden

Dies sieht nach einer wirklich coolen Methode aus, die die Zeichen codiert, von der ich annehme, dass sie grundlegende Spam-Bots besiegen würde:

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

So

<a href="https://stackoverflow.com/questions/3624667/mailto:[email protected]">Email</a>

wird

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

Es ist insofern ansprechend, als es kein Javascript erfordert.

Plunker-Beispiel hier.

  • @beta kannst du bitte genauer sein? Es funktioniert nicht als Mailto oder besiegt keine Spambots? Welche Betriebssystem-/Browserversionen? Hast du andere probiert? Es kann sich um ein plattformspezifisches Problem handeln, das Sie wissen sollten.

    – Harry

    11. August 2019 um 13:12 Uhr

  • Entschuldigung, das Skript auf der verlinkten Seite (robspangler.com/blog/encrypt-mailto-links-to-stop-email-spam) funktioniert derzeit nicht. es erzeugt nicht die verschleierten Links.

    – Beta

    11. August 2019 um 13:30 Uhr

  • Dieser scheint zu funktionieren, um die E-Mail zu verschlüsseln katpatuka.org/pub/doc/anti-spam.html

    – Leonardo Bernhard

    11. März 2020 um 22:12 Uhr

  • Link tot hier auch

    – Fanky

    Vor 17 Stunden

Aufbauend auf der Antwort von Daniel Vassallo gibt es eine Möglichkeit, einen Mailto-Link zu verschlüsseln kann Vermeiden Sie cleverere Spambots, die JS auswerten document.writes (wie von incarnate aufgezeigt) wäre, die Entschlüsselung in eine Javascript-Funktion zu stecken, die erst ausgewertet wird, wenn auf den Link geklickt wird. Verwenden Sie beispielsweise base64 als “Verschlüsselung”:

<script>

  function decryptEmail(encoded) {

    var address = atob(encoded);
    window.location.href = "https://stackoverflow.com/questions/3624667/mailto:" + address;

  }

</script>

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

Arbeitender Plunker.

Ich behaupte nicht zu wissen, ob dies von einem ausgeklügelteren Crawler überlistet werden könnte oder nicht.

  • Dies scheint eine einfache und intelligente Lösung zu sein.

    – Talha Imam

    6. August 2020 um 18:59 Uhr

  • Dies sollte die akzeptierte Antwort sein. Wenn Sie PHP verwenden, können Sie auch einfach verwenden $encr_email = base64_encode($your_email); und fügen Sie dann die Variable $enc_email zum href-Tag hinzu.

    – Peter

    22. April um 10:44 Uhr


Benutzer-Avatar
jensgram

Du könnte benutze die reCAPTCHA Mailverbergen Funktionalität. Dadurch werden E-Mail-Adressen im Formular angezeigt [email protected] wobei die Auslassungspunkte ein Link zum Anzeigen der vollständigen Adresse sind. Es ist ein wenig umständlich für den Besucher, sollte aber einen erstklassigen Schutz bieten. Allerdings wird diese Technik nicht Lassen Sie Ihre Besucher die Adresse direkt von Ihrer Webseite kopieren.

Ich verstehe den Teil über die “legitimen Crawler” wie Google nicht. Zumindest verstehe ich nicht, warum Google die E-Mail-Adresse trotzdem indexieren sollte. (Siehe OPs Kommentar unten.)

Benutzer-Avatar
James

Sie können externe Dienste wie verwenden aemail.com:

@email ist ein kostenloser Dienst zum Verbergen von E-Mails, der E-Mails mit kurzen URLs verbirgt, die Absender nach dem Klicken auf den Link auf die mailto-URL umleiten.

Nachdem Sie eine E-Mail bei aemail.com eingegeben haben, erhalten Sie eine kurze URL, die verwendet werden kann, um Ihren „mailto“-Link zu ersetzen. Sobald auf den Link geklickt wird, wird Ihr Benutzer ohne Benachrichtigung von aemail.com auf die URL „mailto“ umgeleitet. API kann verwendet werden, um E-Mails zu verbergen/URLs dynamisch zu erhalten.

Beispiel:

<a href="https://stackoverflow.com/questions/3624667/mailto:[email protected]">Contact</a>

Ersetzt mit

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

Wird den E-Mail-Link funktionsfähig halten.

Benutzer-Avatar
Hasan G

Ich benutze einfach:

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

Benutzer-Avatar
Alex B.

Meine Version generiert den Link spontan aus einer base64-codierten E-Mail-Zeichenfolge, wenn der Benutzer mit der Maus über den Link fährt oder ihn auf einem mobilen Gerät berührt. Alle Links mit dem Attribut „data-gen-email“ funktionieren.

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

Sie können Ihre E-Mail mit base64 codieren btoa('mailto:[email protected]')oder anderswo im Internet:

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

Beispiellink in html:

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

1291150cookie-checkWie kann man einen Mailto-Link spammsicher machen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy