PHP. Domain oder MX Prüfung für Eingabe

Domi83

Rear Admiral
Registriert
Feb. 2010
Beiträge
5.418
Hallo Leute, ich hoffe mal ich konnte anhand meines Topics schon erklären WAS ich eigentlich vor habe :)

Mein Kollege und ich sollen eine Eingabemaske bauen, es kommt beim Feld "Email" gerne mal dazu, dass die Adresse falsch ist. Und im Regelfall ist es dann die Domain die Falsch ist. @tonline.de oder @t-onlinede sind da schon mal gerne gesehen :)

Mein Chef wollte dann, dass man prüft ob ein Punkt in der Adresse drin ist, doof ist nur wenn man "vorname.nachname@..." als Email Adresse hat :D So hab ich dann überlegt das man vielleicht prüft ob der TLD richtig sitzt (z.B. .de, .com, .net etc.) dann würde ich bei unserem Domain-Reseller alle Endungen rausziehen, in eine Datenbank stecken und das abgleichen. Aber Interessanter wäre ja, wenn man gleich prüfen kann ob die genannte Domain ein MX hat, oder ob da überhaupt Emails eingehen können.

Sprich, klaus.peter@computerbase.de trägt sich bei uns im System ein, somit soll ein PHP Skript prüfen ob computerbase.de überhaupt existiert. Oder ob es da halt ein MX gibt!

Ich weiß, dass ist kein 100% Schutz, wenn das Postfach nun falsch ist, aber die Domain richtig ist geht es ja auch nicht, aber man schon mal einen kleinen Schutz :) Kann man das nachvollziehen oder verstehen wie ich das meine? :)

Mfg. Domi
 
Ich denke genau für sowas gibt es Bestätigungsmails wo der User aktiv bestätigen muss! Sonst wirst du niemals 100%ige Sicherheit erreichen, dass die Mail stimmt!
 
Die TLD mit gültigem MX-Record kannst du mit getmxrr prüfen.
 
ich stimme kaiuwe zu, ein aktiver optin ist immer angebracht, schon um mißbrauch einer email adresse durch dritte zu verhindern
trotzdem kann man für die erste validierung einen synthax check machen:

PHP:
<?php 

$email = "someone@example.com"; 

if(preg_match ("/^[\w\.-]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]+$/", $email)) { 
  echo "Valid email address."; 
} 
else { 
  echo "Invalid email address."; 
} 

?>
 
Es gibt auch JavaScript Form Validation für E-Mail! Hier z.B.
Ansonsten auch nie vergessen auf Injection zu prüfen! Sowas in etwa:
PHP:
function IsInjected($str)
{
  $injections = array('(\n+)',
              '(\r+)',
              '(\t+)',
              '(%0A+)',
              '(%0D+)',
              '(%08+)',
              '(%09+)'
              );
  $inject = join('|', $injections);
  $inject = "/$inject/i";
  if(preg_match($inject,$str))
    {
    return true;
  }
  else
    {
    return false;
  }
}
 
Zuletzt bearbeitet:
Bitte sehr:

Code:
<script language="javascript">
function emailtest() {
        email = document.formular.FROM.value;
        if((email.indexOf("@") != -1) && (email.indexOf(".") != -1)) {
                document.formular.email.value = email;
                document.formular.submit();
        }
        else
                alert("Ihre eMail Adresse ist nicht korrekt!");
}
</script>
 
z.B. Saubere Lösung mit JS und RegEx:
Code:
function validateEmail(email)
{
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null )
    {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null)
    {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null) 
      {
	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
	    if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
    }
return false;
}
 
Zuletzt bearbeitet:
Okay, also da hier ja schon das Optin Verfahren erwähnt worden ist, geht der eine oder andere von einem Newsletter aus.. denke ich mal. Es geht aber ehr um eine Buchungsmaske für Versicherungen.

Wenn nun Oma Käte via Opt-In bestätigen soll, ob sie die Versicherung wirklich will weil die Email Adresse geprüft wird, dann bekommt die eine Macke :D Aber schon mal vielen Dank für die Tipps, dass werde ich gleich mal ausprobieren :)

Nachtrag: Gut, scheint zu funktionieren :) Es reicht ja, wenn der MX oder der A beim senden geprüft wird, wenn es dann auf die Prüfungs-Seite geht, wo der Kunde dann alle seine Daten noch mal durch gucken soll / muss. Hab da eben mal ganz stumpf was hin gewischt :)
PHP:
<?php
 $typ = "MX";

 $host = 'name@gmx.de';
 $host = explode('@', $host);
 $host = $host[1];

 if(checkdnsrr(($host), $typ)) {
  echo $host.' - '.$typ.' funktioniert!';
 } else {
  echo $host.' - '.$typ.' funktioniert nicht!';;
 }
?>
Ich denke mal, so etwas reicht schon aus für den "kleinen" Zweck. Ich mache das dann noch etwas schöner und gut.
 
Zuletzt bearbeitet:
Zurück
Oben