Abrufen von E-Mails auf entfernten Servern mit fetchmail (Debian Etch)

Version 1.0
Author: Falko Timme <ft [at] falkotimme [dot] com>

Fetchmail ist ein Programm zum Abrufen von E-Mails auf entfernten Servern. Stell Dir vor, Du hast fünf E-Mail Konten auf fünf verschiedenen Servern. Natürlich möchtest Du Dich nicht mit jedem einzelnen verbinden, um Deine E-Mails zu erhalten. Hier kommt fetchmail ins Spiel. Wenn Du ein Benutzerkonto auf einem Linux Server hast, kannst Du fetchmail veranlassen, E-Mails von entfernten Servern runterzuladen und sie in nur eine Mailbox (die, Deines Linux Benutzers) zu stecken, von der aus Du sie mit Deinem E-Mail Klienten abrufen kannst (z.B. Thunderbird oder Outlook).

Oder stell Dir vor, Du hast ein E-Mail Konto bei einem Anbieter, bei dem eine Spam-und Virusfilterung nicht integriert ist. In diesem Fall könntest Du fetchmail verwenden, die Mails auf Deinen eigenen Server runter zu laden und sie durch Spam- und Virusfilter zu leiten (z.B. SpamAssassin und ClamAV), bevor Du die Mails mit Deinem E-Mail Klienten runter lädst.

Ich übernehem keine Garantie, dass dies auch bei Dir funktioniern wird!

1 Vorbemerkung

Du benötigst einen Linux Server mit einem System Benutzer, der E-Mails erhalten kann, was bedeutet, dass ein MTA wie zum Beispiel Postfix oder Sendmail auf dem System installiert sein muss. Anderenfalls funktioniert fetchmail nicht, da es versucht, die runter geladenen E-Mails zu einem MTA zu leiten (Postfix, Sendmail, …) und der MTA liefert die Mails zur Mailbox des Benutzers (Du kannst das System konfigurieren, dass es eine Spam- und Virusüberprüfung in den Prozess einschließt, z.B. mit amavisd-new oder procmail, aber dies wird in dieser Anleitung nicht abgedeckt).

In dieser Anleitung verwende ich ein Debian Etch System, in dem die beiden Benutzer falko und till vorhanden sind.

2 Installiere fetchmail

Um fetchmail zu installieren, brauchen wir nur Folgendes laufen lassen

apt-get install fetchmail

3 Konfiguriere fetchmail

Es gibt zwei Varianten fetchmail zu konfigurieren. Mit einer globalen Konfigurationsdatei können wir es als Daemon laufen lassen oder wir erstellen einen Cron Job um fetchmail zusammen mit Konfigurationsdateien pro Benutzer laufen zu lassen. Ich werde hier beide Varianten erklären.

3.1 fetchmail Als Daemon Mit Einer Globalen Konfigurationsdatei Laufen Lassen

Um fetchmail als Daemon laufen zu lassen, müssen wir /etc/default/fetchmail ändern und START_DAEMON auf yes stellen:

vi /etc/default/fetchmail

# This file will be used to declare some vars for fetchmail
#
# Uncomment the following if you dont want localized log messages
# export LC_ALL=C

# Declare here if we want to start fetchmail. 'yes' or 'no'
START_DAEMON=yes

Als Nächstes müssen wir die Konfigurationsdatei /etc/fetchmailrc erstellen, da der fetchmail daemon nicht starten wird, wenn diese Datei nicht existiert. In dieser Datei können wir festlegen, wie sich der fetchmail Daemon verhalten soll. Wir können weiterhin die Angaben festlegen, die fetchmail benötigt, um zu wissen, dass es E-Mails von fremden E-Mail Konten abrufen soll.

Wir nehmen mal an, dass falko zwei E-Mail Konten hat, von denen wir E-Mails abrufen wollen:

  • Erstes Konto: Server pop.someprovider.tld, Protokoll POP3, Benutzername falko@someprovider.tld (ja, der Benutzername ist in diesem Fall eine E-Mail Adresse), Passwort secret.
  • Zweites Konto: Server mail.otherprovider.tld, Protokoll POP3, Benutzername ftimme, Passwort verysecurepassword.

till hat ein E-Mail Konto:

  • Server mailin.tillsprovider.tld, Protokoll POP3, Benutzername tbrehm, Passwort iwonttellyou.

Also könnte unsere Datei /etc/fetchmailrc wie folgt aussehen:

vi /etc/fetchmailrc

# /etc/fetchmailrc for system-wide daemon mode
# This file must be chmod 0600, owner fetchmail

set daemon        300                # Pool every 5 minutes
set syslog                        # log through syslog facility
set postmaster  root

set no bouncemail                # avoid loss on 4xx errors
                                # on the other hand, 5xx errors get
                                # more dangerous...

##########################################################################
# Hosts to pool
##########################################################################

# Defaults ===============================================================
# Set antispam to -1, since it is far safer to use that together with
# no bouncemail
defaults:
timeout 300
antispam -1
batchlimit 100

poll pop.someprovider.tld protocol POP3 user "falko@someprovider.tld" there with password "secret" is falko here
poll mail.otherprovider.tld protocol POP3 user "ftimme" there with password "verysecurepassword" is falko here fetchall
poll mailin.tillsprovider.tld protocol POP3 user "tbrehm" there with password "iwonttellyou" is till here keep

