# Mailadressen überprüfung



## FsMarine (18. Aug 2005)

Hi,

ich wollte ein kleines Programm schreiben das es mir ermöglicht bei der angabe der Ziel Mail adresse herauszufinden
ob die E-Mail Adresse Gültig ist...

Also, ob erstens die domain bekannt ist und zweitens, ob die E-mail Adresse auch existiert...

Kennt ihr da was mir vielleicht weiter helfen könnte ?
oder kennt ihr ausführliches Material um mich mit dem Stoff zu beschäftigen ?

wäre dankbar für hilfe


----------



## byte (18. Aug 2005)

also rausfinden ob ne email adresse existiert, ist imo nicht ohne weiteres möglich. provider prüfen ist wohl bedingt möglich, indem du z.b. die domain anpingst. aber dann weisst du immernoch nicht, ob da auch ein mailserver dranhängt.

wenn das möglich wäre, dann hätten spamverteiler leichtes spiel ... (noch leichteres)


----------



## DP (18. Aug 2005)

schick die mail einfach los und bei einer messagingexeption etc. ist die adresse ungültig


----------



## FsMarine (18. Aug 2005)

ja, aber es soll keine mail verschickt werden, die mail adresse soll nur überprüft werden...

und möglich ist es anscheind wohl... es gibt eine seite (ich weiß nicht mehr wie die heißt)

auf der gibt man eine E-mail Adresse ein und der spuckt dann nach kurzer zeit aus, ob es dieses Konto auch wirklich gibt... ohne dabei eine mail zu verschicken...

> 220 mail.example.com SMTP Foo Mailserver 
< HELO mail.example.org
> 250 Ok
< MAIL FROM:<hans.muster@example.org>
> 250 Ok
< RCPT TO:<foo@example.com>
> 250 Ok
< DATA
> 354 End data with <CR><LF>.<CR><LF>
< From: <hans.muster@example.org>
< To: <foo@example.com>
< Subject: Testmail
< 
< Testmail
< .
> 250 Ok
< QUIT
> 221 Bye

Dieser Ausschnitt zeigt ja auch, dass das versenden nach einem Muster funktioniert (protokoll RFC 821) 
Und die ersten Überprüfungen zeigen das die domain und die adresse existiert...

das Programm soll eben nur diese Überprüfungen durchführen und nicht wie am ende dieses ausschnittes noch eine Mail schreiben...

sowas wäre perfekt zum überprüfen ob eine Mail adresse (z.b. bei einer benutzeranmeldung) auch korrekt angegeben ist...


----------



## DP (18. Aug 2005)

ja der wird sich aber trotzdem mit dem provider verbinden - woher soll der sonst wissen ob es das postfach gibt?!


----------



## AlArenal (18. Aug 2005)

FsMarine hat gesagt.:
			
		

> das Programm soll eben nur diese Überprüfungen durchführen und nicht wie am ende dieses ausschnittes noch eine Mail schreiben...
> 
> sowas wäre perfekt zum überprüfen ob eine Mail adresse (z.b. bei einer benutzeranmeldung) auch korrekt angegeben ist...



Das dürfte i.d.R. nicht funktionieren.
Du kannst dich nicht einfach auf dem Zielrechner auf dem SMTP-Port einloggen und sonstwas treiben. Spätestens nach  RCPT TO bekommst du ein "Relay access denied", weil eine Authentifizierung nötig ist. Ansonsten würde es sich um einen offenen Relay-Server handeln, über den jedermann beliebig Spam verschicken kann.

Du kannst es natürlich mit deinen Zugangsdaten auf dem SMTP deines Providers machen. Aber da kannste nicht testen ob eine E-Mail-Addy existiert. Der verschickt einfach und wenns nirgends ankommt bekommste die Fehlermail des Servers retour.


----------



## FsMarine (18. Aug 2005)

nehmen wir aber mal an, der SMTP Server von dem die mail aus verschickt wird, ist unter meiner kontrolle...

also ich habe Admin rechte auf dem Server, kann mit dem machen was ich will...

geht das dann immer noch nicht ?

Das wäre der fall


----------



## DP (18. Aug 2005)

nein, woher soll dein smtp wissen, ob es asldfjsldfjsdlfjl@gmx.de gibt oder nicht?! ferner gibt es catch-all-adressen - das postfach lsdfjsdlfjsdlfj@brenner-treff.de gibts nicht, die mails kommen aber trotzdem an.. kapische?


----------



## AlArenal (18. Aug 2005)

Nein, geht nicht. Nehmen wir mal ne typische Konstellation von mir:

