Schlagwort-Archive: fetchmail freies Konsolenprogramm

fetchmail ist ein freies Konsolenprogramm. Es holt E-Mails von POP-, IMAP-, ETRN-, oder ODMR-fähigen Mailservern und leitet sie an (E)SMTP- oder LMTP-fähige Mailserver weiter.

fetchmail e-mails abrufen unter Debian 11

E-Mails abrufen und weiterleiten mit fetchmail auf Debian mit Postfix

Das fetchmail Dienstprogramm kann im Daemon-Modus von einem oder mehreren Systemen in Intervalle wiederholt E-Mails abrufen, es werden E-Mails von Servern gesammelt die alle gängigen E-Mail-Abrufdienste unterstützen, wie POP3 und IMAP Protokolle.

In diesem Tutorial wird gezeigt wie fetchmail auf Debian 11 (bullseye) mit Postfix eingesetzt werden kann. Die E-Mails von externen Mail-Dienstanbieter werden abgerufen und an Empfänger zum Postfach Server weitergeleitet dieser vom Smarthost die E-Mails empfängt. Dabei sind bei den Mailkonten keine Weiterleitungen erforderlich, gleichzeitig können die E-Mails durch den Smarthost auf Viren und SPAM untersucht werden, bevor diese dem Benutzer Postfach zugestellt werden.

fetchmail Installation auf Debian

Das fetchmail-Dienstprogramm kann aus dem Debian Standard Repository bereitgestellt werden.

$ sudo apt install -y fetchmail

Den Daemon Modus aktivieren in/etc/default/fetchmail

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

# If you want to specify any additional OPTION to the start
# scripts specify them here
# OPTIONS=...

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

Bei START_DAEMON von no auf yes ändern.

Die globale Recourcen-Konfiguration fetchmailrc für den Betrieb als Daemon erstellen in/etc/fetchmailrc

set daemon 900
set no syslog
set logfile /var/log/fetchmail
set postmaster "postmaster"
set no bouncemail
set no spambounce
set properties ""

poll pop.gmx.net with proto POP3
user 'john@gmx.net' there with password 'M1HXGLKQJ9OZPCA6V34R' is john@foo.org here options ssl sslcommonname mail.gmx.net smtphost localhost

Für jeden Mailserver von diesem E-Mails abgerufen werden, wird eine poll Zeile erstellt. Es wird hier alle 15 Minuten das externe Postfach von john@gmx.net beim POP3 Server mail.gmx.net abgerufen und mit smtphost über localhost zum Postfach Server dem Benutzer john@foo.org zugestellt. Damit die Protokollierung nicht in /var/log/mail.log gelangt, werden anstelle diese in /var/log/fetchmail geloggt.

Der Common Name (CN) aus dem Zertifikat der mit sslcommonname übergeben werden muss, kann mit einem Webbrowser ermittelt werden, oder mit folgenden Kommando in der Linux Shell.

$ openssl s_client -connect pop.gmail.com:995 | grep "CN="
# with Windows OS
C:\> openssl s_client pop.gmail.com:995 | findstr "CN ="

  Unter Windows 10 /11 muss OpenSSL erst bereitgestellt werden, die Binary sind bei slproweb.com verfügbar, oder man installiert das Paket mitwinget install openssl

Mit fetchmail e-mails abrufen

fetchmail bietet eine Reihe von syntaktischen Feinheiten, um das auslesen von fetchmailrc zu erleichtern. Während es möglich ist, Anmeldeinformationen für einen Server in einer Zeile anzugeben, werden häufige Konfigurationen über eine Reihe von verschiedenen Zeilen angegeben. fetchmail ist unempfindlich gegenüber Whitespace, außer wenn das Argument in Anführungs- und Schlusszeichen erfolgt.

Für die Poll-Anweisung gibt es mehrere Optionen (z.B. nofetchall (default), fetchall, keep oder nokeep ).
Die Bedeutungen sind wie folgt:

nofetchall: Nur neue Nachrichten abrufen (Standard). Wenn nichts anderes angegeben ist (z.B. fetchallkeep ), bedeutet dies nofetchall.
fetchall: Holt alle Nachrichten, ob gesehen oder nicht.
keep: Löscht keine Nachrichten auf dem Server.
nokeep: Löscht die gelesenen Nachrichten vom Server.

Besitzer fetchmail für die Datei fetchmailrc setzen.

$ chown fetchmail /etc/fetchmailrc
$ chmod 0600 /etc/fetchmailrc

Der fetchmail daemon wird neu gestartet.

$ systemctl restart fetchmail

Überprüfen lässt sich die fetchmail Konversation zum externen Server mit folgendem Befehl:

$ fetchmail -vv -N --ssl -p pop3 -P 995 -ujohn@gmx.net mail.gmx.net

Die Konfigurationsdatei fetchmailrc testen.

$ fetchmail -v -a -k -f /etc/fetchmailrc

