- Werbung -

"Wir müssen Porto sparen" - so hieß es kürzlich bei einem mit mir verbundenen Verein.

Bisher wurden dort eingehende Briefe in real existierende Postfächer (=Ablageboxen) verteilt und dann gesammelt an die Funktionsträger versandt. Um die Kosten zu minimieren wurde darüber nachgedacht, die Mehrheit der Briefe einzuscannen und den betreffenden Empfängern per Mail zuzusenden. Allerdings steigt dabei der Arbeitsaufwand mit den Einsparungen beim Porto. Immerhin muss jeder Brief gescannt, auf Platte abgelegt und dann an eine E-Mail angehängt werden.

So entstand der Gedanke, die Ablageboxen durch elektronische Gegenstücke zu ersetzen: Ordner auf der Festplatte eines Linux-Rechners. Also wurde ein Ordner "post" im Dokumentenverzeichnes angelegt, der dann Unterordner für die einzelnen Empfänger enthält. Dorthinein kommen nun die eingescannten Dokumente (als PDF-Dateien).

Nun folgt der 2. Schritt: der Versand der E-Mails. Dieser sollte automatisiert und ohne menschliches Zutun geschehen: Alle Dokumente, die bis Freitags, 14:00 Uhr eingegangen sind werden per E-Mail verschickt.

Um dies umzusetzen, braucht man zweierlei: Zum einen ein Programm, dass die Mails verschickt und zum anderen eine Möglichkeit, das Programm zu einer bestimmten Zeit zu starten. Letzteres kann unter Linux mittels crontab erledigt werden. Dabei werden zu festgelegten, wiederkehrenden Zeitpunkten Programme aufgerufen. Mittels crontab -l stellt man fest, ob für den angemeldeten Benutzer schon eine crontab-Steuerdatei existiert. Wenn nicht, legt man diese crontab /etc/crontab neu an. Mit crontab -e kann man die Datei dann bearbeiten.

Ein typischer Eintrag sieht aus wie folgt:

0 0 0 0 1-5 ./backup.sh

Damit wird Montag bis Freitag um Mitternacht das Skript backup.sh aufgerufen.
Der für meinen Fall passende Eintrag wäre

0 14 0 0 5 ./mailversand.php

Hier erkennt man auch schon, dass ich das Skript zum Versand der Mail in PHP programmiert habe. Ich hätte es auch in perl oder als Shellscript programmieren können, doch habe ich ein ähnliches Skript schon mal für eine Webseite erstellt - und konnte es mit einigen Anpassungen dann hier weiterverwenden. Und auf die Laufzeit kommt es bei diesem Projekt nicht so an.

Was soll das Skript können?
Die Dokumente in den einzelnen "Postfächern" sollen eingesammelt und an eine Mail angehängt verschickt werden.
Anschließend sollen die Dokumente in einen neuen Ordner verschoben werden, der das Datum des Versands als Namen hat. So kann auch später gezielt auf die Dokumente zugegriffen werden. Als "Bonbon" soll abschließend ein Protokoll erstellt werden, so dass man schnell sagen kann welches Dokument wann an wen verschickt wurde.

Wie setzt man das nun um?
Ein konkretes Listing in PHP (oder einer anderen Programmiersprache) möchte ich hier nun nicht veröffentlichen - das sprengt wahrscheinlich den Rahmen. Aber die einzelnen Programmschritte will ich schon skizzieren.

  • Als erstes muss das Verzeichnis des "post"-Ordners eingelesen, dann seine Einträge nacheinander abgearbeitet werden: Äußere Schleife.
  • Für die weitere Betrachtung interessant sind dann nur Ordner - in denen liegen ja die Dateien, die verschickt werden sollen. Also muss von diesen Ordnern wieder das Inhaltsverzeichnis eingelesen werden und - man ahnt es schon - die Einträge nacheinander betrachtet werden: Innere Schleife.
  • Aber bevor wir uns die Mühe machen, das Verzeichnis zu durchsuchen, wird erst mal die Konfigurationsdatei gesucht und (wenn vorhanden) eingelesen. Dort sind Name und E-Mail-Adresse des Empfängers hinterlegt. Und wenn es diese Datei nicht gibt, kann auch keine Mail verschickt werden.
  • In der inneren Schleife sind nun nicht die Ordnereinträge interessant (hier liegen ja nur archivierte Dateien), sondern die Einträge, die Dateien entsprechen. Dabei werden alle Dateien als Attachment zur Main hinzugefügt und der Dateiname zum Mail-Body hinzugefügt.
  • Sind alle Einträge im Verzeichnis abgearbeitet, wird die Mail abgeschickt - und zum nächsten Eintrag der äußeren Schleife gesprungen.

Soweit dazu. Das Programm tut seinen Dienst - und ich denke über mögliche Erweiterungen nach.
So könnte man während des Schleifendurchlaufs eine Art "Logdatei" erstellen - wer hat wann welche Datei geschickt bekommen. Aber auch die Frage der einfachen Erweiterung durch "nicht-technisches" Personal kam auf.
Dazu wäre es wohl sinnvoll, PHP-Skripte zum Hinzufügen bzw. Löschen von Ordnern zu erstellen, die dann über eine Web-Oberfläche erreichbar wären. Auch ein manueller Versand von Mail wäre so möglich, wenn mal nicht bis Freitag gewartet werden soll.

Alles in allem ein für mich in der Erstellung interessantes Projekt, das mit relativ geringen Aufwand eine große Wirkung erzielt.