E-Mail-Adresse verschleiern
Baut aus eurer Adresse einen Code, der den Mailto-Link erst im Browser zusammensetzt — für Sammelprogramme steht dort nichts Lesbares.
Wer seine E-Mail-Adresse offen auf eine Webseite schreibt, bekommt Post — nur leider von den falschen. Sogenannte Harvester klappern Seiten ab und sammeln alles ein, was nach einer Adresse aussieht. Der klassische Gegenzug: Die Adresse steht nirgends im Quelltext, sondern wird erst beim Anzeigen der Seite aus Einzelteilen zusammengesetzt. Genau diesen Code erzeugt euch dieses Script.
Tragt eure Adresse ein, wahlweise einen Linktext und einen vorbelegten Betreff, und klickt auf „Code erzeugen". Ihr bekommt zwei Dinge: eine Vorschau des fertigen Links, den ihr gleich ausprobieren könnt, und darunter den Code zum Kopieren. Dieser Code kommt an die Stelle eurer Seite, an der der Link stehen soll. Im Quelltext steht dann nur noch eine Zahlenreihe — die Adresse selbst taucht dort nirgends auf.
Ein Wort zur Ehrlichkeit: Das ist eine Hürde, kein Schloss. Ein Sammelprogramm, das JavaScript ausführt, kommt an die Adresse heran — die einfachen, die nur den Quelltext durchsuchen, kommen nicht heran, und das ist noch immer die Mehrheit. Die Verschleierung senkt die Spam-Menge spürbar, ersetzt aber keinen Spamfilter. Und sie hat einen Preis: Wer JavaScript abgeschaltet hat, sieht den Link nicht. Deshalb erzeugt das Script zusätzlich einen Ersatztext, der in diesem Fall erscheint.
Verwandtes findet ihr im Bereich Verschlüsselungen — die Umwandlung in Zeichencodes ist mit der ROT13-Verschiebung verwandt, nur dass hier nicht verschlüsselt, sondern lediglich unkenntlich gemacht wird. Ein echtes Geheimnis lässt sich so nicht schützen.
Alles läuft in eurem Browser — die Adresse wird nicht an uns übertragen.
So funktioniert das Script
Das Script tut zwei Dinge: Es baut aus euren Eingaben einen fertigen Mailto-Link für die Vorschau, und es setzt einen zweiten, verschleierten Bauplan desselben Links als Text zusammen. Der Kern ist die Umwandlung der Adresse in Zahlen.
function inCodes(text) {
const teile = [];
for (let i = 0; i < text.length; i++) {
teile.push(text.charCodeAt(i));
}
return teile.join(",");
}
charCodeAt(i) liefert die Nummer, unter der ein Zeichen im Zeichensatz geführt wird: „a" ist 97, „@" ist 64, der Punkt ist 46. Die Schleife läuft über alle Zeichen und sammelt die Nummern ein. Aus post@beispiel.de wird so eine Kette wie 112,111,115,116,64,… — für ein Sammelprogramm, das nach dem Muster „Text, Klammeraffe, Text, Punkt, Text" sucht, ist da nichts zu holen.
var ziel = String.fromCharCode.apply(String, teile);
Diese Zeile steht im erzeugten Code und macht die Umwandlung rückgängig. String.fromCharCode(112, 111, 115) ergibt „pos". Weil die Nummern aber in einem Array liegen und nicht einzeln aufgezählt sind, kommt apply zum Einsatz: Es ruft eine Funktion auf und breitet dabei ein Array zu einzelnen Argumenten aus. In modernem JavaScript schriebe man dafür String.fromCharCode(...teile) — die apply-Form steht hier bewusst, weil der erzeugte Code auch auf sehr alten Browsern laufen soll, die auf fremden Seiten noch unterwegs sind.
<span id="mailto-ziel">Schreibt uns (JavaScript nötig)</span>
Das ist der Platzhalter, den der erzeugte Code in die Seite schreibt. Er ist der Grund, warum die Verschleierung niemanden aussperrt: Wer JavaScript abgeschaltet hat, sieht wenigstens den Hinweis statt einer leeren Stelle. Das Script ersetzt den Inhalt anschließend durch den echten Link.
const ziel = betreff === ""
? "mailto:" + adresse
: "mailto:" + adresse + "?subject=" + encodeURIComponent(betreff);
Ein Mailto-Link kann mehr als nur die Adresse: Nach einem Fragezeichen lassen sich Betreff und sogar ein Textentwurf mitgeben. encodeURIComponent ist dabei Pflicht — es schreibt Leerzeichen, Umlaute und Sonderzeichen in eine Form um, die in einer Adresszeile erlaubt ist. Ohne diesen Schritt würde ein Betreff mit Leerzeichen den Link zerreißen.
"<\/script>"
Ein Detail, über das jeder einmal stolpert: Ein schließendes Script-Tag darf nicht als solches in einer Zeichenkette stehen, denn der Browser sucht beim Einlesen stur nach dieser Zeichenfolge und würde das Script an dieser Stelle beenden — mitten im String. Der zusätzliche Schrägstrich verhindert das, ohne den Inhalt zu verändern.
Zum Anpassen: Wollt ihr statt der Zeichencodes eine andere Verschleierung, ersetzt inCodes etwa durch eine ROT13-Verschiebung; der erzeugte Code muss sie dann spiegelbildlich zurückdrehen. Und wenn im Platzhalter kein Ersatztext erscheinen soll, kürzt ihr im Array zeilen einfach die erste Zeile.
Script für die eigene Homepage
Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.