Nullmailer

Aus Leupers.net-Wiki
Wechseln zu: Navigation, Suche

Allgemein

Nullmailer ist ein kleiner, einfacher, aber für viele Zwecke ausreichender Mailserver, der z. B. bei Raspian auf dem Raspberry Pi als leichtgewichtiger Ersatz für das große sendmail-Paket dient.


Mir war eines Tages aufgefallen, dass auf meinem kleinen, aber feinen Raspberry-basierten FHEM-Server im System-Log

/var/log/syslog

sehr oft Meldungen der folgenden Art auftauchten:

Mar 14 06:25:40 fhem nullmailer[2198]: Starting delivery: protocol: smtp host: mail file: 1408745098.16339
Mar 14 06:25:40 fhem nullmailer[2198]: Starting delivery, 66 message(s) in queue.
Mar 14 06:25:40 fhem nullmailer[27664]: smtp: Failed: Connect failed
Mar 14 06:25:40 fhem nullmailer[2198]: Sending failed:  Host not found

Ups, was ist denn das?

Oh, nullmailer ist ein kleiner Mailserver auf meinem Raspberry, den ich aber bisher nicht konfiguriert habe.
Na, dann los...


Konfiguration

Erst mal ins Konfigurationsverzeichnis wechseln:

$ cd /etc/nullmailer

Ausgehender SMTP-Server

Zunächst sorgen wir dafür, dass die Fehlermeldung von oben verschwindet. Dazu müssen wir zunächst den SMTP-Server für ausgehende Mails konfigurieren:

$ sudo vi remotes

Hier trägt man i.d.R. eine der folgenden Zeilen ein; je nachdem, ob der eigene Provider SSL oder TLS anbietet:

smtp.mymailserver.de smtp --port=465 --auth-login --user=user@mydomain.de --pass=myPassword --ssl
smtp.mymailserver.de smtp --port=587 --auth-login --user=user@mydomain.de --pass=myPassword --starttls

Statt smtp.mymailserver.de müsst man natürlich den SMTP-Server des eigenen Anbieters eintragen. Beispiele:

  • 1&1: smtp.1und1.de (SSL oder TLS)
  • Gmail: smtp.gmail.com (SSL)
  • ...

Klar, dass auch "user@mydomain.de" und "myPassword" angepasst werden müssen... ;-)

Default-Domain und Default-Host

Das nächste Problem ist, dass der Standard-Absender der System-Nachrichten lautet:

user@myhost

Bei meinem kleinen FHEM-Server mit dem Hostnamen "fhem" dann eben beispielsweise:

root@fhem

Das ist natürlich für meinen Email-Provider kein gültiger Absender. Wenn die eigene Domain lautet "mydomain.de", trägt man dann also das in die bereits vorhandenen, aber bisher leere Datei defaultdomain ein:

$ sudo vi defaultdomain

Inhalt:

mydomain.de

Im Prinzip hat das geklappt, aber die Absendeadresse war jetzt:

user@host.domain

Also beispielsweise:

root@fhem.mydomain.de

Das wird natürlich auch nicht akzeptiert, weil es den Host "fhem.mydomain.de" natürlich offiziell nicht gibt. Es werden nur Mails von/an "user@mydomain.de" (ohne den Hostnamen dazwischen) akzeptiert.

Den Hostnamen holt sich der nullmailer normalerweise automatisch vom System, welchem man sich auch mit dem Befehl "hostname" anzeigen lassen kann.
Man kann den Hostnamen, den nullmailer verwenden soll, aber auch selbst festlegen, indem man ihn in die - standardmäßig nicht existierende - Datei "defaulthost" schreibt. Hier könnte man also auch "fhem42" eintragen. Nullmailer fügt dann diesen Hostnamen aus defaulthost (statt des System-Hostnamens) mit der defaultdomain zusammen, was "fhem42.mydomain.de" ergeben würde.
Wenn aber - und das ist hier der Trick - in defaulthost ein Punkt vorkommt, hängt nullmailer die defaultdomain nicht mehr an. Wir können also den kompletten gewünschten Namen (FQDN = Fully Qualified Domain Name) eintragen, der dem "@" folgen soll.

Wenn man nun also die defaulthost Datei anlegt:

$ sudo vi defaulthost

und dort ebenfalls nur

mydomain.de

reinschreibt, werden die Mails unter der Adresse

root@mydomain.de

u.ä. verschickt, was bei meinem Hoster funktioniert. Übrigends: Auch Mails an diese Adresse kommen bei mir an, da ich die Wildcard-Adresse "*@mydomain.de" auf meinen normalen Nutzer-Account weitergeleitet habe. :-)

Umleitung von Mails

Zwar könnten nun Mails an normale Emailadressen im Internet geschickt werden, aber System-Mails gehen meist an lokale Accounts. Daher richtet man am besten noch eine Weiterleitung an die eigenen Adresse ein, so dass keine Mails auf dem im Hintergrund werkelnden Raspi bleiben, sondern immer direkt zugestellt werden:

$ sudo vi adminaddr

Da kommt dann die eigene "normale" Adresse rein, auf der man alle System-Mails bekommen möchte. Also z. B.:

myaccount@mydomain.de

Änderungen aktivieren und testen

Am Schluss müssen die Änderungen natürlich noch aktiviert werden. Dazu den Service neu starten

$ sudo service nullmailer restart

Starten, stoppen bzw. Status-Check geht - wie üblich - über "start", "stop" und "status", statt "restart".


Eine Testmail kann man dann auch ganz einfach auf der Kommandozeile verschicken; z. B. als User "pi":

$ echo "My Test Message" | sendmail myaccount@mydomain.de

Im Postfach von myaccount@mydomain.de sollte dann kurze Zeit später eine Email ohne Subject vom Absender "pi@mydomain.de" mit dem Mailinhalt "My Test Message" erscheinen. :-)

Falls nicht, solltet man einen Blick in

/var/log/syslog

oder

/var/log/mail.log

werfen, um zu sehen, ob bzw. welche Fehlermeldung nullmailer ausgibt.


Quellen und weitere Infos