E-Mail Abruf · 4 min read · Jan 01, 2026
E-Mails von Remote-Servern mit getmail abrufen (Debian Etch)
E-Mails von Remote-Servern mit getmail abrufen (Debian Etch)
Version 1.1
Autor: Falko Timme
Getmail ist ein Programm zum Abrufen von E-Mails von Remote-Servern; es ist sehr ähnlich wie fetchmail, aber flexibler. Zum Beispiel kann es so konfiguriert werden, dass E-Mails direkt an ein Maildir- oder mbox-Postfach geliefert werden, ohne dass ein MTA wie Postfix erforderlich ist, aber natürlich kann es die E-Mails auch durch einen MTA leiten, wenn Sie möchten. Getmail kann sogenannte Filter wie SpamAssassin und ClamAV verwenden, um die E-Mails zu scannen, und Sie können getmail sogar anweisen, E-Mails auf dem ursprünglichen Server erst nach einer bestimmten Anzahl von Tagen zu löschen.
Ich gebe keine Garantie, dass dies bei Ihnen funktioniert!
1 Vorbemerkung
Ich habe getmail auf einem Debian Etch-System mit einem lokalen Benutzer namens falko getestet, der die lokale E-Mail-Adresse [email protected] hat.
2 getmail installieren
Um getmail zu installieren, müssen wir nur Folgendes als Root ausführen:
apt-get install getmail43 getmail konfigurieren
Getmail kann über benutzerspezifische Konfigurationsdateien konfiguriert werden, und getmail kann dann von diesem Benutzer ausgeführt werden. Um getmail automatisch auszuführen, können wir einen Cron-Job für diesen Benutzer erstellen.
In diesem Kapitel gehe ich davon aus, dass Sie als Benutzer falko und nicht als Root angemeldet sind!
Getmail sucht nach der Konfigurationsdatei ~/.getmail/getmailrc, also müssen wir zuerst das Verzeichnis ~/.getmail mit Berechtigungen von 0700 erstellen:
mkdir -m 0700 ~/.getmailDann erstellen wir die Konfigurationsdatei ~/.getmail/getmailrc. Eine getmailrc-Datei muss mindestens einen [retriever]-Abschnitt und einen [destination]-Abschnitt haben.
vi ~/.getmail/getmailrc| [retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = [email protected] password = secret [destination] type = Maildir path = ~/Maildir/ |
Das obige Beispiel geht davon aus, dass falko ein Mail-Konto mit dem Benutzernamen [email protected] und dem Passwort secret auf dem Server pop.someprovider.tld hat und dass er ein Maildir-Konto auf diesem Server hat, wobei ~/Maildir/ sein Maildir-Verzeichnis ist.
Das reicht schon aus, um getmail zu konfigurieren. falko könnte jetzt E-Mails vom Remote-Server einfach abrufen, indem er Folgendes ausführt:
getmailNatürlich möchte falko die Abholung nicht manuell alle paar Minuten starten, also erstellen wir einen Cron-Job für ihn. Immer noch als Benutzer falko führen wir aus:
crontab -eund erstellen einen Cron-Job wie diesen (der getmail alle fünf Minuten starten würde):
| */5 * * * * /usr/bin/getmail &> /dev/null |
Angenommen, falko hat kein Maildir-Konto, sondern ein mbox-Konto auf diesem Server (/var/mail/falko). Alles, was wir tun müssen, ist, den [destination]-Abschnitt in ~/.getmail/getmailrc zu ändern, z.B. so:
vi ~/.getmail/getmailrc| [retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = [email protected] password = secret [destination] type = Mboxrd path = /var/mail/falko |
Im nächsten Beispiel möchten wir die E-Mails, die wir vom Remote-Server abrufen, durch einen MTA wie Postfix leiten (ich gehe davon aus, dass Postfix bereits installiert und funktionsfähig ist). Postfix kann dann dafür sorgen, dass die E-Mails an Maildir oder mbox geliefert werden, und es kann auch Spam- und Virenscanner aufrufen, z.B. über amavisd-new.
vi ~/.getmail/getmailrc| [retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = [email protected] password = secret [destination] type = MDA_external path = /usr/sbin/sendmail arguments = ("-i", "-bm", "[email protected]") unixfrom = true |
(Wie Sie sehen, teilen wir getmail mit, dass falkos lokale E-Mail-Adresse [email protected] ist.)
Der -i-Schalter in der Argumentzeile ist wichtig (danke an Chris Moules für den Hinweis):
*Das Problem ist, dass einige E-Mails, wenn sie an sendmail geliefert werden, abgeschnitten werden. Dies kann passieren, wenn der Textkörper der Nachricht, die aus der Quelle abgerufen wird, eine Zeile mit einem einzelnen Punkt (.) enthält. In SMTP wird dies verwendet, um das Ende der Nachricht anzuzeigen. Wenn sendmail über die Befehlszeile aufgerufen wird, ist das Standardverhalten, die Nachricht am EOF oder einem einzelnen Punkt zu beenden.
Zitiere die man-Seite von Postfix sendmail:
Standardmäßig liest Postfix sendmail(1) eine Nachricht von der Standardeingabe bis EOF oder bis es eine Zeile mit nur einem .-Zeichen liest und sorgt für die Zustellung.
–
Zitiere die man-Seite von sendmail:
Ohne Flags liest sendmail seine Standardeingabe bis zum Ende der Datei oder eine Zeile, die nur aus einem einzelnen Punkt besteht, und sendet eine Kopie der dort gefundenen Nachricht an alle aufgeführten Adressen.
–
Ich hatte von Kunden Hinweise erhalten, dass gelegentlich ihre E-Mail ‘beschädigt’, ‘fehlend’ oder ‘abgeschnitten’ war. Nach der Überprüfung der Nachrichten auf unserem Server und dem, was auf ihrem Mailsystem war, war klar, dass es ein Problem gab.
Ein wenig Recherche zeigte, dass das lokale sendmail mit der ‘-i’-Option aufgerufen werden musste:
Zitiere die man-Seite von Postfix sendmail:
-i Wenn eine Nachricht von der Standardeingabe gelesen wird, behandeln Sie eine Zeile mit nur einem .-Zeichen nicht als Ende der Eingabe.
–
Dies lässt sendmail warten, bis das Ende der Datei erreicht ist, bis die Nachricht übermittelt wird.*
Sie können den -i-Schalter mit einer E-Mail wie der folgenden testen:
---
Vier:
....
Drei:
...
Zwei:
..
Eins:
.
---3.1 Optionen
Wir können auch einen [options]-Abschnitt zu ~/.getmail/getmailrc hinzufügen, in dem wir das Standardverhalten von getmail ändern können, z.B. so:
vi ~/.getmail/getmailrc| [...] [options] verbose = 1 read_all = false delete = true message_log_syslog = true |
Die obigen Optionen teilen getmail mit, dass es Nachrichten über abgerufene Nachrichten drucken, nur neue Nachrichten abrufen, Nachrichten nach dem Abrufen vom Remote-Server löschen und in das Syslog protokollieren soll.
Wenn Sie nur E-Mails löschen möchten, die älter als zehn Tage sind, könnten Sie den [options]-Abschnitt wie folgt ändern:
vi ~/.getmail/getmailrc| [...] [options] verbose = 1 read_all = false delete_after = 10 message_log_syslog = true |
Sie können mehr über alle verfügbaren Optionen auf http://pyropus.ca/software/getmail/configuration.html#conf-options erfahren.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.