Sascha Müller: E-Mail Syntax checken

Hallo,

mit folgendem "Sucher" checke ich die Syntax der eingegebenen E-Mail Adresse. Die Problematik wurde hier schon einmal diskutiert, auch, dass dieser "Checker" nicht 100%ig sei. Dem ist auch so, zum Beispiel läst er Umlaute durchgehen, und eine E-Mail Adresse wie @gmx.net ist für ihn auch o.k. Könnte man diesen "Checker" noch ein wenig optimieren?

if($DATA{"email"} =~ /[ |\t|\r|\n]*"?([^"]+"?@[^ <>\t]+.[^ <>\t][^ <>\t]+)[ |\t|\r|\n]*/)
{
 print "O.K.\n";
}
else
{
 print "Falsch\n";
}

Vielen Dank für jegliche Mithilfe.

Ciao
Sascha

  1. Hallo,

    Könnte man diesen "Checker" noch ein wenig optimieren?

    Einen RegEx, der eine EMail-Adresse syntaktisch 100% ueberprueft und alles
    abdeckt, was in der RFC beschrieben ist, gibt es nicht. Das, was IMHO am
    naechsten daran herankommt, ist das hier:

    http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/selfforum/selfforum-cgi/shared/CheckRFC.pm?rev=1.11&content-type=text%2Fvnd.viewcvs-markup

    Aber Vorsicht: die Sub 'is_email' ist nicht alles. Die Haupt-Arbeit geschieht
    in 'BEGIN'.

    Gruesse,
     CK

    1. Hallo,

      ich machs immer so:

      #!/usr/bin/perl -wT

      use strict;
      use Net::DNS;

      sub is_email
      {
              ( my $email) = @_;

      return 0 if $email !~ /[1]+(?![^(\040)<>@,;:".\[]\000-\037\x80-\xff])(?:.[^(\040)<>@,;:".\[]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\[]\000-\037\x80-\xff]))*@[^(\040)<>@,;:".\[]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\[]\000-\037\x80-\xff])(?:.[^(\040)<>@,;:".\[]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\[]\000-\037\x80-\xff]))+$/o;

      ( my $maildomain = $email) =~ s/[2]*@//;
              if( !( my @mx = mx( $maildomain) ) )
              {
                      return 0;
              }

      return 1;
      } # is_email

      Das ist ein etwas abgespeckterer Ausdruck, der
      keine Comments und Routingangaben erlaubt.
      Wer benutzt die denn schon, bzw. kann sie weiterverarbeiten?

      Außerdem prüfe ich noch, ob für die Domain ein MX existiert.

      CYa
      GONZO


      1. ^(\040)<>@,;:".\[]\000-\037\x80-\xff ↩︎

      2. ^@ ↩︎