Den fetchmail Prozess überprüfen.

$ ps -ef | grep -v grep | grep fetchmail

Die Ausgabe kann in etwa wie folgt aussehen:

fetchma+ 23566     1  0  2022 ?        00:01:42 fetchmail -vv -d 900 -a -f /etc/fetchmailrc -L /var/log/fetchmail

Die Protokollierung findet nun in der Datei fetchmail statt.

$ tail -f /var/log/fetchmail

In der Log-Datei fetchmail wird in etwa folgendes protokolliert.

fetchmail: awakened at Sat 21 Jan 2023 08:55:45 AM CET
fetchmail: 6.3.24 querying pop.gmx.net (protocol POP3) at Sat 21 Jan 2023 08:55:45 AM CET: poll started
fetchmail: Trying to connect to 212.227.17.169/995...connected.
fetchmail: Certificate chain, from root to peer, starting at depth 2:
fetchmail: Issuer Organization: T-Systems Enterprise Services GmbH
fetchmail: Issuer CommonName: T-TeleSec GlobalRoot Class 3
fetchmail: Server certificate:
fetchmail: Subject CommonName: mail.gmx.net
fetchmail: pop.gmx.net key fingerprint: 36:6D:93:38:DE:58:A2:8B:6D:61:F7:76:1F:56:70:BF
fetchmail: SSL/TLS: using protocol TLSv1.2, cipher ECDHE-RSA-AES256-GCM-SHA384, 256/256 secret/processed bits
fetchmail: POP3< +OK POP server ready H migmx106 1MMFyQ-1p2A592gZq-00YABU
fetchmail: POP3> CAPA
fetchmail: POP3< +OK Capability list follows
fetchmail: POP3< TOP
fetchmail: POP3< UIDL
fetchmail: POP3< USER
fetchmail: POP3< SASL PLAIN
fetchmail: POP3< IMPLEMENTATION trinity
fetchmail: POP3< .
fetchmail: POP3> USER john@gmx.net
fetchmail: POP3< +OK password required for user "john@gmx.net"
fetchmail: POP3> PASS *
fetchmail: POP3< +OK mailbox "john@gmx.net" has 0 messages (0 octets) H migmx106
fetchmail: selecting or re-polling default folder
fetchmail: POP3> STAT
fetchmail: POP3< +OK 0 0
fetchmail: No mail for john@gmx.net at pop.gmx.net
fetchmail: POP3> QUIT
fetchmail: POP3< +OK POP server signing off
fetchmail: 6.3.24 querying pop.gmx.net (protocol POP3) at Sat 21 Jan 2023 08:55:45 AM CET: poll completed
fetchmail: New UID list from pop.gmx.net: <empty>
fetchmail: not swapping UID lists, no UIDs seen this query
fetchmail: Query status=1 (NOMAIL)
fetchmail: sleeping at Sat 21 Jan 2023 08:55:45 AM CET for 900 seconds

  Das Beispiel zeigt eine Login Sequenz in einer etwas verkürzter form.

Die fetchmail man page gibt zahlreiche nützliche Informationen aus.

$ man fetchmail

E-Mails mit fetchmail abrufen

E-Mails mit fetchmail von Server abrufen und weiterleiten

fetchmail ist ein Dienstprogramm zum Abrufen und Weiterleiten von E-Mails; das Unix Urgestein holt E-Mails von Mailservern und leitet diese an das Zustellsystem weiter. Es können die Mails dann unter Verwendung normaler E-Mail-Benutzeragenten wie etwa mutt, elm oder Mail abgerufenen werden.

Was ist fetchmail ?

Das fetchmail-Dienstprogramm kann im Daemon-Modus laufen, um ein oder mehrere Systeme in einem bestimmten Intervall wiederholt abzufragen, es werden E-Mails von Servern gesammelt die alle gängigen E-Mail-Abrufdienste unterstützen, wie POP3 und IMAP, auch unterstützt werden die ESMTP-ETRN-Erweiterung und die ODMR Protokolle.

In diesem Beitrag wird beschrieben wie fetchmail auf einem Linux Smarthost mit Postfix eingesetzt werden kann. Die E-Mails von externen Mail-Dienstanbieter werden abgerufen und den Empfänger zum Postfach Server weitergeleitet dieser vom Smarthost E-Mails empfängt. Dabei sind bei den Mailkonten keine Weiterleitungen erforderlich, und die E-Mails werden durch den Smarthost ebenfalls auf Viren und SPAM untersucht, bevor diese dem Benutzer Postfach zugestellt werden.

fetchmail Installation

Für die Installation auf CentOS 7 wird das Extras repository benötigt, falls nicht schon vorhanden.

$ wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo rpm -Uvh epel-release-latest-7*.rpm

Das fetchmail-Dienstprogramm kann aus dem CentOS Extras repository installiert werden.

