MSMTP - E-Mails einfach versenden unter Linux

Aus Laub-Home Wiki

MSMTP ist eine sehr gute Alternative zu SSMTP. Mit diesem Tool ist es Möglich ohne einen kompletten Mailserver wie Postfix oder Exim zu installieren und konfigurieren, lokal E-Mails zu versenden. So bekommt man auch alle Systemmails von zum Beispiel cron oder fail2ban. Ich habe das bei mir auf dem Raspberry Pi installiert um Mails via Script verschicken zu können und natürlich um mit zubekommen ob die cronjobs irgendwelche Fehler werfen. Als "Relay" Mailserver habe ich eine Installation von Mailcow im Einsatz. An diesem muss ich um Mails versenden zu können mich via TLS, Benutzername und Passwort anmelden.

Installation msmtp unter Debian / Ubuntu

Die Installation machen wir mittels apt:

apt update && apt install msmtp msmtp-mta mailutils -y

Konfiguration msmtp

Die Konfigurationsdatei muss frisch angelegt werden. Es gibt zwar eine Sample Datei, diese ist jedoch sehr dürftig. Also einfach die Datei mit dem folgenden Inhalt anlegen:

/etc/msmtprc

# Example for a system wide configuration file

# A system wide configuration file is optional.
# If it exists, it usually defines a default account.
# This allows msmtp to be used like /usr/sbin/sendmail.
account YOURMAILADRESS

# The SMTP smarthost
host YOURMAILSERVER

# Use TLS on port 587
port 587
tls on
tls_starttls on

# Construct envelope-from addresses of the form "user@oursite.example"
auto_from on
maildomain yourdomain.tld

# Syslog logging with facility LOG_MAIL instead of the default LOG_USER
syslog LOG_MAIL

from YOURMAILADRESS
auth on
user YOURUSERNAME
password YOURPASSWORD

# Set a default account
# TODO: Use your own mail address
account default: YOURMAILADRESS

# Map local users to mail addresses (for crontab)
aliases /etc/aliases

Nun vergeben wir noch aus Sicherheitsgründen die Dateiberechtigung, das nur Root die Datei lesen und schreiben darf:

chmod 600 /etc/msmtprc

Nun sagen wir dem System noch das es zum Mailen Standardmäßig msmtp nutzen soll, dafür folgende Zeile einfügen:

/etc/mail.rc

set sendmail="/usr/bin/msmtp -t"

Test

Testen können wir das ganze mit dem mail command:

 echo "test 1" | mail -s "test 1" YOUREMAILADRESS

Cron Mails Problematik

Falls ihr cron mails versenden wollt und dies im syslog mit dem folgenden Fehler endet:

sendmail: /etc/aliases: line 2: invalid address 'postmaster'

dann gibt es einen kleinen Trick, ihr müsst an alle User in der /etc/aliases ein @ hängen:

/etc/aliases

# /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: YOURMAILADRESSE
default: YOURMAILADRESSE

Quellen