Am Anfang der Datei haben wir einige allgemeine Optionen wie set daemon 300 (was bedeutet, dass fetchmail alle 300 Sekunden E-Mails abrufen soll), die die Funktion des Programmes kontrollieren. Die Bedeutung der obrigen Optionen ist folgende:

  • set daemon: Setze ein Hintergrund-Abfrage-Intervall in Sekunden fest.
  • set syslog: Error-logging mit syslog.
  • set postmaster: Gib den Namen desjenigen an, der Mails empfängt, wenn kein anderer Empfänger mehr da ist (Standard: der Benutzer, unter dem fetchmail läuft, „postmaster“ falls es unter dem Root Benutzer läuft).
  • set no bouncemail: Leite Fehler-Mails zum lokalen Postmaster um (siehe die obige „postmaster“ Option).

Dann haben wir die Server- und Benutzer-Optionen. Diese gehören in die Zeilen, die mit poll anfangen; Optionen, die für alle poll Zeilen gleich sind, können auch vor den poll Zeilen in einem Bereich eingegeben werden, der mit defaults: (wie zum Beispiel timeout, antispam, and batchlimit) anfängt.

  • timeout: Timeout nach einer bestimmten Server-Inaktivität (Standard 300 Sekunden).
  • antispam: Lege fest, welche SMTP-Antworten als spam-policy blocks interpretiert werden.
  • batchlimit: Lege die maximale Anzahl an Nachrichten fest, die an einen SMTP Server weiter gereicht werden, bevor die Verbindung abgebrochen und wieder neu aufgebaut wird (Standard ist 0, heißt kein Limit).

Die poll Zeilen sind selbsterklärend; wie Du siehst, ruft fetchmail E-Mails von falkos beiden externen Konten ab und steckt sie in ein Konto.

Du wirst feststellen, dass die poll Zeilen verschiedene Endungen haben (z.B. nofetchall (Standard), fetchall, keep, nokeep). Hier sind ihre Bedeutungen:

  • nofetchall: Nur neue Nachrichten abrufen (Standard). Wenn nichts anderes festgelegt ist (z.B. fetchall, keep), bedeutet dies nofetchall.
  • fetchall: Alle Nachrichten abrufen, egal ob gelsesen oder nicht.
  • keep: Lösche keine gelesenen Nachrichten auf dem Server.
  • nokeep: Lösche gelesene Nachrichten auf dem Server.

Um mehr über alle verfügbaren Konfigurationseinstellungen zu erfahren, sieh Dir Folgendes an

man fetchmail

/etc/fetchmailrc muss 600 Berechtigungen haben und muss dem Benutzer fetchmail gehören, also führen wir Folgendes aus:

chmod 600 /etc/fetchmailrc
chown fetchmail /etc/fetchmailrc

Letztendlich können wir fetchmail starten:

/etc/init.d/fetchmail start

Fetchmail sollte nun E-Mails runter laden und sie in falkos und tills Mailboxes leiten (unter Verwendung von MTA). Es wiederhot diesen Vorgang jede set daemon Sekunden.

3.2 Verwende Konfigurationsdateien Pro Benutzer Und Lasse fetchmail Via Cron Laufen

Anstelle einer globalen Konfigurationsdatei wie in Kapitel 3.1 gezeigt wurde, können wir Konfigurationsdateien pro Benutzer verwenden. Diese müssen die Bezeichnung .fetchmailrc haben und in der homedir des Benutzers angeordnet sein.

Wir möchten eine solche Datei nun für den Benutzer falko anlegen. Pass auf, dass Du als falko und nicht als root angemeldet bist! Dann führen wir Folgendes aus:

cd ~/
vi .fetchmailrc

set postmaster falko
set bouncemail

poll pop.someprovider.tld protocol POP3 user "falko@someprovider.tld" there with password "secret"
poll mail.otherprovider.tld protocol POP3 user "ftimme" there with password "verysecurepassword" fetchall

Die Datei sieht der Datei /etc/fetchmailrc aus Kapitel 3.1 sehr ähnlich. Jedoch wirst Du feststellen, dass ich die Phrase is falko here nicht mehr verwende (da .fetchmailrc in falkos homedir ist, weiß fetchmail, dass die Mails an falko geschickt werden sollen). Natürlich kannst Du is falko here noch verwenden, die Datei könnte also auch wie folgt aussehen:

set postmaster falko
set bouncemail

poll pop.someprovider.tld protocol POP3 user "falko@someprovider.tld" there with password "secret" is falko here
poll mail.otherprovider.tld protocol POP3 user "ftimme" there with password "verysecurepassword" is falko here fetchall

Um mehr über alle verfügbaren Konfigurationseinstellungen zu erfahren, sieh Dir Folgendes an

man fetchmail

.fetchmailrc muss 600 Berechtigungen haben, sodass nur falko darin lesen/schreiben kann:

chmod 600 ~/.fetchmailrc

Das war’s. Nun kann falko den Vorgang starten und seine E-Mails abrufen indem er Folgendes laufen lässt

fetchmail

oder

fetchmail -v

was anzeigt, was vor sich geht.

Natürlich möchte falko das Abrufen nicht aller paar Minuten manuell starten, also erstellen wir einen Cron Job für ihn. Immer noch als Benutzer falko lassen wir dies laufen

crontab -e

und erstellen einen Cron Job wie diesen (dieser würde fetchmail aller fünf Minuten starten):

*/5 * * * * /usr/bin/fetchmail &> /dev/null

4 Links

Das könnte dich auch interessieren …