Ich habe einen eigenen root-Server, benutzte den also auch für Empfang und Versand von E-Mails. Mein E-Mail-Client ist so konfiguriert, dass er beim Versand von E-Mail die gleichen Authentifizierungsdaten benutzt um sich am SMTP-Server anzumelden, wie ich sie für das Holen der Mails vom POP3-Konto eingestellt habe.

Es gibt verschiedene Authentifizierungsmechanismen für SMTP, z.B. APOP, SMTP after POP, ... irgendeinen davon nutzen aber alle mir bekannten Mail-Dienstleister und auch die Standard-Konfigurationen von root-Servern, ...

Sichert man den SMTP nicht mit einer Authentifizierung, kann ja jeder Internet-Nutzer darüber mit einer belieibigen (falschen) Absenderadresse auf meine Kosten an jede beliebige Adresse beliebig viele Mails versenden (Relaying). So schnell kannst du gar nicht schauen wie kein Server im Netz mehr Mail von deiner Kiste weitertranspoertiert, weil du auf ner Blacklist gelandet bist 

Im Übrigen hilft dir ein eigener SMTP-Server nicht rauszufinden, ob auf einer anderen Kiste irgendwo im Netz eine bestimmte Adresse konfiguriert ist, denn das weiß der Server nicht. Der root-Server (in meinem Fall) verschickt die Mail einfach über den nächsten Mail-Server vom Provider und der so weiter, bis zur Zieladresse. Ist die vorhanden, hörste nie wieder was davon (es sei denn der Adressat antwortet dir  ), ansonsten bekommst du eine Fehlermail zurück. 
Diese bekommst du aber u.U. wenn es die Adresse gibt und bloß die Box voll ist, oder du bekommst ne Auto-Reply weil er im Urlaub ist...
Oder du bekommst nix zurück, denkst die Adresse gibt es, aber da hat jemand einfach den Server so eingestellt, das alle nicht bekannten Adressen angenommen und nach /dev/null (Papierkorb) geleitet werden.

Fazit:
Es gibt keine unidirektionale Methode zu bestimmen, ob eine Mail-Adresse tatsächlich existiert und funktioniert. Darum gibts allerorten auch nur E-Mail-Verfikationen über zugemailte Freischalt-Links, etc. 

Gäbe es eine solche Methode würden sich die Profi-Spammer freuen. Mit einem Skript könnten sie für jeden existierenden Server jede mögliche Mail-Addy auf Existenz überprüfen und gezielt mit Viagra- und Penisverlängerungsmails nerven, ohne dass sie diese Adressenerst irgendwo aus dem Netz fischen müssten...


----------



## DP (18. Aug 2005)

AlArenal hat gesagt.:
			
		

> ...mit Penisverlängerungsmails nerven...



Seitdem ich das mal habe machen lassen, kommen keine Verlängerungsmails mehr :lol:


----------



## FsMarine (18. Aug 2005)

ja, gut aber wie macht das dann diese eine webseite (ich habe den link nicht mehr und finde sie auch nicht aber es gibt sie und die bietet die software auch zum verkauf an (40 dollar und 100dollar für quellcode))

die kann überprüfen ob eine E-mail adresse gültig ist ohne eine mail zu verschicken...

und nach dem Protokoll da oben wird doch erst überprüft ob die Mail adresse darauf existiert, oder ?...

ich versteh voll und ganz was ihr mir da sagt und es hört sich auch mehr als logisch an... und ich würde es auch glauben wenn diese oberen punkte nicht für mich dagegensprechen...


----------



## DP (18. Aug 2005)

welche software denn? nenn mal namen...  ich denke die checken nur die syntax und feierabend aber niemals ob die mailadresse existent ist...


----------



## AlArenal (18. Aug 2005)

DP hat gesagt.:
			
		

> welche software denn? nenn mal namen...  ich denke die checken nur die syntax und feierabend aber niemals ob die mailadresse existent ist...



Jap, sehe ich auch so. Die können checken ob die Adresse den RFCs entspricht und dann noch ob der angegebene Server im DNS existiert, aber das ist es dann auch schon.

Würde es sowas geben, noch dazu zu dem Preis und mit Quellcode, gäbe es nicht überall bei Registrierungen die Validierung mittels E-Mail-Links.


----------



## Guest (18. Aug 2005)

DP hat gesagt.:
			
		

> AlArenal hat gesagt.:
> 
> 
> 
> ...


**


----------



## FsMarine (18. Aug 2005)

