Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   E-Mailadresse auf Gültigkeit überprüfen (https://www.delphipraxis.net/134400-e-mailadresse-auf-gueltigkeit-ueberpruefen.html)

Synollus 21. Mai 2009 12:35


E-Mailadresse auf Gültigkeit überprüfen
 
Ich suche keinen Standard-Code, um zu testen, ob ein @ im String der E-Mailadresse ist.

Die Seite http://reisen.gewinneronline.de zum Beispiel kann erkennen, ob eine E-Mail gültig ist. Aber er überprüft nicht nur, ob der Provider existiert, sondern auch, ob genau diese E-Mail existiert.

Bei Mustermann@gmx.de würde er z.B. annehmen, MaxMustermann6789@gmx.de nicht (nehme ich mal an, da die nicht existiert :mrgreen:).

Ich verstehe nicht, wie die das umsetzen und ich kann sowas sehr gut gebrauchen. Bei Google findet man halt immer nur diese Standard-Codes in PHP.

Nach was muss ich denn suchen?

himitsu 21. Mai 2009 12:39

Re: E-Mailadresse auf Gültigkeit überprüfen
 
da wirst du dich vermutlich einfach mal mit den eMail-Protokollen auseinandersetzen müssen
und dann eine Anfrage an das gewünschte Postfach bzw. den Server abschicken und fragen, ob dieses Fach auch existiere :angel:

TurboMartin 21. Mai 2009 12:58

Re: E-Mailadresse auf Gültigkeit überprüfen
 
Mithilfe von regulären Ausdrücken:
Code:
^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$
Nach RFC 28222 ist eine Email-Adresse:
Code:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

Synollus 21. Mai 2009 13:02

Re: E-Mailadresse auf Gültigkeit überprüfen
 
Zitat:

Zitat von TurboMartin
Mithilfe von regulären Ausdrücken:
Code:
^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$

Vielleicht solltest du nochmal den Start-Post lesen. ;) Das kann ich selber. Aber man kann auch E-Mails überprüfen, ob sie 100 %ig existieren, oder ob es den "Usernamen" bei dem Host gar nicht gibt.

@himitsu: Dafür habe ich momentan keine Zeit das alles selbst zu machen, da ich mich mit E-Mail-Protokollen auch noch nie beschäftigt habe. Ich bin auch bereit ein vernünftiges, funktionierendes Script käuflich zu erwerben.

fkerber 21. Mai 2009 13:19

Re: E-Mailadresse auf Gültigkeit überprüfen
 
Hi!

Afair gibt es im SMTP-Protokoll ein Verify-Command - allerdings wird das Vorhaben vermutlich scheitern, da dieses nicht von allen Servern unterstützt wird.


Ciao, Frederic

Synollus 21. Mai 2009 13:38

Re: E-Mailadresse auf Gültigkeit überprüfen
 
Danke fkerber.

http://the-welters.com/professional/smtp.html

Dort habe ich eine schöne Übersicht gefunden über die einzelnen Befehle. Aber 2 abschließende Fragen habe ich noch:

1. Die Befehle kann ich bei Telnet eingeben. Wie soll ich das in PHP machen? :stupid:

2. Wenn ein Mailserver diese Überprüfung nicht zulässt, unterscheidet sich die Antwort "Erlaube ich nicht" von der Antwort "Mail gibt es nicht" oder gibt er in beiden Fällen nur ein False zurück?

SirThornberry 21. Mai 2009 14:00

Re: E-Mailadresse auf Gültigkeit überprüfen
 
unbekannte Kommandos werden in aller Regel anders beantwortet als vorhandene.
Die angeggebene Methode funktioniert übrigens nur bedingt. Ist beispielsweise Catchall im Einsatz wirst du immer zurück bekommen das die Adresse gültig ist. Und ganz ehrlich - selbst ohne catchall würde ich bei meinem Mailserver derartige Anfragen blockieren da dort Spamverdacht herscht.

alcaeus 21. Mai 2009 15:48

Re: E-Mailadresse auf Gültigkeit überprüfen
 
