E-Mail-Adressen in WordPress verschlüsseln - antispambot()
- Code, Shortcode & Plugin -In diesem Artikel erfährst Du wie man E-Mail-Adressen in WordPress verschlüsselt und dadurch hoffentlich weniger Spam in Deinem Posteingang landet. Ich stelle dir drei verschiedene Möglichkeiten vor: Verschlüsselung direkt in Deinem Template (z.B. single.php oder page.php), per Shortcode im Editor oder per Plugin.
Bevor wir allerdings anfangen, ein kleiner Hinweis: Es gibt keine ultimative Methode, wie Du eine öffentliche E-Mail-Adresse vor Spam-Missbrauch schützen kannst. Mit der Anleitung in diesem Artikel werden wir es aber den Bots so schwer wie möglich machen, Deine E-Mail-Adresse automatisiert über den Quellcode Deiner Seite auszulesen.
Vorgehen von Bots
Bots schauen sich den Quellcode Deiner Seite an und folgen Links zu anderen Seiten. E-Mail-Adressen sind sehr leicht zu identifizieren, da sie stets gleich aufgebaut sind, ein @ enthalten und meistens ein mailto:
am Anfang steht.
Es gibt eine handvoll Möglichkeiten, den Bots das automatisierte Auslesen dieser Mail-Adressen zu erschweren. Wir wollen aber gleichzeitig die Usability aufrecht erhalten, weshalb Spielereien wie deinname ( at ) domain.de
oder ein Bild für uns nicht in Frage kommen. Das stört die Usability und der Leser hat mehr Aufwand, Dir eine Mail zu schreiben.
Deshalb werden wir die Mail-Adresse mit Hilfe der WordPress-Funktion antispambot() verschlüsseln.
E-Mail-Verschlüsselung via antispambot() im Template
Die Funktion antispambot()
codiert Zeichenketten, sodass die E-Mail-Adresse nicht mehr als solche direkt im Quelltext der Seite steht und die meisten Bots diese nicht mehr automatisiert auslesen können. Betonung auf „die meisten“, denn dadurch dass auf unzähligen Webseiten E-Mails unverschlüsselt im Quellcode stehen, haben die meisten Bots gar nicht den Bedarf sich länger mit verschlüsselten Mails aufzuhalten.
Hier also ein Beispiel, wie antispambot()
in Deinem Template eingesetzt werden kann:
footer.php
.
WordPress erzeugt daraus dann folgenden HTML-Code:
denis@wpcorner.de
Shortcode für den Editor erstellen
Möchtest Du Deine E-Mail im WordPress Editor verschlüsseln, ist ein Shortcode nützlich. Um diesen zu erstellen musst Du folgenden Code in die functions.php
Deines (Child-)Themes platzieren:
function wpcorner_hide_email_shortcode( $atts , $content = null ) { if ( ! is_email( $content ) ) { return; } return '<a href="mailto:' . antispambot( $content ) . '">' . antispambot( $content ) . '</a>'; } add_shortcode( 'email', 'wpcorner_hide_email_shortcode' );
[email]
verwenden, um E-Mail-Adressen die du über den WordPress Editor veröffentlichst, zu kodieren.
Das würde in meinem Fall wie folgt aussehen:
[email]denis@wpcorner.de[/email]
functions.php
verschlüsselt nicht vollautomatisch alle deine E-Mail-Adressen, sondern erzeugt lediglich einen Shortcode, den du im Editor verwenden kannst. Du musst also unbedingt darauf achten, den obigen Shortcode auch zu verwenden.Download: Email Address Encoder
E-Mail verschlüsseln via Email Address Encoder Plugin
Als letzte Empfehlung gibt es hier noch das Plugin Email Address Encoder. Dieses kodiert Deine Mails automatisch über die eae_encode_str()
-Funktion. Diese ist schneller als antispambot()
und fügt noch weitere hexadezimal-Zeichen hinzu. Der erzeugte HTML-Code sieht dann wie folgt aus:
denis@wpcorner.de
Das Plugin verschlüsselt E-Mail-Adressen automatisch sowohl in Beiträgen, Seiten, Widgets, Kommentaren und selbst in Auszügen.
Fazit: Nur noch verschlüsselte Mail-Adressen ausgeben
Drei Möglichkeiten habe ich Dir gezeigt, mit denen Du alle Mail-Adressen auf Deiner WordPress-Seite verschlüsseln kannst. Setz Dich ran, binde entweder die antispambot()
-Funktion ein oder installiere das Email Address Encoder Plugin und erschwere es Bots so Deine E-Mail-Adresse auszulesen.
Hallo WP-Corner-Team,
habe den Code einmal in meiner Lokalen Testinstallation eingefügt, leider ohne ein Ergebniss 🙁
Auch werde ich aus diesem Absatz nicht schlau E-Mail-Verschlüsselung via antispambot() im Template, wo genau kommt dieser Code rein
Zudem sieht man auch keine Änderung im Quellcode wenn man dieses hier in die Function einfügt
function wpcorner_hide_email_shortcode( $atts , $content = null ) {
if ( ! is_email( $content ) ) {
return;
}
return ‚‚ . antispambot( $content ) . ‚‚;
}
add_shortcode( ‚email‘, ‚wpcorner_hide_email_shortcode‘ );
Auch in Deinem Impressum ist die E-Mail Adresse komplett normal lesbar.
Hast Du eine Idee warum das nicht geht und man nichts sieht im Quellcode.
Hi Dirk,
ich hoffe ich kann dir mit meiner Antwort weiterhelfen 🙂
1.) Wenn du dich auf die erste Codezeile hier im Beitrag beziehst, dann kannst du diese an der gewünschten Stelle in deinem Theme setzen. Möchtest du deine E-Mail-Adresse z.B. im Footer anzeigen lassen, fügst du den Code an die entsprechende Stelle deiner footer.php
2.) Der von dir angesprochene Code kommt in die functions.php, das solltest du ja bereits korrekt umgesetzt haben. Jetzt reicht es aber nicht aus, diesen Code nur in der Datei zu hinterlegen, denn er kreiert lediglich einen Shortcode und verschlüsselt nicht vollautomatisch. Eine Zeile weiter findest du den entsprechenden Shortcode, den du im WordPress Editor in jedem Beitrag oder jeder Seite einfügen kannst. Im Beispiel war das: [email]denis@wpcorner.de[/email]
Diese E-Mail-Adresse wird nun im Frontend verschlüsselt dargestellt.
3.) Die E-Mail in unserem Impressum wird verschlüsselt im Quelltext dargestellt, ich habe das soeben noch einmal überprüft. Für einen Besucher wird sich optisch auch nichts ändern, lediglich im HTML steht es anders drin.
Falls du immer noch Probleme haben solltest, melde dich gerne!
Hallo Denis,
vielen lieben Dank für Deine schnelle und ausführliche Antwort sowie die Zeit, die Du Dir genommen hast. Ich hatte Dir gestern schon geschrieben, aber ich glaube, das hat leider nicht geklappt. Daher jetzt noch einmal, denn mir ist das Ganze noch immer nicht vollumfänglich klar 🙂 .
Erst einmal zum besseren Verständnis: Ich verstehe es so, dass ich beide Steps durchführen muss: Den Antispambot-Code UND den Shortcode, damit die Verschlüsselung funktioniert?
1. Ja genau, ich meinte die erste Codezeile in Deinem Beitrag . Wo wird diese hinterlegt (natürlich mit meiner eigenen E-Mail-Adresse), wenn ich meine E-Mail-Adresse nur im Impressum und auf der Kontaktseite hinterlegt habe? Dann doch nicht in die footer.php?
2. Richtig, den Code für die Erstellung des Shortcodes, um die E-Mail z. B. mit [email]denis@wpcorner.de[/email] zu verschlüsseln, habe ich in die functions.php eingefügt.
3. Oh, ich glaube, ich verwechsele da etwas. Ich habe Deine E-Mail-Adresse im Impressum über den Firebug untersucht und gesehen, dass diese dort nicht verschlüsselt ist. Aber die Bots crawlen über den Seitenquelltext und das ist wieder etwas anderes, oder?
Ich hoffe, Du verstehst in etwa, was ich fragen will, und freue mich auf Deine Nachricht bzw. Meinung hierzu.
Viele Grüße
Dirk
Hi Dirk,
entschuldige, ich bin einfach noch nicht dazu gekommen den Kommentar freizuschalten und darauf zu antworten.
1.) wenn du die E-Mail-Adresse nur auf bestimmten Seiten / Beiträgen anzeigen lassen möchtest, könntest du über die single.php bzw. page.php eine entsprechende Abfrage für die jeweilige Seite erstellen. Das ist aber etwas fortgeschrittener und komplizierter, weshalb du diesen Punkt am besten übergehen solltest. Das erste Codebeispiel soll primär tatsächlich verwendet werden, wenn die Adresse an einer bestimmten Stelle im Theme über alle Unterseiten hinweg angezeigt werden soll (wie z.B. Header oder Footer). Lassen wir den Punkt also ganz weg, denn es geht ja auch anders 🙂
2.) Code ist in der functions.php und damit wurde auch der entsprechende Shortcode angelegt. Alles was du jetzt noch machen musst, ist dein Impressum / Kontaktseite zu bearbeiten und im WordPress-Editor einfach den Shortcode „[email]“ vor deine E-Mail-Adresse zu setzen und mit „[/email]“ nach deiner E-Mail-Adresse abzuschließen. Analog zum Beispiel mit meiner Adresse.
Hast du das getan, speicherst du den Beitrag ganz normal ab und deine E-Mail-Adresse sollte verschlüsselt sein. Um das zu überprüfen kannst du anschließend dein Impressum aufrufen und dir den Seitenquelltext anzeigen lassen. Im Firefox geht das über Rechtsklick -> „Seitenquelltet anzeigen“. Hier kannst du jetzt nach deiner Adresse suchen und solltest sie nicht mehr im Klartext vorfinden können.
3.) Genau, sind 2 leicht verschiedene Dinge, da der Debugger das HTML bereits interpretiert und somit auch deine E-Mail-Adresse dekodiert. Zum Test kannst du das gerne auf WPcorner.de nachvollziehen mit der E-Mail-Adresse in der oberen Topmenü-Zeile, neben der Telefonnummer. Im Debugger steht sie im Klartext drin, wenn du dir den Seitenquelltext anzeigen lässt und nach der Telefonnummer suchst, wirst du eine Zeile drunter ein span-Container mit der ID „et-info-mail“ vorfinden, in welchem die Adresse verschlüsselt im HTML steht.
Bevor du dich aber zu tief reinsteigerst, kannst du auch das von mir vorgestellte Plugin benutzen. Ich habe das selbst auf WPcorner im Einsatz, da es vollautomatisch jedes Vorkommen einer E-Mail-Adresse verschlüsselt. So kann es nicht passieren, dass du den Shortcode vergisst einzusetzen und die Adresse doch im Klartext im Quellcode landet.
Du kannst mir auch gerne eine E-Mail mit der URL zu deiner Seite schreiben, dann kann ich mir das genauer anschauen.
Liebe Grüße,
Denis
Hallo Denis,
super, mit dem Code in der functions.php und dem Shortcode im Editor hat alles wunderbar geklappt 🙂 ! Ich danke Dir für Deine ausführliche und wirklich verständliche Erklärung. Das findet man nicht oft! Ich werde nun immer mal wieder auf Deiner Website vorbeischauen; macht Spaß 🙂 !
Liebe Grüße
Dirk
Hi Dirk,
gar kein Problem, dafür bin ich ja da 🙂
Liebe Grüße,
Denis
Moin Denis,
Danke für die Anleitung, klappt gut!
Darf ich noch erfahren, warum Du selber keine Verschleierungs-Technik zu Deiner info@ einsetzt?
Ich konnte die im Quellcode als Klartext sehr leicht finden.
Schönen Gruss,
Sascha
Hallo Sascha,
die E-Mail-Adresse wird bei uns verschlüsselt. Einzig in den Descriptions (für Facebook, Twitter, Suchmaschinen etc.) ist sie unverschlüsselt, da hast du recht. Evtl. werden wir das ändern, aktuell haben wir aber Gott sei Dank noch keine Spam-Probleme gehabt 🙂
Liebe Grüße,
Denis
Es gibt seit kurzem auch eine Premium-version des Email Address Encoders. Die ist wesentlich schlauer und hat ein mehr Funktionen als die kostenlose version.
https://encoder.till.im
Hallo Denis,
nachdem ich das Plugin „Email Address Encoder“ einige Zeit benutzt habe (blöd wie ich bin: blind vertrauend), habe ich neulich mal wieder den Quelltext angeschaut — und konnte meine eMail-Adresse dort im Klartext lesen. So ganz out-of-the-box ist das Plugin offenbar nicht …
Nachdem das Plugin nun eine Unverträglichkeit mit einem DGSVO-Plugin anmeckert, das ich nicht aussortieren werde, habe ich „Email Address Encoder“ deaktiviert — und suche nach einem Ersatz.
Nun bin ich auf Deinen Artikel zur antispambot()-Funktion gestossen und habe es ausprobiert:
1. Ich habe die Funktion in die functions.php des Child Themes eingebaut.
2. Ich habe den Shortcode [email]info@domain.de[/email] im Editor verwendet.
Im Ergebnis wurde im Frontend [email]info@domain.de[/email] ausgegeben.
Natürlich liegt der Fehler bei mir, das ist klar. Ich finde ihn jedoch nicht.
Fazit: Ich habe bisher keinen einfachen und zuverlässigen Weg gefunden, eMail-Adressen auf WordPress-Webseiten zu verschlüsseln.
Mit freundlichem Gruss
Frank J.
Lieber Denis,
ich hatte das mit dem „Shortcode für den Editor erstellen“ probiert
also in die function.php dieses:
function wpcorner_hide_email_shortcode( $atts , $content = null ) {
if ( ! is_email( $content ) ) {
return;
}
return ‚‚ . antispambot( $content ) . ‚‚;
}
add_shortcode( ‚email‘, ‚wpcorner_hide_email_shortcode‘ );
und direkt im WP-Editor:
[email]mustermann@mustersite.de[/email]
Lese ich den ausgegebenen Quellcode in Firefox, wird da aber lediglich zusätzlich ein mailto angefügt, die Mailadresse ist aber die ursprüngliche – ich hätte irgendwas kryptisches erwartet? Hab ich irgendwas vergessen? Oder soll das so? Bzw. wie kann ich überprüfen, dass es greift?
Liebe Grüße, Lisa
Guten Tag,
klasse Funktion! Ist es möglich eine Link-Farbe abweichend von der Standardfarbe für Link zu benutzen?
Danke und beste Grüße.
Arno
Hallo, das ist eine super Anleitung – Danke erstmal dafür.
Ich habe den Code für den Shortcode in die functions.php kopiert.
Danach im (neuen) Guttenberg-Editor In einem ganz normalen Textblock die Zeile [email]blalba@blalblalb.de[/email] eingegeben.
-> Das wird leider nicht umgewandelt, sondern 1:1 genau so ausgegeben.
Was muss ich dort anders machen?
Danke schonmal und Grüße
Sabine