Moin Moin!
Im Artikel Validierung von eMail-Adressen steht zu dieser Funktion übrigens nichts (eh klar, Artikel zu alt).
Doch, ein entscheidender Satz steht drin:
Ein zweites, ernüchterndes Fazit zur Frage "How do I check a valid mail address?" findet sich in der Perl-FAQ: You can't, at least, not in real time.
Ende der Diskussion. Es geht nicht.
Du kannst nicht alle Tippfehler finden, und Du kannst jede Menge Annahmen über Mailbox- und Domain-Teil der E-Mail-Adresse NICHT machen. Die RFCs sind gerade beim Mailbox-Teil extrem flexibel gestaltet. Schon die beiden Annahmen, dass Groß- und Kleinschreibung beim Mailbox-Teil eine oder keine Rolle spielt, ist falsch.
Die neue PerlFAQ9 von Perl 5.10 ist mittlerweile in dem Punkt etwas länger und ausführlicher. Du kannst tatsächlich das Format der E-Mail-Adresse nach den bekannten RFCs durchvalidieren und damit grobe Tippfehler und Layer-8-Probleme aussortieren. Den Domain-Teil mußt Du aber immer noch live gegen das DNS-System abgleichen.
Damit kannst Du aber immer noch keine Aussage darüber treffen, ob eine E-Mail-Adresse gültig ist. Die letzte Prüfung liegt beim annehmenden Mailserver:
Der kann (und sollte) z.B. den Abgleich per VRFY oder EXPN verweigern, so dass nur ein Zustellversuch per MAIL FROM bleibt. Den kann der Server ablehnen wegen falscher Adresse, ablehnen weil Du auf einer Blacklist stehst, ablehnen weil Du nicht auf einer Whitelist stehst, ablehnen weil der Inhalt nicht genehm ist, vorübergehend ablehnen (Greylisting), annehmen und sofort verwerfen, annehmen und per Antwort-Mail über die Nichtzustellbarkeit informieren, annehmen und an einen anderen Server weiterleiten, annehmen und zustellen. Egal was der Server macht, Du kannst selbst während des gesamten SMTP-Dialoges NICHT herausfinden, ob der Mailbox-Teil der E-Mail-Adresse gültig ist.
Damit kannst Du nicht herausfinden, ob die E-Mail-Adresse gültig ist, ohne dass der Empfänger aktiv auf die E-Mail-Adresse reagiert. Z.B. indem er auf einen Link in der E-Mail klickt oder eine Antwort-Mail mit einem festgelegten Inhalt und/oder einer festgelegten E-Mail-Adresse an Dich schickt. Und das kann ziemlich asynchron werden, Reaktionszeiten im Bereich von Tagen sind durchaus möglich, und immer noch kann sich der Empfänger tot stellen und die E-Mail einfach ignorieren.
Wieder aus der neuen PerlFAQ9:
"Our best advice for verifying a person's mail address is to have them enter their address twice, just as you normally do to change a password. This usually weeds out typos. If both versions match, send mail to that address with a personal message. If you get the message back and they've followed your directions, you can be reasonably assured that it's real."
"A related strategy that's less open to forgery is to give them a PIN (personal ID number). Record the address and PIN (best that it be a random one) for later processing. In the mail you send, ask them to include the PIN in their reply. But if it bounces, or the message is included via a "vacation" script, it'll be there anyway. So it's best to ask them to mail back a slight alteration of the PIN, such as with the characters reversed, one added or subtracted to each digit, etc."
Alexander
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".