Raspberry Pi oder Beaglebone Black als Mail-Server nutzen

Wer mit mehr als einem Computer arbeiten, dem dürfte das Problem bekannt sein – die eingehenden und ausgehenden Mails sind in den lokalen Ordnern über mehrere Computer verteilt und oft genug muss eine bestimmte E-Mail auf mehrere Maschinen gesucht werden.

Um das zu vermeiden, könnte ein IMAP-Postfach mit genügend Speicher die Lösung sein. Wenn man aber nicht in der komfortablen Situation sind, dass das jemand bereits für einen erledigt hat, kann man sich mit wenigen Schritten selber einen bauen.

Ich habe beschlossen, meinen Raspberry Pi dafür zu nutzen.

Natürlich gibt es mehr als einen Weg, einen Mail-Server mit Linux aufzusetzen, aber nach einigen Tests fiel meine Wahl auf getmail und dovecot.
Für mich war der Hauptvorteil von getmail, dass kein weiteres Tool wie Postfix benötigt wird, um das Maildir-Format verarbeiten zu können. Und Maildir-Format ist die erste Wahl, denn dort kann man aus seinem E-Mail-Client heraus Unterordner in einem Postfach erstellen und eingehende Mails in die Unterordner einsortieren und ablegen.

Der Plan ist so, dass getmail die EMails aus den verschiedenen Postfächern abholt und sie im lokalen Postfach des jeweiligen Nutzers speichert. Dovecot ist dann für die Auslieferung der Mails an die verschiedenen Nutzer zuständig.
Dazu erstellt man in seinem Mail-Client ein neues Postfach, wo der Posteingangs-Server dann der eigene Server ist.
Anmeldedaten sind dann der Username und das Passwort, die gleich erstellt werden.
Postausgangs-Server bleibt wie gehabt der SMTP-Server des Providers, wie z.B. Web.de oder GMail.

Um also seinen eigenen Mailserver in Betrieb betrieb zu nehmen, müssen zuerst die nötigen Pakete installiert werden.
( Auf dem Raspberry Pi Nutzer root werden mit

sudo su

)

Das geht mit

apt-get install dovecot-imapd getmail4

Vorbereitung von Benutzer und Gruppen

Nach einer frischen Installation ist auf einem Rechner erstmal nur der User „root“ vorhanden bzw. der User „pi“ auf dem Raspberry. Um jetzt verschiedenen Nutzern jeweils ein Postfach zur Verfügung zu stellen, müssen diese Nutzer erstmal erstellt werden.
Das geht mit dem Befehl:

root@server ~ # adduser USER
Lege Benutzer »USER« an ...
Lege neue Gruppe »USER« (9999) an ...
Lege neuen Benutzer »USER« (9999) mit Gruppe »USER« an ...
Erstelle Home-Verzeichnis »/home/USER« ...
Kopiere Dateien aus »/etc/skel« ...
Geben Sie ein neues UNIX-Passwort ein: 
Geben Sie das neue UNIX-Passwort erneut ein: 
passwd: Passwort erfolgreich geändert
Benutzerinformationen für USER werden geändert.
Geben Sie einen neuen Wert an oder drücken Sie ENTER für den Standardwert
	Vollständiger Name []: Your Name
	Zimmernummer []: 
	Telefon geschäftlich []: 
	Telefon privat []: 
	Sonstiges []: 
Sind die Informationen korrekt? [J/n] 

Der Name USER muss natürlich geändert werden und ist frei wählbar.

Jetzt muss noch für jeden Nutzer das Mail-Verzeichnis anlegt und die nötigen Berechtigungen gesetzt werden mit:

mkdir /home/USER/Maildir
chown -R USER:mail /home/USER/Maildir
chmod -R 770 /home/USER/Maildir