@synollus: Guck dir mal die PHP-Befehle fsockopen, fwrite, fread und fclose an. Damit kannst du auch Socket-Kommunikation zu einem entfernten Server realisieren.
Andere Alternative: irgendeine Mail-Klasse (z.B. die SWIFT-Library) runterladen um zu vermeiden, dass du die SMTP-Kommunikation selbst implementieren musst.

Aber kurzum: du kannst nicht 100%ig feststellen, ob eine E-Mail-Adresse existiert. Dafuer gibt es mehrere Gruende:
  • Ein Verify-Request muss nicht unbedingt akzeptiert werden - im Gegenteil, viele Mail-Server schlucken einfach alles und schicken teilweise keine Fehlermeldungen mehr raus, damit Mail-Adressen nicht verifiziert werden koennen (Stichwort Spam)
  • Wenn ein Verify-Request fehlschlaegt kann man nicht davon ausgehn, dass die Adresse nicht existiert. Beispielsweise kann auch grad der MTA down sein.
  • Wenn der Server nicht erreichbar ist, muss nicht sein dass er nicht existiert - es kann auch sein dass er momentan nicht erreichbar ist.
  • Wenn ein Server in den Lookup-Tables nicht vorhanden ist, ist zwar wahrscheinlich dass er nicht existiert, aber es ist nicht sicher. Kann ja auch ein Routing- oder anderes Problem sein
  • Wenn eine Test-Mail beim ersten Versuch nicht zugestellt wird, heisst das nicht dass der Account nicht existiert. Viele MTAs verlangen mittlerweile einen zweiten Zustellversuch um Spam-Bots durcheinanderzubringen
  • Wenn nach einer Test-Mail kein Fehler zurueckkommt, heisst es nicht immer dass sie auch tatsaechlich in einem Postfach landet. So kann z.B. ein Catchall eingerichtet werden, der alle Mails ausser jenen, die an einzelne Adressen gehn direkt nach /dev/null schiebt
  • Wenn nach einer Test-Mail kein Fehler zurueckkommt kann das auch heissen, dass die Mail abgelehnt wird, der Server aber keine Meldung gibt um keine Informationen ueber die Adresse bekanntzugeben.

Kurzum: du kannst nicht 100%ig wissen, ob eine Adresse existiert. Deshalb wird bei einer Registrierung auch eine Mail mit Aktivierungslink verschickt, bei vielen Webseiten wird der Account auch geloescht, wenn er nicht innerhalb einer bestimmten Zeit aktiviert wird.

@TurboMartin: Mich wuerde interessieren, wo du die Regexp herhast - es gibt naemlich jede Menge RegEchsen, die behaupten sie wuerden E-Mail-Adressen validieren, allerdings ist mir bisher noch keine einzige (und ich hab viele davon schon gesehn) untergekommen, die die RFC-Spezifikation wirklich zu 100% implementiert ohne gleichzeitig auch wieder ungueltige Adressen zuzulassen.
In deinem Fall bin ich zu Faul das Ding durchzugehn, allerdings laesst das Fehlen von Look-Ahead oder Look-Behind-Teilen darauf schliessen, dass auch sowas akzeptiert wird: abc"@foo.com, was eigentlich keine Gueltige Adresse ist. Genauso wird folgende Adresse:
Code:
FooBar <foobar@foo.com>
wohl nicht akzeptiert, obwohl es eigentlich eine gueltige Adresse darstellt. Das bewahrheitet mal wieder die These, dass es eigentlich keine Regular Expression gibt, die eine Mail-Adresse haargenau nach der RFC-Spezifikation implementiert, ohne false positives oder false negatives zu produzieren ;)

Greetz
alcaeus

fkerber 21. Mai 2009 16:01

Re: E-Mailadresse auf Gültigkeit überprüfen
 
Hi!

Ich habe die RegEx mal kurz durch ein paar Tester gehauen.
Er erkennt abc"@foo.com als fehlerhaft und "filtert" aus FooBar <foobar@foo.com> zumindest die gültige Adresse raus, was ja an sich ausreicht...


Ciao, Frederic

himitsu 21. Mai 2009 16:11

Re: E-Mailadresse auf Gültigkeit überprüfen
 
Diese RegEx filtert also scheinbar eine richtige Mail aus einem String, validiert diesen selber aber nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:18 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz