Chris Shiflett hat am Wochenende seinen PHP Adventskalender gestartet. Ganz im Sinne des Perl Advents Kalenders: Auch im Original gibts jeden Tag einen Tipp, der etwas mit PHP zu tun hat ;)
Der erste Tipp wird von Sean Coates beschrieben - Sean arbeitet unter anderem im PHP Documentation Team… Wie man am Titel dieses Beitrages schon erkennen kann, geht es um die Simulation des Mailversands mit PHP.
Wer bereits ein Newsletter System (oder eine ähnliche Funktion) in einer Applikation implementiert hat, weiß wovon Sean spricht - Test sind schwierig, weil man die Performance eines Mailversands an tausende Empfänger eben nur mit tausenden Empfängern testen kann…
Nur wer der Junk und Spam genervten Newsletter-Empfänger hat schon Bock, sich einen (womöglich) zerfetzten und mit Bugs gespickten Newsletter reinzuziehen? Genau. Keiner.
Aber zum Glück bietet PHP die Möglichkeit, über die php.ini alles mögliche zu konfigurieren. So auch den sendmail_path. Sendmail ist üblicherweise das Tool, das sich um den Mailversand auf Linux-Büchsen kümmert. Das ist schnell durch ein Bash-Script ersetzt:
$ cat /path/to/php/ini | grep sendmail_path sendmail_path=/usr/local/bin/logmail
$ cat /usr/local/bin/logmail cat >> /tmp/logmail.log
Das Problem an dieser Variante: Schon bei mehreren 100 Empfängern wird das Logfile ganz schön voll und vor allem unübersichtlich - als Debugging-Variante denkbar ungünstig…
Schön wäre doch, wenn alle Mails an ein benutzerdefiniertes Konto umgeleitet werden könnten. Und zwar nicht applikationsseitig, sondern serverseitig - denn die Applikation soll die Mails ja im Livebetrieb an unterschiedliche Empfänger ausliefern…
Für genau diese Zwecke gibt es unter Linux den Mail Reformatter. Über Parameter kann man die wildesten Mail-Header Konstellationen umformatieren ;) Aber wenns auch mal langweilig sein darf: Der Empfänger-Header ist auch möglich:
$ cat /path/to/php/ini | grep sendmail_path sendmail_path=/usr/local/bin/trapmail
$ cat /usr/local/bin/trapmail formail -R cc X-original-cc \ Â -R to X-original-to \ Â -R bcc X-original-bcc \ Â -f -A"To: devteam@example.com" \ | /usr/sbin/sendmail -t -i
Das kleine Script “trapmail” entfernt alle Empfänger (auch CC und BCC!) aus dem Header und fügt stattdessen die Mailadresse devteam@example.com ein.
Alle mail() Aufrufe auf dem selben Server aller Domains, die sich dieselbe php.ini teilen, werden damit berücksichtigt. Wer mit einem Mailer arbeitet, der direkte SMTP Aufrufe unterstützt muss doppelt vorsichtig sein und über ein Flag diese Funktion auf dem Dev-Server deaktivieren.
Was Sean wahrscheinlich nicht wusste: Es gibt ein Script namens Fakemail, das einen SMTP Server simuliert, die Mails annimmt und in einem Verzeichnis die Mails als Dateien ablegt. Der Name der jeweiligen Datei ist immer die Emailadresse. Auf diese Art und Weise muss man nur die Applikations-Konfiguration auf dem Dev-Server anpassen. Und das ist wahrscheinlich ohnehin notwendig ;)

















