Manchmal kommt es vor, dass man E-Mails nicht direkt per SMTP aus dem Internet
empfangen will (Sicherheit) oder kann (z. B. kein Zugriff auf MX-Eintrag
bei Domänen-Provider). Dann kann man entweder die E-Mails mit dem Notes-Client
abholen oder man verwendet ein Hilfprogramm wie fetchmail,
um die E-Mails per POP3 oder IMAP beim Provider abzuholen und dann (im
lokalen Netz) per SMTP an den Domino-Server zu senden.
Wenn man sowieso einen Linux-Server
am Laufen hat, bietet es sich an, Fetchmail aus der Distribution zu installieren.
Hat man jedoch nur Windows-Server oder man möchte das Verfahren auf einem
Windows-Desktop oder -Notebook implementieren, hat man ein Problem: Es
gibt keine native fetchmail-Version
für Windows. Aber zum Glück gibt es Cygwin
für solche Fälle...
Zunächst muss man den aktuellen Cygwin-Installer
herunterladen und installieren:
Eine Download-Site möglichst in der
Nähe auswählen:
Wenn man unter Search den Namen, hier
also "fetchmail"
eingibt, wird die Liste gefiltert. Mit einem Linksklick auf "Skip"
in der Spalte "New" schaltet man die Installation der aktuellen
Version an und die Versionsnummer wird in der Spalte "New" angezeigt.
Bei der Gelegenheit kann man noch andere
Linux-Programme, wie z. B. den Editor "nano"
und den Archiver "bzip2"
auswählen und mit installieren.
Als nächstes konfigurieren wir fetchmail.
Wie unter Linux üblich, geht das über eine einfache Text-Datei, die man
z. B. mit "nano /etc/fetchmailrc"
anlegt und gleich zum Bearbeiten öffnet:
# globale Optionen
set postmaster "postmaster@assono.de" # Vorgabekonfiguration für alle Polls defaults # Server-Optionen protocol pop3 # User-Optionen to "tbahn" smtpname "tbahn@assono.de" smtphost "smtp.assono.de" # 1. Poll poll "pop.gmx.net" # Server-Optionen uidl # User-Optionen username "******@gmx.de" password "**********" sslfingerprint "A6:57:BC:4A:97:AD:DB:99:00:E9:3A:B8:81:55:D7:B6" # keep # 2. Poll poll "pop.web.de" # Server-Optionen uidl # User-Optionen username "******@web.de" password "**********" sslfingerprint "48:FC:ED:0A:EB:4F:DF:A3:F3:4A:C5:DB:8B:E4:D6:6A" |
Da in dieser Datei Passworte gespeichert
werden (müssen), verlangt fetchmail
zur Sicherheit, dass nur der Besitzer (Owner) selbst darauf zugreifen kann,
also: chmod 600 /etc/fetchmailrc
im Cygwin-Terminal eingeben.
Ganz zu Beginn stehen die globalen Optionen.
In diesem Fall nur die Einstellung postmaster:
Wenn fetchmail
nicht ermitteln kann, an wen eine E-Mail gehen soll, wird sie Notfalls
an diese Adresse geschickt.
Im Abschnitt defaults
können Voreinstellungen für alle Polls, d.h. alle Server und Benutzer,
von bzw. für die E-Mails abgeholt werden, definiert werden.
Hier hole ich also immer per POP3 ab
(protocol,
IMAP ginge auch) und alle E-Mails sind für Benutzer "tbahn" (to),
werden an "tbahn@assono.de" gesendet (smtpname)
und dafür wird der SMTP-Server smtp.assono.de (smtphost)
verwendet.
Der erste Poll soll vom Server pop.gmx.net
gemacht werden.
Die Server-Option uidl
besagt, dass die gelesen-Markierungen client-seitig verwaltet werden sollen.
Greift man abwechelnd mit mehreren Mail-Clients auf das POP3-Konto zu,
werden E-Mails, die mit einem anderen Client gelesen wurden, auf dem Server
als gelesen markiert und würden ohne diese Einstellung nicht mehr von fetchmail
abgeholt werden.
Die Benutzer-Optionen username
und password
sind wahrscheinlich klar, nur sslfingerprint
ist wohl erklärungsbedürftig.
Wenn man nichts anderes angibt (wie
ich hier), wird eine unverschlüsselte POP3-Verbindung aufgebaut und danach
versucht, mittels STARTTLS auf eine verschlüsselte Verbindung umzustellen.
Dabei wird auch das SSL-Zertifikat vom Server heruntergeladen und verifiziert.
Das hat bei mir nicht geklappt, da die übergeordneten Zertifikate nicht
vorlagen. Statt diese zu besorgen und im richtigen Verzeichnis abzulegen,
habe ich nur den SSL-Fingerabdruck ermittelt und in die Konfiguration eingetragen.
Jetzt wird der Fingerabdruck des Servers mit dem in der Konfiguration verglichen
und nur E-Mails abgeholt, wenn er übereinstimmt. So beuge ich Man-in-the-Middle-Attacken
vor.
Mittels der auskommentierten keep-Option
wäre es möglich, die abgeholten E-Mails auf dem Server zu belassen. Ohne
diese Einstellung werden abgeholte E-Mails gelöscht.
In einer Konfiguration können beliebig
viele Polls, also Server, und pro Server beliebig viele Benutzer abgefragt
werden. Für Details sei auf die Hilfeseiten
und die FAQ
des fetchmail-Projekts
verwiesen. Auch Sammelpostfächer, die E-Mails von verschiedenen Benutzern
gleichzeitig enthalten, sind möglich (siehe Multidrop Mailboxes auf den
Hilfeseiten).
Als Nächstes erstellen wir ein Shell-Skript,
um fetchmail
bequem aufzurufen und dabei gleich die Protokolldateien zu verwalten. Ich
baue dabei auf die Arbeit von Andreas
Rehm, ITsolution² auf, dem ich
hiermit vielmals für seine großartige Arbeit danken möchte.
Also: nano /usr/bin/fetchmail.sh:
#!/bin/bash
# fetchmail.sh:Andreas Rehm ITsolution², Thomas Bahn <tbahn@assono.de> # Stand 0.3 # # Diese Script muss mit einer bash/cygwin oder auf einem Unix Rechner # gestartet werden. # Es wird automatisch pro Tag ein Logfile angelegt. # Es wird nur einmal fetchmail gestartet, wenn es bereits läuft wird # abgebrochen. # Archivierung alter Logfiles nach 7 Tagen mit bzip2 und automatische # Löschung nach einem Jahr. # # Bitte beachten: Sie brauchen fetchmail und bzip2 # # Geplant für die nächste Version: # ########################################################################### # History # V0.1 - Initiale Version # V0.2 - Fehlerbereinigung Löschen alter Logdateien # V0.3 - Anpassungen von Thomas Bahn # Protokolle in /var/log # -v (verbose) bei fetchmail-Aufruf # ########################################################################### # Abbruch, wenn fetchmail noch läuft ps -a | grep fetchmail && exit; # Start echo "Starte E-Mail-Abholung" # Neue Logdatei ja / nein NEWLOGFILE=0 # Log-Datei erstellen - LOGDATE ist das aktuelle Datum LOGDATE=`date +'%Y-%m-%d'` # Logdir ist der Ordner mit den Logdateien - dieser wird ggf. erstellt LOGDIR='/var/log' # Logfile ist die Logdatei, die sich aus den vorhergehenden Daten zusammensetzt LOGFILE="${LOGDIR}/${LOGDATE}-fetchmail.log" # Logdir erstellen wenn nötig if [ ! -d ${LOGDIR} ] then echo "Erstelle Logdir = ${LOGDIR}" mkdir -p ${LOGDIR} fi # Logfile anlegen, da sonst fetchmail kein Log schreibt if [ ! -f ${LOGFILE} ] then echo "Logdatei ${LOGFILE} erstellen..." touch ${LOGFILE} NEWLOGFILE=1 fi # Anfang protokollieren DATE=`date +'%d.%m.%Y %H:%M:%S'` echo "Start der E-Mail-Abholung am ${DATE}" >> ${LOGFILE} # E-Mail abholen fetchmail -v -f /etc/fetchmailrc -L ${LOGFILE} # Ende protokollieren DATEEND=`date +'%d.%m.%Y %H:%M:%S'` echo -e "Ende der E-Mail-Abholung am ${DATEEND}\n" >> ${LOGFILE} # Logrotation wenn eine neue Datei angelegt wurde if [ "${NEWLOGFILE}" == "1" ]; then # Dateien die älter als 7 Tage sind werden komprimiert find ${LOGDIR} -name \*.log -ctime 7 -exec bzip2 {} \; # Dateien die älter als 365 Tage sind werden gelöscht find ${LOGDIR} -name \*.log.bz2 -ctime 365 -exec rm {} \; fi |
Ein Shell-Skript muss ausführbar sein,
also: chmod 755 /usr/bin/fetchmail.sh
im Cygwin-Terminal eingeben.
Es bleibt der regelmäßige Aufruf des
Shell-Skript, wofür es unter Windows 7 die Aufgabenplanung gibt:
Dort kann man eine neue Aufgabe erstellen:
Programm: C:\cygwin\bin\mintty.exe
Argumente: -h
error -e /usr/bin/bash --login -i /usr/bin/fetchmail.sh
Der Start der Aufgabe macht nur Sinn,
wenn überhaupt eine Netzwerkverbindung besteht.
Man kann die Aufgabe dann einmal gleich
ausführen lassen und im Cygwin-Terminal mit less
/var/log/*-fetchmail.log nachschauen,
wie es denn so lief.