<?php
function isValidMail($email, $banList = null) {
//Reguläre Ausdrücke für Emails
$EmailPattern = '#^[a-zA-Z0-9_.-]+@([a-zA-Z0-9_.-]+\.)+[a-zA-Z]{2,4}$#si';
$DomainPattern = '([a-zA-Z0-9_.-]+\.)+[a-zA-Z]{2,4}';
$NamePatter = '[a-zA-Z0-9_.-]+';
$email = trim($email);
//Überprüft die Emailadresse
if (!preg_match($EmailPattern, $email)) {
return false;
}
//Wenn die Email richtig war und eine bestimmte Banliste gesetzt wurde.
if (!is_null($banList)) {
if (is_array($banList)) {
foreach($banList AS $banEmail) {
//Prüft ob die Email gebannt wurde.
if (preg_match($banEmail, $email)) {
return false;
}
}
}
else {
//Bereitet die Email auf.
$banEmail = addcslashes($banList, ".");
$banEmail = preg_replace('#\{name\}#si', $NamePatter, $banEmail);
$banEmail = preg_replace('#\{domain\}#si', $DomainPattern, $banEmail);
$banEmail = "#^".$banEmail."$#si";
//Prüft ob die Email gebannt wurde.
if (preg_match($banEmail, $email)) {
return false;
}
}
}
return true;
}
?>
Diese Funktion überprüft eine Email, ob sie überhaupt existieren kann, und dannach auf, von euch bestimmte Emails, die nicht erwünscht sind. Und das passiert in drei Typen.
1. Die ganze Email: webmaster@test.de speert auch nur webmaster@test.de oder Webmaster@test.de usw.
2. Nur mit einem bestimmten Namen von allen Anbietern:
webmaster@{domain} speert Emails wie: webmaster@gmx.de webmaster@gmail.com webmaster@web.de
3. Alle von einem bestimmten Anbieter:
{name}@gmx.de speert alle Emails die von gmx.de gesendet werden könnten.
Die Anwendung ist relativ simpel. Der erste Parameter enthält die Email, die überprüft werden soll, die Zweite enthält die Emails die gespeert wurden. Dies kann eine Einzelne sein, oder mehrer.
Ist alles Inordnung mit der Email, gibt die Funktion true (wahr/1) zurück. Ist die Email von euch gebannt worden, oder nicht korrekt, gibt die Funktion false (unwahr/0) zurück.
//Eine Email speeren.
if (!isValidMail($email, '{name}@ro.tk.ru')) {
echo 'Sie haben eine falsche oder gebannte Emailadresse angeben.';
}//Speert alle emails die auf ro.tk.ru enden.
//Mehrer Emails speeren.
$ban = array('{name}@ro.tk.ru', 'spammer@{domain}', 'webmaster@gmx.de');
if (!isValidMail($email, $ban)) {
echo 'Sie haben eine falsche oder gebannte Emailadresse angeben.';
}
/* Speert alle emails die mit spammer@ anfangen oder auf @ro.tk.ru enden, oder die Email webmaster@gmx.de */
?>
An diese Funktion muss ein Parameter übergeben werden. Nämlich die Email zum überprüfen. Solltet ihr keine Emails bannen wollen, so lasst den zweiten Parameter leer. Ruft die Funktion in dem Fall in folgender Form auf:
PHP
1:
2:
3:
4:
5:
6:
7:
<?php
$email = $_POST['email'];
if (!isValidMail($email)) {
echo 'Ihre Email kann nicht exestieren';
}
//Die Email ist nicht existentsfähig, da es eine Spaßemail ist, oder ein Text oder sonst was, nur keine Email.
?>
--Update--
1.0.1 Hab vergessen den Punkt zu maskieren für die Regpex, dies wird jetzt gemacht und so steht der Punkt nicht mehr für ein Beliebiges Zeichen.
Unötige Variabel gelöscht.
1.0.2 Emailpattern überarbeitet so das auch - und . erkannt wird.
1.0.3 "#^$banMail$#si" in "#^".$banMail."$#si" geändert. (Kleiner Preformancesunterschied)
Post wurde schon 11x editiert, das letzte mal am 10.01.2008 um 18:08 von Teralios
sach mal kann man die E-Mailadressen nicht in ner DB abspeichern, und dann einfach in dem Script abfragen lassen? Dann könnt ich das in meinem Gb mit ins Admin Panel und Mod Panel intregrieren, und es währe leichter e-mailadressen einzutragen die gebannt werden sollen.
Das ist exta eine Funktion die über Variabeln gesteuert wird, du kannst somit ein array erstellen mit den Emails die gebannt werden, woher das array kommt ist dabei egal.
if(!isValidMail($email, $banmails)) {
echo 'Ihre Email ist ungültig oder gebannt';
}
?>
wie ihr das Array erstellt, was als zweiten Parameter übergebt ist doch vollkommen egal. Die gebannten Emails müssen nur als Numerisches Array übergeben werden an die Funktion:
Das ist die einige Form die eingehalten werden muss. Entweder nur eine Email => Direkt eingabe oder direkt Variabel, oder ein Array, welches all die gebannten Emails enthält. Das darf aber nicht assozativ sein.
Post wurde schon 1x editiert, das letzte mal am 05.01.2009 um 21:30 von Teralios
erstmal danke GameR für die coole Funktion. Hat bei mir schon echt einiges gebracht.
Nun aber meine Frage:
Wenn ich z.B. die E-Mail-Adresse "beispiel@exa-mple.com" eingebe, sagt mir die Funktion, dass die E-Mail-Adresse ungültig ist. Wenn ich aber "beispiel@example.com" eingebe, dann ist sie gültig.
Wie muss ich den "EmailPattern" da verändern, dass Bindestriche in der Domain erlaubt sind?
Gruß
Post wurde schon 2x editiert, das letzte mal am 06.11.2007 um 20:48 von Andavos
16.08.2007, 11:53
Teralios
Moderator
Perfekter User
Dabei seit: 18.09.2005
Herkunft: Berlin
Posts: 2542
erstmal danke GameR für die coole Funktion. Hat bei mir schon echt einiges gebracht.
Nun aber meine Frage:
Wenn ich z.B. die E-Mail-Adresse "beispiel@exa-mple.com" eingebe, sagt mir die Funktion, dass die E-Mail-Adresse ungültig ist. Wenn ich aber "beispiel@example.com" eingebe, dann ist sie gültig.
Wie muss ich den "EmailPattern" da verändern, dass Bindestriche in der Domain erlaubt sind?
Gruß
Danke für den Hinweis, ich habs direkt überarbeitet.
in [a-zA-Z0-9_] gehört noch ein - oder .- damit das sieht dann so aus [a-zA-Z0-9_.-] dann erkennt er auch Emails mit - dazwischen.
danke für den Hinweis.
Post wurde schon 2x editiert, das letzte mal am 06.11.2007 um 20:48 von Andavos
ich möchte NUR überprüfen ob die Endung auf der Bannliste steht, sprich erlaubt ist:
.de, .com, .org, .net, .at, .ch, .biz
alle anderen Endungen dürfen NICHT verwended werden.
Ich möchte mein Forumal etwas sicherer machen gegen Spambots, erst wird mit JavaScript geprüft und dann nochmals mit php und ein Capcha, alles funzt bis auf das mit der e-mailendungen in php
ich möchte NUR überprüfen ob die Endung auf der Bannliste steht, sprich erlaubt ist:
.de, .com, .org, .net, .at, .ch, .biz
alle anderen Endungen dürfen NICHT verwended werden.
Ich möchte mein Forumal etwas sicherer machen gegen Spambots, erst wird mit JavaScript geprüft und dann nochmals mit php und ein Capcha, alles funzt bis auf das mit der e-mailendungen in php