Hin und wieder kommt es vor, dass Kunden von mir Listen mit E-Mails bereinigen müssen, beispielsweise für Newsletter. Da die Datenbestände oft falsche E-Mails enthalten, habe ich zwei kleine Programme zur E-Mail-Bereinigung in Perl und Visual Basic geschrieben.

Grundidee

Die Grunddaten liegen als Textdatei vor: In jeder Zeile steht eine E-Mail-Adresse. Diese Daten sollen nun bereinigt werden und in einer bereinigten Datei ausgegeben werden.

Als Beispiel seien folgende Daten gegeben:

VB.Net-Programmteil „cleanmail.exe“

Perl-Programm „cleanmail.pl“

 Test-E-Mails:

Reguläre Ausdrücke

Um E-Mails auf Validität zu prüfen, ist der Einsatz von Regulären Ausdrücken (Regular Expressions) sinnvoll. Reguläre Ausdrücke können Texte auf Muster überprüfen. E-Mails sollten theoretisch dem RFC 2822 Standard entsprechen. Ein Regulärer Ausdruck zur Prüfung einer E-Mail nach diesem Standard findet man beispielsweise unter http://code.iamcal.com/php/rfc822/full_regexp.txt. Der Ausdurck ist dabei schlappe 3768 Zeichen lang und für die meisten Anwendungsfälle unnötig.

Folgender Ausdruck genügt für 99% der Fälle vollkommen: ^[a-zA-Z][a-zA-Z0-9\._%+-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*\.([A-Za-z]{2,})$. Hierbei werden folgende Schritte ausgeführt:

  • Am Anfang der Mail muss ein Buchstabe (a-z oder A-Z) stehen.
  • Dann folgen 1 oder mehrere Zeichen, die auch Zahlen oder ., _, %, + und – enthalten können.
  • Jede E-Mail besitzt ein @.
  • Dann folgt eine Domain aus Buchstaben und Zahlen.
  • Möglicherweise existieren weitere Domainnamen, wenn die E-Mail einer Subdomain zugeordnet wurde.
  • Die Toplevel-Domain besteht nur aus Buchstaben und muss mindestens zwei Zeichen lang sein.

Nun kann man kleine Programme schreiben, welche E-Mails entsprechend auswerten. Als Beispiel habe ich im Folgenden Perl und VB.Net genommen (wurde von den Kunden nachgefragt).

Fazit

Wie man sieht, sind die Programme im Kern einfach. Das VB-Net-Programm ist natürlich nicht ganz vollständig, zeigt jedoch die wesentliche Funktionsweise.

Bei der Perl-Datei wird die bereinigte Liste auf die Standardausgabe ausgegeben. Um diese in einer Datei zu speichern, gibt man folgendes an: cleanmail.php liste.txt > bereinigt.txt. Dies funktioniert unter Windows (z.B. mit ActiveState Perl) und natürlich unter unixoiden Systemen (Linux, BSD, Mac).

Wer die Programme herunterladen will, kann das hier machen: