Zur Zeit wird gefiltert nach: visual basic
Filter zurücksetzen
E-Mail-Liste per Visual Basic oder Perl reinigen
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:
- cleanmail.pl
- cleanmail.exe (benötigt Windows Installer 3.1 und .NET Framework 3.5 SP1)
VB.Net-Programmteil "cleanmail.exe"
- Quelltext: Alles auswählen | Zeilennummerierung an/aus
-
- Dim line As String
- 'Open File
- Dim sr
- Try
- sr = New StreamReader(fs)
- Catch ex As Exception
- Exit Sub
- End Try
- 'Write File
- Dim sw
- Try
- Dim fo As New FileStream(outFile, FileMode.Create)
- sw = New StreamWriter(fo)
- Catch ex As Exception
- Exit Sub
- End Try
- 'Read File - each line...
- Do Until sr.Peek() = -1
- line = sr.ReadLine()
- If line <> "" And EmailAddressCheck(line) Then
- sw.WriteLine(line)
- Else
- tbOut.AppendText("Stripped: " + line + vbNewLine)
- End If
- Loop
- 'Close everything
- sr.Close()
- sw.Close()
- tbOut.AppendText("Finished writing " + outFile + ".")
- End Sub
- Private Function EmailAddressCheck(ByVal emailAddress As String) As Boolean
- Dim pattern As String = "^[a-zA-Z][a-zA-Z0-9\._%+-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*\.([A-Za-z]{2,})$"
- Dim emailAddressMatch As Match = Regex.Match(emailAddress, pattern)
- If emailAddressMatch.Success Then
- EmailAddressCheck = True
- Else
- EmailAddressCheck = False
- End If
- End Function
Perl-Programm "cleanmail.pl"
- Quelltext: Alles auswählen | Zeilennummerierung an/aus
-
- #!/usr/bin/perl
- #Parameter 1 muss eine Eingabedatei sein
- #Kann Datei geöffnet werden
- }
- #Datei zeilenweise abarbeiten
- foreach my $line (<HANDLE>) {
- #auf E-Mail prüfen:
- if ($line =~ /^[a-zA-Z][a-zA-Z0-9\._%+-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*\.([A-Za-z]{2,})$/) {
- }
- }
- Quelltext: Alles auswählen | Zeilennummerierung an/aus
-
- info@testtest.com
- marcus.mueller@nocheintest.de
- Total falsch
- keine.@mail..xx
- Nicht@erlaubt
- root@sub.domain.com
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).
[mehr]