Moin!
if (preg_match( '/^([a-z0-9]+([-_.]?[a-z0-9])+)@[a-z0-9äöü]+([-_.]?[a-z0-9äöü])+.[a-z]{2,4}$/i', $amail))
so geht es mit Punkt und mit deutschen Sonderzeichen
Dein Regex ist mindestens genauso kaputt, wie der von Klaus.
Umlaute in Domainnamen, die als Mailziel verwendet werden, sind nackt nicht zulässig, sondern müssen mit Punycode-Regeln in ASCII-Domains gewandelt werden. Weil das bislang die Mailclients nicht flächendeckend tun, da es keinerlei Standardisierungs-Vereinbarung dafür gibt, sind Umlautdomains im Mailverkehr unbenutzbar.
Die fehlerhafte Einschränkung der TLD-Länge ist bei dir ebenso vertreten, wie die fehlerhafte Einschränkung des User-Anteils der Adresse. Gerade der Useranteil ist praktisch keinerlei Regeln unterworfen, deshalb ist es sinnlos, an dieser Stelle irgendetwas strenger zu prüfen.
- Sven Rautenberg