In unserem Podcast diskutiert Thomas Bahn über Nutzen, Anwendungen und Erfahrungen aus den Bereichen Chatbots und Künstliche Intelligenz. Mehr erfahren

Quick-Tipp: E-Mails per POP3 (oder IMAP) abholen und per SMTP an Domino-Server zustellen

von Thomas,
assono GmbH, Standort Kiel,

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:
A picture named M2
A picture named M3
A picture named M4
A picture named M5
A picture named M6
A picture named M7

Eine Download-Site möglichst in der Nähe auswählen: A picture named M8
A picture named M9

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. A picture named M10
Bei der Gelegenheit kann man noch andere Linux-Programme, wie z. B. den Editor "nano" und den Archiver "bzip2" auswählen und mit installieren.
A picture named M11


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:


A picture named M12

Dort kann man eine neue Aufgabe erstellen:



A picture named M13
A picture named M14
A picture named M15
A picture named M16
A picture named M17

Programm: C:\cygwin\bin\mintty.exe

Argumente: -h
error -e /usr/bin/bash --login -i /usr/bin/fetchmail.sh




A picture named M18
A picture named M19

Der Start der Aufgabe macht nur Sinn,
wenn überhaupt eine Netzwerkverbindung besteht.


A picture named M20

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.

Fachbeitrag HCL Domino Linux Administration

Sie haben Fragen zu diesem Artikel? Kontaktieren Sie uns gerne: blog@assono.de

Sie haben Interesse an diesem Thema?

Gerne bieten wir Ihnen eine individuelle Beratung oder einen Workshop an.

Kontaktieren Sie uns

Weitere interessante Artikel

Sie haben Fragen?

Wenn Sie mehr über unsere Angebote erfahren möchten, können Sie uns jederzeit kontaktieren. Gerne erstellen wir eine individuelle Demo für Sie.

assono GmbH

Standort Kiel (Zentrale)
assono GmbH
Lise-Meitner-Straße 1–7
24223 Schwentinental

Standort Hamburg
assono GmbH
Bornkampsweg 58
22761 Hamburg

Telefonnummern:
Zentrale: +49 4307 900 416
Vertrieb: +49 4307 900 402

E-Mail-Adressen:
kontakt@assono.de
bewerbung@assono.de