Einleitung #
Suchen Sie nach einer einfachen Lösung um über fehlschlagende Cronjobs benachrichtigt zu werden? Oder wollen
Sie sonstige Programmausgaben vom Server zugesendet bekommen? Dann kann Ihnen der SMTP-Client msmtp
helfen.
Voraussetzungen #
Für die Umsetzung dieser Anleitung benötigen Sie die folgenden Dinge:
- Ein Linux basiertes Betriebssystem (Wir verwenden Debian)
- Einen SMTP-Server (Entweder selbstgehostet oder über Ihr Mailhosting)
Was ist ein SMTP Client? #
Ein SMTP-Client ist eine Applikation, welche zum Mailversand genutzt wird. Wie der Name schon deuten lässt,
nutzt die Anwendung das Simple Mail Transfer Protocol
(kurz: SMTP). Dieser Client kann genutzt werden, um Nachrichten vom Server an ein Postfach versenden zu lassen. Die
Art der Nachricht ist dabei egal. Häufig wird ein solcher Client verwendet um die Ausgabe von fehlschlagenden Cronjobs zu erhalten. Auch können Sie beispielsweise Fehlversuche bei Anmeldungen mit fail2ban
aufgezeichnen und sich per
Mail benachrichtigen lassen.
Sie sehen also es gibt mehrere Anwendungsfälle, in denen es sinnhaft ist sich E-Mails vom Server zusenden zu lassen. Damit nicht alle Programme einzeln mit dem SMTP-Server kommunizieren müssen, ist es nützlich einen lokalen Client eingerichtet zu haben. Dadurch sparen Sie sich Konfigurationsaufwand und beim Wechsel des Mailproviders oder des SMTP-Zugangs brauchen Sie nur an einer Stelle die Einstellungen ändern.
Konfiguration von msmtp #
In diesem How-To wollen wir mstmp als einen solchen SMTP-Client einrichten. Diese Applikation besticht durch Ihr Leichtgewicht und eine einfache Einrichtung.
Um mit der Einrichtung starten zu können, müssen wir zunächst die folgenden Pakete installieren:
Debian #
apt-get install msmtp msmtp-mta mailutils
Alpine Linux #
apk add msmtp mailutils
Fedora #
dnf install msmtp mailutils
mstmp konfigurieren #
Um msmtp
einzurichten öffnen und editieren Sie die Datei /etc/msmtprc
mit einem Editor Ihrer Wahl.
Wir behandeln die relevanten Anpassungen in einzelnen Schritten:
# Use the mail submission port 587 instead of the SMTP port 25.
port 465
# Always use TLS.
tls on
tls_starttls off
Hier geben Sie den SMTP-Port Ihres Providers an. Gängig sind die Ports 465
und 587
. Port 25
sollte nach Möglichkeit
nicht mehr verwendet werden. Außerdem müssen Sie angeben ob TLS
und/oder STARTTLS
aktiviert werden soll. Eine Erläuterung
zu beiden Optionen finden Sie unter TLS
und STARTTLS
# Mail account
account <NAME_DES_ACCOUNTS> # z.B.: STHEOS
# Host name of the SMTP server
host <SMTP_HOST_NAME> # z.B.: smtp.mailprovider.de
In diesem Abschnitt definieren Sie den Namen des Accounts den Sie einrichten wollen. Diesen Namen können Sie frei definieren.
Die Option host
verlangt nach dem Hostname von Ihrem SMTP-Server. Diesen finden Sie in den Anleitungen
zur Einrichtung eines Email-Clients Ihres Mailproviders.
# This is especially important for mail providers like
# Ionos, 1&1, GMX and web.de
set_from_header on
# Envelope-from address
from <SENDER_EMAIL> # z.B.: sender@example.de
Die Einstellung set_from_header
bewirkt, dass der FROM
Header von msmtp
gesetzt wird. Einige Anbieter
verlangen dies um Emails entgegenzunehmen. Sollten Sie sich nicht sicher sein ob die Option benötigt wird,
probieren Sie beides aus. from
müssen Sie in jedem Fall definieren. Das ist die Mailadresse die als Sender genutzt wird.
Mit eigener Domain und entsprechenden Email Einstellungen können Sie hier beispielsweise hostname@meinedomain.de
eintragen
um zu identifizieren von welchem Host die Mail versandt worden ist.
# Authentication. The password is given using one of five methods, see below.
auth on
user <ANMELDENAME_EMAIL> # z.B.: mailaccount@example.de
# Password method 1: Add the password to the system keyring, and let msmtp get
# it automatically. To set the keyring password using Gnome's libsecret:
# $ secret-tool store --label=msmtp \
# host smtp.freemail.example \
# service smtp \
# user joe.smith
# Password method 2: Store the password in an encrypted file, and tell msmtp
# which command to use to decrypt it. This is usually used with GnuPG, as in
# this example. Usually gpg-agent will ask once for the decryption password.
#passwordeval gpg2 --no-tty -q -d ~/.msmtp-password.gpg
# Password method 3: Store the password directly in this file. Usually it is not
# a good idea to store passwords in plain text files. If you do it anyway, at
# least make sure that this file can only be read by yourself.
password <PASSWORT_EMAIL>
Geben Sie hier an ob eine Authentifizierung gegenüber dem SMTP-Server notwendig ist und wenn ja definieren Sie diese. Der Einfachheit halber nutzen wir in diesem Fall Option 3 und schreiben die Anmeldedaten direkt in die Konfigurationsdatei.
Für den produktiven Einsatz ist diese Option nicht empfohlen. Nutzen Sie hier am besten eine der beiden anderen Varianten.
# Set a default account
account default: <DEFAULT_MAIL_ACCOUNT> # z.B.: STHEOS
# Map local users to mail addresses (for crontab)
aliases /etc/aliases
Im letzen Teil des Skripts definieren wir noch einen Default Account für den Versand von Mails und setzen den Pfad für die Alias-Datei. Diese definieren wir im nächsten Kapitel.
Damit ist die Konfiguration von mstmp
selbst fertig und die Konfigurationsdatei sieht dann in etwa so aus:
/etc/msmtprc
# Set default values for all following accounts.
defaults
# Use the mail submission port 587 instead of the SMTP port 25.
port 465
# Always use TLS.
tls on
tls_starttls off
# Set a list of trusted CAs for TLS. The default is to use system settings, but
# you can select your own file.
# tls_trust_file /etc/ssl/certs/ca-certificates.crt
# Mail account
account <NAME_DES_ACCOUNTS> # z.B.: STHEOS
# Host name of the SMTP server
host <SMTP_HOST_NAME> # z.B.: smtp.mailprovider.de
# This is especially important for mail providers like
# Ionos, 1&1, GMX and web.de
set_from_header on
# Envelope-from address
from <SENDER_EMAIL> # z.B.: sender@example.de
# Authentication. The password is given using one of five methods, see below.
auth on
user <ANMELDENAME_EMAIL> # z.B.: mailaccount@example.de
# Password method 1: Add the password to the system keyring, and let msmtp get
# it automatically. To set the keyring password using Gnome's libsecret:
# $ secret-tool store --label=msmtp \
# host smtp.freemail.example \
# service smtp \
# user joe.smith
# Password method 2: Store the password in an encrypted file, and tell msmtp
# which command to use to decrypt it. This is usually used with GnuPG, as in
# this example. Usually gpg-agent will ask once for the decryption password.
#passwordeval gpg2 --no-tty -q -d ~/.msmtp-password.gpg
# Password method 3: Store the password directly in this file. Usually it is not
# a good idea to store passwords in plain text files. If you do it anyway, at
# least make sure that this file can only be read by yourself.
password <PASSWORT_EMAIL>
# Set a default account
account default: <DEFAULT_MAIL_ACCOUNT> # z.B.: STHEOS
# Map local users to mail addresses (for crontab)
aliases /etc/aliases
Aliase definieren #
Mit der Alias-Datei definieren wir welche aliase für welchen Empfänger genutzt werden. Wie man am Beispiel des
mailer-daeon
sehen kann sind mehrfache Aliase möglich. In unserem Fall werden alle Standardaliase an root
geleitet
und root
hat als Empfänger unsere Email definiert.
/etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
root: <EMPFÄNGER_EMAIL> # z.B.: empfaenger@example.de
Sendmail einrichten #
Um Emails Standardmäßig über msmtp
zu versenden, müssen wir dies in der genannten Datei editieren.
Dadurch wird beim Aufruf von /usr/bin/mail
im Hintergrund msmtp
aufgerufen, die Wahl unseres SMTP-Client bleibt
aber unabhängig.
/etc/mail.rc
set sendmail="/usr/bin/msmtp -t"
Cronjob Ausgaben versenden #
Wenn wir alle Ausgaben nach stdout
die beim Aufrufen von Cronjobs an uns versenden lassen wollen, müssen
wir in der Crontab ganz oben den Parameter MAILTO
definieren. Dazu editieren Sie Datei über
crontab -e
. Nun wird Ihr definierter Editor geöffnet und Sie können die Einstellungen vornehmen.
Das Ergbnis sieht dann wie folgt aus:
MAILTO=<EMPFANGS_EMAIL> # z.B.: root oder empfaenger@example.de
1 2 * * * ...
3 4 * * * ...
Testen der Konfiguration #
Um zu überprüfen ob der neu eingerichtete Mailclient funktioniert, wollen wir ein paar Testmails versenden lassen. Fangen wir mit einer einfach Textmail an:
echo "Dies ist der Inhalt" | /usr/bin/mail -s "Einfache Textmail" root
Der Parameter -s
definiert den Betreff der Email und root
ist in diesem Fall der Empfänger.
Alternativ können Sie Inhalte direkt aus Dateien einlesen. Dies ist zum Beispiel sinnvoll, wenn Sie Errorlogs versenden wollen.
/usr/bin/mail -s "Text aus Datei einlesen" root < /tmp/error.log
Ist die Logdatei zu groß oder wollen Sie mehrere Logdateien versenden, empfiehlt es sich diese Dateien in den Anhang zu setzen. Dies können Sie wie folgt tun:
echo "Inhalt der Mail" | /usr/bin/mail -s "Mail mit Anhängen" -A /tmp/test1.log -A /tmp/test2.log root
Mit dem Parameter -A
können Sie jeweils einen Dateipfad definieren. Diese Datei wird dann als Anhang mit versendet.
Beachten Sie hierbei die maximale Größe einer Email die von Ihrem Mailprovider akzeptiert wird.
Sollten Sie Fragen oder Anregungen haben, scheuen Sie nicht mich über die unten angegebenen Kanäle zu kontaktieren.