Wenn dovecot installiert wurde, ist ihm per default noch keine Gruppe zugewiesen. Um dovecot also die benötigten Rechte zu geben, damit es sicher mit den Mailboxen umgehen kann, sollte ihm eine Gruppe zugewiesen werden. Das ist in der Regel die Gruppe ‚mail‘.
Also erstmal die Gruppe ‚mail‘ erstellen mit dem Befehl

groupadd mail

Sollte die Gruppe bereits vorhanden sein, kommt eine kurze Benachrichtigung. Kein Problem.
Nun muss dovecot dieser Gruppe hinzugefügt werden mit dem Befehl

usermod -G mail dovecot

Danach müssen Sie einige Änderungen in der Konfigurationsdatei von dovecot vornehmen, damit dovecot weiß , wo die Mails gespeichert werden. Diese Parameter werden in der Datei dovecot.conf gesetzt.

nano /etc/dovecot/dovecot.conf

In dieser Datei dann folgende Zeilen hinzufügen bzw. auskommentieren:

 
listen=*

mail_location = maildir: ~/Maildir:LAYOUT=fs
mail_access_groups = mail 

Damit bekommt dovecot mitgeteilt, dass es auf jede eingehende IPv4-Verbindung hören soll, dass der Ordner der gespeicherten E-Mails in dem Home-Verzeichnis des Benutzers liegt und den Namen Maildir hat, dass die E-Mails im maildir-format gespeichert sind und dass es zu der System-Gruppe ‚mail‘ gehört.

Das ist alles, was bei dovecot getan werden muss.

Jetzt muss noch getmail konfiguriert werden.

Die Konfiguration von getmail erfolgt in dem .getmail/ Ordner im Home-Verzeichnis eines jeden Benutzers. Die Konfiguration wird in einer Ressource-Datei gespeichert. Wenn mehrere Mail-Konten vorhanden sind, muss für jedes Konto eine eigene Resource-Datei in dem ~.getmail/-Verzeichnis angelegt werden. Die Namen der Ressource-Dateien sind dabei beliebig. Also Verzeichniss erstellen und die nötigen Berechtigungen setzen mit den folgenden Befehlen:

 mkdir /home/USER/.getmail/
chmod 700 /home/USER/.getmail/ 

Jetzt müssen die Recource-Dateien für die einzelnen Mail-Konten in dem /.getmail/-Verzeichnis erstellt werden.
Um eine Recource-Datei für z.B. ein Google-Konto zu erstellen, geben sie

 nano .getmail/myGoogleAccount 

und fügen Sie die folgenden Zeilen hinzu.

 
[Retriever]
type = SimplePOP3SSLRetriever
server = pop.gmail.com
port = 995
username = Ihr-Benutzername
Passwort = Ihr-Passwort

[destination]
type = Maildir
path = ~/Maildir

[options]
delete = true
verbose = 1 

Eine vollständige Dokumentation der Ressource-Dateien gibt es z.B. hier

Nach dem Speichern der Datei können Sie die Konfiguration testen mit dem Befehl

getmail --rcfile myGoogleAccount

Wenn alles geklappt hat sollte in etwa Folgendes erscheinen

getmail version 4.xxx.xxx
Copyright (C) 1998-2012 Charles Cazabon.  Licensed under the GNU GPL version 2.
SimplePOP3SSLRetriever:Ihr-Benutzername@pop.gmail.com:995:
  0 messages (0 bytes) retrieved, 0 skipped

Anschließend sollte der verbose-level in der Resource-Datei wieder auf 0 gestellt werden (verbose= 0), um unerwünschte Ausgaben zu vermeiden.

Leider läuft getmail bislang nicht als Daemon. Daher muss für die automatische Abholung der Mails alles x Minuten ein entsprechender cron-job erstellt werden.

Um jetzt die CRon-Tabelle des Nutzers USER zu bearbeiten, muss man mit

su - USER

zum entsprechenden Nutzer werden.

Jetzt mit dem Befehl

crontab -e

die CRon-Tabelle öffnen.