This SMTP example shows mail sent by Smith at host Alpha.ARPA,
         to Jones, Green, and Brown at host Beta.ARPA.  Here we assume
         that host Alpha contacts host Beta directly.

            S: MAIL FROM:<Smith@Alpha.ARPA>
            R: 250 OK

            S: RCPT TO:<Jones@Beta.ARPA>
            R: 250 OK

            S: RCPT TO:<Green@Beta.ARPA>
            R: 550 No such user here

            S: RCPT TO:<Brown@Beta.ARPA>
            R: 250 OK

            S: DATA
            R: 354 Start mail input; end with <CRLF>.<CRLF>
            S: Blah blah blah...
            S: ...etc. etc. etc.
            S: <CRLF>.<CRLF>
            R: 250 OK

         The mail has now been accepted for Jones and Brown.  Green did
         not have a mailbox at host Beta.

Leute ich versteh aber einfach nicht warum dann z.b. hier steht mit der begründung das er keine mailbox hat das er deswegen zu dem die e-mail nicht hinschicken konnte.

Hier noch ein Link zu einer Amerikanischen Seite wo 
http://www.dickinson.edu/~wahlst/352/
(da unter Homework 6)

es um die Programmierung eines e-mail clients geht.

das baut auch auf commands und RFC 821 auf... der quellcode ist nicht komplet aber den code müsste man doch eigentlich soweit ausbessern können das er das macht was ich haben will...

Ich glaube euch ja allen, aber versteht mich doch, ich muss erst verstehen wo der knackpunkt bei den beiden dingen ist... sagt mir bitte was ich bei diesen beiden dingen falsch beachte !!! Das würde mir schon reichen...


----------



## AlArenal (18. Aug 2005)

Zwischen dem von dir für deine Mails benutzen SMTP und dem POP-Server des Adressaten können beliebig viele weitere E-Mail-Srver kommen, die untereinander die Weiterleitung organisieren. Der obige Ausschnitt ist beispielhaft für eine solche Kommunikation von Mailservern untereinander. Früher lief das mitunter noch etwas anders via UUCP....

Im Grunde ist das obige Beispiel der Versuch eines Mailservers die Mail an den POP-Server des Adressaten weiterzugeben, also an die Endstelle. Diese Endstelle sagt nun aber für einen der Adressaten, dass dieser auf dem Server unbekannt ist. I.d.R. führt das zu einer entsprechenden automatischen Mail an den Ersteller der E-Mail mit Inhalt Fehlerbeschreibung + Ursprungsmail.

Keine Ahnung wo du diese Beispiele herhast.. wenn ich schon daran denke wie lange das mit dem ARPA-Net her ist.. 1969? Da gabs aber doch noch gar kein SMTP, oder? Naja, egal..


----------



## AlArenal (18. Aug 2005)

http://de.wikipedia.org/wiki/SMTP
http://de.wikipedia.org/wiki/Open_Relay


----------



## AlArenal (18. Aug 2005)

Das Ganze ist recht simpel, wenn wir von einem ordentlich konfigurierten Mailserver ausgehen:

Er nimmt Mail nur dann an, wenn er entweder für den Empfänger zuständig ist (Mail-Adresse ist dem System bekannt, wobei Mail-Adresse nicht gleich Postfach bedeutet), oder aber für den Versender (nimmt Mail per SMTP von authentifiziertem Nutzer entgegen).

Der Server, dem dein Mail-Client die Mail per SMTP übergibt, besorgt sich für die Domain (hinter dem @) den DNS-Eintrag. Existieren ein oder mehrere MX-Records (Mail eXchange), versucht er sie zunächst dem Server mit der geringsten Prioritätsziffer weiterzuleiten, bei Misserfolg klappert er die anderen MS-Einträge aufsteigend nach Prioritätsziffer ab. Gibt es in der Zone der Domain keinen MX-Eintrag wird an die IP im A-Record (Adress) versucht zu versenden. Der A-Record enthält die IP auf die die Domäne zeigt... 

Zusätzliche A-Records können für Subdomains eingerichtet werden, das ist hier aber irrelevant


----------



## FsMarine (23. Aug 2005)

hey danke 

ähmm wie kann ich den die mx-records in java ermitteln

bei php gibt es ja die funktion getmxrr()

also sollte es in java auch sowas in der art geben oder ?


----------



## Guest (25. Aug 2005)

Ok danke hat sich schon erledigt...

Und nochmals danke Leute,

und es ist mir übrigens gelungen ein Programm zu schreiben das E-Mail Adressen auf ihre Existenz überprüfen kann

 :wink: 

