Alexander (HH): E-Mail-Validierung: Neuer Ansatz

Beitrag lesen

Moin Moin!

Hierbei möchte ich ausdrücklich NICHT prüfen, ob die E-Mail-Adresse logisch korrekt ist, sondern größeren Schaden verhindern.

Was für Schäden?

Hierzu soll die Funktion folgenden Gesichtspunkten standhalten:

  1. Sie soll so einfach wie möglich gestaltet sein.

... aber nicht einfacher (Einstein)

  1. Die Benutzung in der Funktion mail() soll möglich sein ohne Schaden anzurichten (Injenction).

Wenn PHP selbst nicht vernünftig escapen kann, mußt Du es vorher machen.

  1. Es soll nur eine E-Mail-Adresse angegeben werden können (nicht mehrere).
  1. Die E-Mail-Adresse soll eindeutig identifizierbar sein, damit nicht mehrfach die gleiche Adresse als Ziel verwendet wird.

Welche der folgenden Adressen sind mit joe@example.com identisch? Welche füllen garantiert die selbe Mailbox?

joe@example.com.
Joe@example.com
JOE@example.com
JOE@EXAMPLE.COM
joe@EXAMPLE.COM
joe+ipv6@example.com
joe-ipv6@example.com
joe@ipv6.example.com
joe@example.org
josef-maria.doe@example.com

  • Es muss mindestens ein "@" vorkommen.
  • Nach dem letzten @ muß mindestens ein Punkt vorkommen, der nicht direkt am @ hängen darf.

  • Ein abschließender "." ist zwar selten, aber technisch korrekt.

  • Die Gesamtlänge darf 255 nicht überschreiten (willkürlich gewählt, um ein Limit zu setzen).

Naja, gut, das kannst Du machen. Aber ein Limit ist in den RFCs nicht drin, soweit ich mich erinnere. Hostnamen haben eine Längenbegrenzung, Mail-Accounts nicht.

  • zu 2.) Die ersten 32 ASCII-Codes müssen ausgeschlossen werden.

Tja, da könnte man bestimmt was aus den RFCs basteln, aber das geht wohl so in Ordnung.

  • zu 3.) Die Zeichen "," und ";" müssen ausgeschlossen werden.

Prinzipiell könnte man auch diese beiden Zeichen im Account-Namen haben, aber das hat wohl kaum einer.

  • zu 4.) Die Zeichen "<" und ">" müssen ausgeschlossen werden, sonst sind Mehrfachnennungen der Form "Eva Mustermann 123@example.com" und "Adam Mustermann 123@example.com" möglich.

s/^(.+)\s+<([^<>]+)>$/$2/;

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".