Tip: Auf dem Banana Pi ist als Standard-Editor der vi eingestellt. Wenn man lieber mit nano arbeiten möchte, geht das mit

EDITOR=nano crontab -e

Damit wird die Tabelle mit den Cron-Aufgaben (crontab) im Standard-Text-Editor geöffnet.
Damit getmail nun alle 10 Minuten automatisch die Mails aus den einzelnen Postfächern abholt, fügen Sie diese Zeile hinzu

*/10 * * * * getmail --rcfile myGoogleAccount (--rcfile anOtherAccount)

Wenn nicht anders eingestellt, sollte sich die crontab auf einem Beaglebone oder einem Raspberry in dem Editor Nano geöffnet haben. Also mit strg+o die crontab abspeichern und mit strg+x den Editor schließen.

Eine detailliertere Beschreibung von cron gibt es hier

Jetzt noch die Datei abspeichern und Fertig!!

14 Gedanken zu “Raspberry Pi oder Beaglebone Black als Mail-Server nutzen

  1. Hallo Bjoern,
    Glückwunsch für die einfache Darstellung des Aufgabe. Dies ist die einfachste Beschreibung die ich bislang gefunden habe.

    Eine Frage hätte ich aber:
    Da ja oftmals der Wunsch besteht von vielen Geräten auf die mails zugreifen zu können, entsteht folgendes Problem: Gesendete Dateien werden nur auf dem gesendeten Gerät angezeigt. Hier würde sich doch anbieten die ges. mails beim Hosten zu speichern und wie eingehende mails abzurufen.
    Wie würden diese mails aus send abgerufen und gleichzeitig als gelesen markiert?

    Danke für Hinweise
    Martin

    • Hey Martin

      Das ist eigentlich gar kein Problem. Ich habe das im E-Mail-Client ( bei mir Thunderbird ) geregelt. Dort kannst du einstellen, wo er Kopien der gesendeten Nachrichten speichern soll ( im Thunderbird unter Konten-Einstellungen / Kopien und Ordner ).
      Da gibst du dann einen Ordner deiner Wahl auf deinem Server an und das war es.
      Leider habe ich im mobilen Sektor unter Android noch nichts gefunden, das das kann – aber vom Computer geht es so erstmal.

      Ich hoffe, das war das, was du gesucht hast.

      Gruß Bjoern

  2. Könntest du vielleicht noch hinzufügen, wie man die E-mails dann letztendlich abruft bzw. was für Kontoeinstellungen man in seinem Mailclient einstellen muss. Das wäre echt super!

    • Hey Jan

      Na die Mails rufst du ganz normal mit einem Mail-Client ab. Als Server-Adresse stellst du dann die Adresse deines Pis ein und als Postfachart nimmst du IMAP. Das war es auch schon.

      Eine andere Möglichkeit ist, dass du zum Beispiel Programme wie Roundcube installierst. Damit kannst du dann über eine Weboberfläche an deine Mails.

      Gruß Bjoern

  3. Hallo Bjoern,
    ich bin auch dabei, einen IMAP Server auf meinem Raspberry zu installieren…
    Das Installieren klappt auch alles, jedoch habe ich Probleme mich mit ihm zu verbinden. Ich verwende SSL und die Authentifizierung funktioniert nicht…

    Hättest du Zeit und Lust dieses Tutorial um SSL (IMAPS) zu erweitern?

    LG
    samuel

    • Hey Samuel

      Ich verwende für meinen IMAP auch SSL.
      Ich schreibe mal die Verbindungsdaten:
      Server ist natürlich die Adresse/IP von deinem Raspberry
      Port: 993
      Verbindungssicherheit: SSL/TLS

      Zusätzlich musst du noch darauf achten, dass an deinem Router der entsprechende Port frei geschaltet ist, wenn du von außen darauf zugreifen möchtest.

      Ich hoffe, das hilft weiter

      Gruß Bjoern

      • Hey, danke fürs Antworten 🙂

        Nach anfänglichen Schwierigkeiten, hatte ich das „Problem“ (konnte private key nicht parsen) mit dem Zertifikat gelöst. telnet hat funktioniert.

        Jedoch komm ich mit den Thunderbird immer noch nicht drauf. Er brachte iein Problem mit dem „user“ in den Logs. (Authentifizierung meine ich)

        Ich habe inzwischen dovecot neu installiert und vesuche mich damit gerade nochmal neu. Werde dann wenn ich Zeit habe weiter testen und hier mehr Details zu dem Fehler posten.

        Aber schon mal vielen Dank für Hilfe 🙂

      • Dann melde ich mich mal zurück 😉

        Darf ich dich fragen, wie du die Authentifizierung in deiner Konfiguration gestaltest? Hab da meine Problem mit 😉

      • Das ist der Fehler in den Logs:
        —–
        Feb 05 17:00:25 auth: Fatal: No passdbs specified in configuration file. PLAIN mechanism needs one
        Feb 05 17:00:25 master: Error: service(auth): command startup failed, throttling for 2 secs
        —–

        Ich werde nur nicht so schlau draus, was er konkret von mir will.
        Wenn ich zur Authentifizierung in der Config nichts angebe, müsste der doch die lokalen Benutzer zur Authentifizierung verwenden oder?

        • Hey Samuel

          Gib mal den Befehl
          doveconf -n
          Ein und vergleich mal die Ausgaben. Ich hab nur die relevanten Sachen rein kopiert.

          root@bananaserv ~ # doveconf -n                                                                                     # 2.1.7: /etc/dovecot/dovecot.conf
          # OS: Linux 3.4.104+ armv7l Debian 7.9
          mail_access_groups = mail
          mail_location = maildir:~/.Maildir:LAYOUT=fs
          [ ...... ]
          passdb {
            driver = pam
          }
          [ ...... ]
          ssl_cert = 
          
          Gruß Bjoern
          • Hey Danke fürs Antworten 🙂

            Das mit dem passdb hat bei mir gefehlt.
            Habs eingefügt und siehe da, er bringt den Fehler in der Log nicht mehr 🙂

            Leider komm ich mit Thunderbird aber immer noch nicht drauf :/
            Wenn ich folgenden Befehl eingebe
            >telnet ‚IP‘ 993 -l ‚user’Trying 192.168.0.161…
            Connected to 192.168.0.161.
            Escape character is ‚^]‘. Connection closed by foreign host. <
            Jedoch kein fehler in den Logs…

            Was mach ich falsch? :/

          • Oh, iwie ist das die Formatierung verloren gegangen…

            telnet verbindet sich, wenn ichmich dann aber versuche einzuloggen kommt:
            Connection closed by foreign host.

            Sorry wenn ich dich damit belästige. Bitte antworte nur, wenn du auch die Zeit und den Nerv dazu hast!

          • Hey

            Du belästigst doch hier keinen. Dafür ist die Seite doch schließlich da. Leider habe ich zur Zeit leider nicht sehr viel Zeit, mich um die Seite zu kümmern.
            Außerdem weiß ich gerade auch nicht mehr so wirklich, wie ich dir da weiter helfen kann.
            Was du noch versuchen kannst, ist aus Thunderbird heraus ein Log-File zu erzeugen und nachschauen, od ihm noch irgendwas nicht passt.

            Wie das geht, steht hier beschrieben:
            https://wiki.mozilla.org/MailNews:Logging#imap

            Gruß Bjoern

          • Also,

            ich hab mal noch

            userdb {
            driver = passwd
            }

            mit in die conf übernommen und dann versucht mit:
            openssl s_client -connect IP:993
            drauf zu kommen und siehe da, es funktioniert und ich kann mich auch einloggen, er findet auch die INBOX etc 🙂

            Jedoch komm ich mit Thunderbird nicht drauf :/

            (http://wiki2.dovecot.org/TestInstallation)

Schreibe einen Kommentar