Wer die Libary und Java doc dazu von mir haben will sollte sich mir per Mail melden...
Wenn da Fehler drin sind oder ihr fälle kennt wo es nicht funktioniert solltet ihr das aber bitte melden ...

fsmarine@gmx.de 

Ansonsten werde ich es wohl demnächst noch auf meine HP stellen...
Ihr könnt gerne das Thema schließen....

P.s 
Noch was zu dem Argument der Sicherheit:
Ihr habt ja gesagt das wenn es möglich wäre e-mails zu checken das man dann ja alle möglichen permutationen durchgehen könnte um so von einer domain eine Liste aller E-Mail adresse zu erstellen...

Nehmen wir mal an wir würden alle möglichen Permutationen bei E-Mail Adressen von bis zu 16 Zeichen abarbeiten.

das wären dann enorm viele möglichkeiten 

so und wenn wir jetzt dieses Programm so laufen lassen würden würden wir noch in 10 jahren da rum sitzen  und warten das es alle möglichen fälle durchgearbeitet hat, weil ein fehlgeschlagener Versuch bis zu 10 sek dauern kann, bis es erkannt wurde...

Zudem haben die meisten Server bestimmt ein IP Blocker, bei hosts die zu oft anfragen stellen.


----------



## DP (25. Aug 2005)

na da bin ich mal gespannt wie du prüfen willst ob eine email-adresse funktioniert.

das ist schon rein technisch nicht möglich.

hier, check mal die domain und wenn du eine nicht exsitierende mailadresse findest, kannste auf meine kosten essen gehen: @brenner-treff.de

nu mach mal


----------



## gast (5. Jul 2006)

Ich denke eigendlich auch das diese Geschichte nicht möglich ist.
 Das SMPTP protocoll prüft einfach garnicht wirklich ob jemand existert oder nicht, deswegen wurde das ding ja abgelöst.
 Ich konnte sooft irgendwo hin eine Nachricht von moslem.ev@***.** schicken beziehungsweise von Bill@Micro****.**
 oder andere scherze.. Wenn das wirklich zertifizierbar wär, warum kommen die Dinger dan immernoch an..
 ACHTUNG: ich bin kein Spammer oderso, aber ich mach schon mal meine Scherze mit freunden..
 Allerdings musste iich auch schon sehroft einen eigenen Mailserver zum versenden benutzen, weil solche dinger denn doch nichtmehr ankamen.
Also wird die Technik hinter den Servern besser!
Das gibt ja grund zur freude,...

Ein absoluter Check ist meineswissens nach jedoch nicht möglich...
ausser die dinger würden mal vernünftig kommunizieren, per authentifizertem protocoll für austausch von Mailanfragen..

Das wäre auch sicherlich möglich und schon passert, wenn da nicht der Datenschutz wäre.

ERGO: es kann nicht 100% funktionieren...
schreib mal den Code hier rein,... wenn du bock hast, aber ich denke du hast schon bemerkt das es nicht wirklich funktioniert....
Du kannst die Mailversenden, und bekommst nen Maildemon...(das geht einigermaßen) 
Hat aber nicht viel Sinn für dich oder?

derDachs




 :###


----------



## Caffè Latte (5. Jul 2006)

Hi,

das ganze kann man schon programmieren; allerdings ist es etwas komplizierter und wegen einer nicht vorhersehbaren Dauer des Test de fakto auch nicht einsetzbar:

Nach der Eingabe der E-Mailadresse schickt das Programm eine Testmail an diese Adresse. Dazu muss das Programm über eine E-Mailclient-Klasse verfügen. Der Client bekommt dann eine Antwort vom Server; schwere Fehler haben z.B. eine Fehlernummer >= 500, z.B. "user unknown", "host unknown" etc.pp.

Es gibt aber auch Fehler, die dazu führen, dass über eine bestimmte Zeit versucht wird die Mail zuzustellen. Dazu bleinbt die Mail auf dem Server; der schickt dann manchmal erst nach Tagen eine Antwort. Dann lässt sich dann während der Programmausführung kaum abfangen; jedenfalls kann man dem Benutzer nicht mehr anzeigen, dass seine Eingabe wohl falsch war.

Wie gesagt: in der Praxis kann man das wohl vergessen. Mit regulären Ausdrücken kann man eine formale Gültigkeit prüfen (wenn auch kaum zu 100%), "blah[at]blubb.de"* ginge trotzdem ...

* extra unkenntlich gemacht, falls irgendwelche Harvester dieses Forum scannen sollten und diese Adresse doch existieren sollte.


----------

