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]
Codeschnippsel: PNG-Weltkugel per Generic Mapping Tools in PHP-Skript erzeugen (Linux/Ubuntu)
Wichtig ist, dass der Rechner, auf dem das Skript ausgeführt wird, bestimmte Voraussetzungen mitbringt:
- GMT muss klarerweise installiert sein. Eine Anleitung gibt es hier im Blog. Windows-Dateien können von der GMT-Homepage heruntergeladen werden. Ob das Skript unten auf Windows funktioniert, weiß ich nicht.
- Gegebenenfalls müssen die Pfade angepasst werden. Die meisten Distributionen verwenden inzwischen den GMT-Wrapper „GMT”. Falls das nicht der Fall ist, muss die Variable
$gmtWrappergelöscht werden und die Variablen$gmtCoast,$gmtXYund$gmtTextmit Pfadnamen versehen werden.
Nachdem man alles eingestellt hat (unter Ubuntu sollte das Skript Out-of-the-Box funktionieren), kann man von es von der Kommandozeile ausprobieren: php $gmt_globe.php. Dazu muss php-cli installiert sein.
Das Ergebnis kann sich durchaus sehen lassen:

Die Größe der Weltkugel ist im Skript festgesetzt. Durch Ändern der Variable $dpi lässt sich bestimmen, wie groß das resultierende PNG ist.
- Quelltext: Alles auswählen | Zeilennummerierung an/aus
-
- <?php
- //gmt_globe.php - Code-Schnippsel
- //Copyright (c) 1010, Maximilian Kalus, auxnet.de
- //Ausgabe:
- $lon = '11.566667'; //Längengrad
- $lat = '48.133333'; //Breitengrad
- $name = 'München'; //Name des Ortes
- $output = '/tmp/globus'; //Pfad und Namensteil für Ausgabedatei
- $is_utf8 = true; //System ist UTF-8?
- $dpi = 150; //DPI der Ausgabe: 72 oder 96 ist gut für den Bildschirm, 300 oder 600 für den Druck
- //Umgebung:
- $convert = '/usr/bin/convert'; //Pfad zu ImageMagick convert (oder GraphicsMagick Wrapper)
- $gmtWrapper = '/usr/bin/GMT'; //GMT-Wrapper oder leer
- $gmtCoast = 'pscoast'; //Name oder Pfad zu pscoast
- $gmtXY = 'psxy'; //Name oder Pfad zu psxy
- $gmtText = 'pstext'; //Name oder Pfad zu pstext
- ); //ggf. Umgebungsvariablen für GMT (PHP5)
- //Ausgabe-namen
- $tmpname = $output.'.ps'; //Ausgabe in PS-Datei
- //GMT-Generierung starten
- //Prozess-Pipes erzeugen
- $pipes = null;
- // in die geschrieben wird
- );
- //Globus selbst erstellen
- //PHP-Versionen unterscheiden sich...
- if (phpversion() < 5) $process = proc_open($gmtWrapper.' '.$gmtCoast.' -Rg -JG'.$lon.'/'.$lat.'/16c -B15g15 -Dc -A5000 -W0.3pt -G230 -P -K', $descriptorspec, $pipes);
- else $process = proc_open($gmtWrapper.' '.$gmtCoast.' -Rg -JG'.$lon.'/'.$lat.'/16c -B15g15 -Dc -A5000 -W0.3pt -G230 -P -K', $descriptorspec, $pipes, $cwd, $env);
- }
- //Punkt eintragen
- if (phpversion() < 5) $process = proc_open($gmtWrapper.' '.$gmtXY.' -Rg -JG'.$lon.'/'.$lat.'/16c -Ss0.15 -G255/0/0 -O -K', $descriptorspec, $pipes);
- else $process = proc_open($gmtWrapper.' '.$gmtXY.' -Rg -JG'.$lon.'/'.$lat.'/16c -Ss0.15 -G255/0/0 -O -K', $descriptorspec, $pipes, $cwd, $env);
- }
- //Titel eintragen
- if (phpversion() < 5) $process = proc_open($gmtWrapper.' '.$gmtText.' -Rg -JG'.$lon.'/'.$lat.'/16c -G0/0/0 -Dj0.06/0.06 -O', $descriptorspec, $pipes);
- else $process = proc_open($gmtWrapper.' '.$gmtText.' -Rg -JG'.$lon.'/'.$lat.'/16c -G0/0/0 -Dj0.06/0.06 -O', $descriptorspec, $pipes, $cwd, $env);
- }
- //GMT ist abgeschlossen
- //PNG erzeugen
- //PS-Datei löschen
- ?>
[mehr]
T3SPORTS in Kombination mit rgtabs
Ein gutes Tutorial erklärt, wie man die TYPO3 Extensions t3sports (zum Verwalten von Sportergebnisse) und rgtabs gemeinsam dynamisch nutzen kann.[mehr]
Neues TYPO3-Magazin erscheint am 30. Januar
Am 30. Januar erscheint ein neues Online-TYPO3-Magazin. Es wendet sich an TYPO3-Anwender, TYPO3-Interessierte sowie an Webentwickler/Webdesigner, die mit TYPO3 arbeiten bzw. arbeiten wollen.[mehr]
Spielend lesen: Grand Prix für interaktive Literatur eröffnet
Im Frühjahr 2010 findet der deutsche Grand Prix für interaktive Literatur statt: Ab sofort können Textadventure-Autorinnen und -Autoren Wettbewerbsbeiträge einsenden. Auch Einsteiger sind willkommen.[mehr]