Website-Icon Webdesign-Podcast

Fake-Mails in den Müll – PHP ist die Lösung (Email-Validation)

Wie oft passiert euch das?
Ihr geht auf eure Seite und seht User mit irgendwelchen komischen Fake-Mail Adressen?
Tja, Fake-Mails haben sich durchgesetzt.

In diesem Artikel möchte ich euch einmal zeigen wie man anhand einer bekannten Liste und PHP sogenannte „Spammails“ erkennt.

Doch zu aller erst…

Was sind Fake-Mails?

Fake-Mails sind E-Mail Adressen die dazu gedacht sind, für Seiten genutzt zu werden, die einem oft Mails schicken.
Bei einer solchen Fake-Mail hat man meinst eine zufällige E-Mail Adresse, die man ohne Passwort aufrufen kann und deren Postfach nach einer bestimmten
Zeit gelöscht wird.

Wozu nutzen User diese?

Nutzer möchten nicht immer Spam per Mail bekommen.
Das ist der Grundgedanke. Aber heutzutage benutzen viele diese Adressen um Seiten zu zuspammen,
sich nach einer Sperrung neu zu registrieren oder einfach nur um zu nerven.

Gibt es gegen Fake-Mail einen Schutz?

Jaein, wie ich im nächsten Abschnitt zeige kann man sich einen Schutz bauen, aber es wird immer neue Anbieter für Fake-Mails mit immer neueren Domains geben.
Ein 100%iger Schutz ist somit unmöglich.

Fake-Mails in PHP erkennen

Jetzt zum eigentlichen PHP Code.
Die Quelle unserer Fake-Mail Domains ist Mogelmail.
Diese Seite bietet euch eine Liste mit bekannten Fake-Mail Domains, welche ständig geupdated wird.
Hier findet ihr die Liste der auf Mogelmail.de gesammelten Domains als XML.
Diesen Code wollen wir nun auslesen und mit Hilfe einer Funktion zum überprüfen nutzen.

Als erstes definieren wir die Funktion:

function checkMail($host) {

}

Nun laden wir uns das XML herunter:

$xml = file_get_contents('http://www.mogelmail.de/mogelmails.xml');

Als nächstes instanziieren wir SimpleXML um das XML lesen zu können:

$simpleXML = simplexml_load_string($xml);

Nun suchen wir die Domain.
Aber wie? Dazu nutzen wir XPath.
XPath ist, man könnte sagen eine „Suche“.
Über XPath können wir nach Elementen mit bestimmten Namen, Werten und Attributen suchen.
Infos zu XPath und eine Anleitung findet ihr hier

Nun zu unserem Code:

$elements = $xml->xpath('/domainlist/domainitem[domain="' . $host . '"]/domain');

Ich erkläre euch den Code erst einmal:

Nun wird geprüft ob die Domain vorhanden ist und das Ergebnis zurückgegeben:

return (bool) count($elements);

Eine kurze Erklärung:

Unser endgültiger Code für die Funktion sieht nun so aus:

function checkMail($host) {
	$xml = file_get_contents('http://www.mogelmail.de/mogelmails.xml');
	$simpleXML = simplexml_load_string($xml);
	
	$elements = $xml->xpath('/domainlist/domainitem[domain="' . $host . '"]/domain');
	return (bool) count($elements);
}

Nun müsst ihr eure E-Mail Adressen nur noch vor dem Eintragen in eure Datenbank prüfen:

if (checkMail($eMail)) {
	// Hier euer Code
}

Ein kleiner Tipp am Rande

Um einen Host aus einer E-Mail Adresse zu gewinnen kann man die Funktion parse_url() nutzen.
Dies sähe etwa so aus:

$array = parse_url($eMail);

Nun erhaltet ihr einen Array.
Der Schlüssel „host“ dieses Arrays ist der Host der E-Mail Adresse.

Weitere Informationen zu dieser Funktion findet ihr hier.

Schlusswort

Ihr könnt nun mit PHP bekannte Fake-Mails enttarnen und so dafür sorgen, dass eure User sich nicht hinter falschen Adressen verstecken.
Achtet aber darauf, dass dies manchen Usern nicht gefallen wird, da diese wirklich keine E-Mails von euch wollen. Bietet diesen eine Funktion um
Newsletter, etc. abzustellen, damit es auf beiden Seiten fair bleibt.

Ich freue mich natürlich über Kritik und Kommentare aller Art.
Bis dahin,
mit freundlichen Grüßen,

Justin Nuß

Die mobile Version verlassen