$ yum -y install fetchmail

Wir erstellen die Konfigurationsdatei fetchmail für den daemon unter /etc/sysconfig.

# 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

 Copy Paste /etc/sysconfig/fetchmail

Es wird der Daemon Init-Script erstellt, hier für ein CentOS Host auf diesem der Postfix MTA bereits läuft. Als root mit vi /etc/rc.d/init.d/fetchmaild

#!/bin/sh
# chkconfig: 35 99 00
# description: Start and stop fetchmail

. /etc/init.d/functions

start() {
  echo "Starting fetchmaild..."
  su fetchmail -s /bin/sh -c "fetchmail -vv -d 900 -a -f /etc/fetchmailrc -L /var/log/fetchmail"
  }

stop() {
  echo "Shutting down fetchmaild..."
  su fetchmail -s /bin/sh -c "fetchmail --quit"
  }

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    ;;
esac

exit 0

 Copy Paste /etc/rc.d/init.d/fetchmaild
Den Init-Script ausführbar machen.

$ chmod 0755 /etc/rc.d/init.d/fetchmaild

Die globale fetchmailrc Recource Konfiguration für den Betrieb als Daemon erstellen in /etc/fetchmailrc.

set daemon 900
set no syslog
set logfile /var/log/fetchmail
set postmaster "postmaster"
set no bouncemail
set no spambounce
set properties ""

poll mail.foo.org with proto POP3
user 'joe@foo.org' there with password 'secret' is joe.office@foo.com here options fetchall nokeep ssl smtphost localhost

 Copy Paste /etc/fetchmailrc

Für jeden Mailserver von diesem E-Mails abgerufen werden, wird eine poll Zeile erstellt. Es soll das externe Postfach von joe@foo.org beim POP3 Server mail.foo.org abgerufen werden und mit smtphost über den localhost über Postfix zum Postfach Server dem Benutzer joe.office@foo.com zugestellt werden. Damit die Protokollierung nicht in maillog statt findet, werden anstelle diese in fetchmail geloggt.

Möglichkeiten mit fetchmail

fetchmail bietet eine Reihe von syntaktischen Feinheiten, um fetchmailrc das Lesen von Dateien zu erleichtern. Zum Beispiel werden die Worte andwithhaswants, und options von fetchmail ignoriert, wie auch Satzzeichen. Während es möglich ist, Anmeldeinformationen für einen Server in einer Zeile anzugeben, werden häufige Konfigurationen über eine Reihe von verschiedenen Zeilen angegeben. fetchmail ist unempfindlich gegenüber Whitespace, außer wenn das Argument in Anführungs- und Schlusszeichen erfolgt.

fetchmail optionen

Für die Poll-Anweisung gibt es mehrere Optionen (z.B. nofetchall (default), fetchall, keep, nokeep ). Die Bedeutungen ist wie folgt:

nofetchall: Nur neue Nachrichten abrufen (Standard). Wenn nichts anderes angegeben ist (z.B. fetchallkeep ), bedeutet dies nofetchall.
fetchall: Holt alle Nachrichten, ob gesehen oder nicht.
keep: Löscht keine Nachrichten auf dem Server.
nokeep: Löscht die gelesenen Nachrichten vom Server.

Die fetchmail Benutzer und Gruppe erstellen und die rechte setzen.

$ groupadd -r fetchmail
$ useradd -r -m -g fetchmail -s /sbin/nologin fetchmail
$ chown fetchmail /etc/fetchmailrc
$ chmod 0600 /etc/fetchmailrc
$ touch /var/log/fetchmail
$ chown fetchmail:fetchmail /var/log/fetchmail
$ chmod 0600 /var/log/fetchmail

Den fetchmail daemon wird nun gestartet.

$ /etc/rc.d/init.d/fetchmaild start

Nach jeder Änderung der fetchmailrc-Konfiguration wird der systemd daemon neugestartet.

$ systemctl daemon-reload

fetchmail Testen

Überprüfen lässt sich die fetchmail Konversation zum Server mit folgendem Befehl:

$ fetchmail -vv -N --ssl -p pop3 -P 995 -ujoe@foo.org mail.foo.org

Die Konfigurationsdatei fetchmailrc testen.

$ fetchmail -v -a -k -f /etc/fetchmailrc

Den fetchmail Prozess überprüfen.

$ ps -ef | grep -v grep | grep fetchmail

Die Ausgabe kann in etwa wie folgt aussehen:

fetchma+  4126     1  0 19:19 ?        00:00:00 fetchmail -vv -d 900 -a -f /etc/fetchmailrc -L /var/log/fetchmail
root      6488  3985  0 16:25 pts/0    00:00:00 su fetchmail

Die fetchmail Protokollierung findet nun in der Datei fetchmail statt.

$ tail -f /var/log/fetchmail

Die fetchmail man page gibt zahlreiche Informationen aus.

$ man fetchmail