DecaTec

Home-Server | Linux | Nextcloud | Raspberry Pi | Programmierung | Fotografie

Linux: Einfach E-Mails versenden mit msmtp

Linux Mail Logo

Oftmals macht es Sinn, wenn man von einem Linux-System direkt eine E-Mail senden kann. Anwendungsbeispiele wären z.B. der Versand einer Mail, wenn ein Cronjob fehlschlägt oder auch eine Benachrichtigung, wenn durch fail2ban eine IP auf Grund zu vieler fehlgeschlagener Anmeldeversuche gebannt wurde.

Nun könnte man einfach einen Mail Transfer Agent, wie z.B. Sendmail oder Postfix auf dem System aufsetzen. Allerdings ist es recht umständlich einen „echten“ Mail-Server zu betreiben, v.a. wenn man nur einfache Mails zur Benachrichtigung versenden will.

Hierzu gibt es dann einfache Programme, die nicht mit einem echten Mailserver zu vergleichen sind, sondern die einfach Mails an einen bereits bestehenden STMP-Server senden können – dazu braucht man einfach nur einen SMTP-Client).

Vor einiger Zeit habe ich in diesem Blog schon mal den SMTP-Client sSMTP vorgestellt. Heute will ich eine Alternative dazu vorstellen: msmtp

Auch wenn der Artikel auf Ubuntu 18.04 basiert, sollte es kein Problem sein, das gezeigte Vorgehen auf anderen Systemen/Distributionen umzusetzen.

Update-Historie (letztes Update 31.08.2019)
  • 31.08.2019:
    • Anpassungen für /etc/mail.rc ist notwendig, damit Mails versendet werden können.
    • Hinweise hinzugefügt, wenn Mails auch von anderen Benutzern (ohne Root-Rechte) versendet werden sollen.
  • 16.05.2019:
    • Reihenfolge der auszuführenden Schritte verändert: Der Alias muss noch vor dem Versenden der Test-Mail gesetzt werden.

 

sSMTP läuft doch problemlos – was spricht dagegen?

Ich habe mit sSMTP immer gute Erfahrungen gemacht. Jedoch wird dieses Programm nicht mehr weiterentwickelt (Quelle: Arch Wiki). Dadurch kann ich sSMTP nicht mehr ohne Einschränkungen empfehlen. Wenn beispielsweise Bugs oder Sicherheitslücken gefunden werden, ist es fraglich, ob diese noch ausgebaut werden.

Generell sollte man aus diesen Gründen Abstand von Software nehmen, die nicht mehr aktiv weiterentwickelt wird. Trotzdem soll das nun nicht heißen, dass man sSMTP ab sofort nicht mehr verwenden sollte: Wer sSMTP bereits eingerichtet hat und damit keine Probleme hat, muss sich nun nicht sofort nach einer Alternative umsehen – trotzdem sollte man über kurz oder lang über ein „Update“ zu msmtp nachdenken.

Wer aber gerade auf der Suche nach einem leichtgewichtigen SMTP-Client ist, der sollte lieber gleich zu msmtp greifen.

Installation und Konfiguration vom msmtp

Zunächst bringen wir das System wie immer auf den neusten Stand:

apt-get update && apt-get upgrade -V

Anschließend wird msmtp installiert:

apt-get install msmtp msmtp-mta mailutils

Das Paket mailutils wird zwar nicht unbedingt benötigt, jedoch ist dies beim späteren Verwenden von Mails sehr hilfreich,.

Für die Konfiguration des Programms gibt es zwei unterschiedliche Konfigurations-Dateien:

  • Eine systemweite Konfiguration
  • Eine benutzerspezifische Konfiguration.

Wo diese unterschiedlichen Konfigurations-Dateien gespeichert sind, ermittelt man einfach mit folgendem Befehl:

msmtp --version

Für das weitere Vorgehen nutzen wir hier die systemweite Konfiguration, da E-Mails nur vom System selbst verschickt werden sollen (z.B. bei fehlgeschlagenen Cronjobs).

msmtp: Speicherort der Konfigurations-Dateien

msmtp: Speicherort der Konfigurations-Dateien

Beide Dateien sind nach einer neuen Installation nicht vorhanden (so dass man diese einfach nur auf die eigenen Bedürfnisse abändern könnte), allerdings gibt es auf der Website von msmtp eine Beispiel-Konfiguration.

Für die systemweite Konfiguration wird nun folgende Datei bearbeitet:

nano /etc/msmtprc

Hinweis: Mit dieser Konfiguration ist es nur als Root-User möglich, E-Mails zu versenden. Wenn weiteren Benutzern diese Möglichkeit gegeben werden soll, müssen diese Benutzer eine User-spezifische Konfigurations-Datei anlegen:

nano ~/.msmtprc

Inhaltlich sind die Dateien (systemweite und benutzerspezifische Konfiguration) gleich aufgebaut. Der Inhalt kann beispielsweise so aussehen (hier am Beispiel eines fiktiven Mail-Accounts meinedomain.de):

# Set default values for all following accounts.
defaults

# Use the mail submission port 587 instead of the SMTP port 25.
port 587

# Always use TLS.
tls on

# 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

# If you select your own file, you should also use the tls_crl_file command to
# check for revoked certificates, but unfortunately getting revocation lists and
# keeping them up to date is not straightforward.
#tls_crl_file ~/.tls-crls

# Mail account
# TODO: Use your own mail address
account bob@meindedomain.de

# Host name of the SMTP server
# TODO: Use the host of your own mail account
host smtp.meindedomain.de

# As an alternative to tls_trust_file/tls_crl_file, you can use tls_fingerprint
# to pin a single certificate. You have to update the fingerprint when the
# server certificate changes, but an attacker cannot trick you into accepting
# a fraudulent certificate. Get the fingerprint with
# $ msmtp --serverinfo --tls --tls-certcheck=off --host=smtp.freemail.example
#tls_fingerprint 00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33

# Envelope-from address
# TODO: Use your own mail address
from bob@meindedomain.de

# Authentication. The password is given using one of five methods, see below.
auth on

# TODO: Use your own user name fpr the mail account
user bob@meindedomain.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.
# TODO: Use the password of your own mail account
password pAssW0Rd123

# Password method 4: Store the password in ~/.netrc. This method is probably not
# relevant anymore.

# Password method 5: Do not specify a password. Msmtp will then prompt you for
# it. This means you need to be able to type into a terminal when msmtp runs.

# Set a default account
# TODO: Use your own mail address
account default: bob@meindedomain.de

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

Alle Einstellungen, die man individuell anpassen muss, sind hier mit „# TODO“ gekennzeichnet. Bitte auch die Kommentare in der Datei beachten.

Noch ein Hinweis auf die Authentifizierungs-Methode: In diesem Beispiel nutzen wird die einfachste Form der Authentifizierung, indem das Passwort des Mail-Accounts direkt in der Konfiguration gespeichert wird. msmtp unterstützt hier allerdings auch weitere Authentifizierungs-Methoden. Mehr Informationen dazu findet man in der Dokumentation zu msmtp.

Als nächstes sorgen wir dafür, dass nicht jeder Zugriff auf die Datei hat (besonders wichtig, wenn das Passwort direkt in der Konfiguration gespeichert ist):

chmod 600 /etc/msmtprc

Auch bei einer benutzerspezifischen Konfiguration müssen die Rechte angepasst werden:

chmod 600 ~/.msmtprc

Zum Schluss wird noch ein Alias angelegt, so dass die Empfänger-Adresse des Root-Accounts (oder des Accounts, mit dem später E-Mail versendet werden sollen) bekannt ist. Dies wird in der Datei angegeben, die auch schon ganz am Ende der Konfiguration von msmtp aufgeführt wurde:

nano /etc/aliases

Hier wird nun die Empfänger-Adresse des Root-Accounts angegeben. An diese Adresse werden nun E-Mails verschickt, wenn z.B. ein Cronjob fehlschlagen sollte. Daneben wird noch eine allgemeine „Fallback-Empfänger-Adresse“ angegeben, falls System-Meldungen nicht im Kontext des Root-Accounts auftreten:

root: admin@meinedomain.de 
default: admin@meinedomain.de

Bevor nun eine erste Test-Mail versendet werden kann, muss noch das Mail-Programm definiert werden:

nano /etc/mail.rc

Der Inhalt sieht dabei folgendermaßen aus:

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

Nach der erfolgten Konfiguration vom msmtp können E-Mails nun ganz einfach über die Kommandozeile verschickt werden:

echo "Inhalt der E-Mail" | mail -s "Betreff" test@mail.de

Am besten gleich mal ausprobieren, indem ihr euch selbst eine Test-E-Mail schickt.

Fazit

Mit msmtp ist es einfach möglich, von einem Linux-System E-Mails zu versenden, ohne einen „schwergewichtigen“ Mail-Server aufsetzen zu müssen. Es wird einfach ein vorhandener Mail-Account (z.B. eines Freemailers) benutzt und die Konfiguration gestaltet sich auch sehr einfach.

Neben dem Mail-Versand von der Kommandozeile erhält man nun auch ganz komfortabel Benachrichtigungen per E-Mail, wenn beispielsweise ein Cronjob ausgeführt wurde, oder auch eine IP-Adresse von Fail2ban gebannt wurde.

Weiterführende Artikel

Links

, , , , , , ,

Kommentare: 77

  • Verena sagt:

    Hallo Jan,
    danke für die Anleitung. Nach einigem Herumprobiere hat es doch geklappt.

    Nur als Hinweis: Bei mir wurden beim Bannen zunächst keine E-Mails verschickt. Das Versenden hat erst geklappt, nachdem ich die entsprechenden E-Mail-Adressen auch noch in der /etc/fail2ban/jail.conf eingetragen hatte. Jetzt läuft es aber problemlos. :-)

    • Jan sagt:

      Hallo Verena,

      ja, für fail2ban muss die E-Mail-Adresse, an die gesendet werden soll noch in den Jail-Files angegeben werden. Da es hier primär nicht um fail2ban geht, habe ich dieses Detail weggelassen. Aber es wurde hier schon einmal thematisiert.
      Dennoch würde ich diese Änderungen nicht direkt in die jail.conf Datei eintragen, sondern mit eine separate jail.local anlegen. Die bleibt dann auch bei einem Update von fail2ban erhalten.

      Gruß,
      Jan

    • Andreas sagt:

      Danke für den Tipp, Verena.
      Hat bei mir geklappt.

      LG Andreas

  • Patrick sagt:

    Hallo Jan,

    chmod 600 funktioniert bei mir nicht, ich erhalte die Fehlermeldung:
    ’sendmail: account default not found: no configuration file available‘
    ich muss chmod 644 setzen, dann geht es.
    Gruß
    Patrick

  • Bernhard sagt:

    Vielen Dank für den Tipp.

    LG Bernhard

  • Patrick sagt:

    Hallo Jan,
    ein anderer Patrick hier. Leider bekomme ich folgenden Fehlermeldung wenn ich msmtprc nach deinen Vorgaben aufsetze:

    -bash: syntax error near unexpected token `newline‘

    Kannst du mir weiterhelfen

    • Jan sagt:

      Hi Patrick,

      dann hat sich wohl irgendwo ein Schreibfehler eingeschlichen. Bitte die Inhalte der Datei nicht per Copy/Paste übernehmen (da gibt’s häufiger mal Probleme), sonder manuell eintragen.
      Dann sollte der Fehler eigentlich nicht mehr erscheinen.

      Gruß,
      Jan

      • Patrick sagt:

        Habe die Datei nochmals komplett durchgeschaut, ebenso 73 Zeilen wie du und zwei Fehler beseitigt. Trotzdem bekomme ich weiterhin diese Fehlermeldung. Hast du noch einen anderen Tipp?

        • Jan sagt:

          Hi Patrick,

          OK, dann tippe ich mal auf das Passwort – dieses enthält schätzungsweise irgendwelche Sonderzeichen, die von Bash interpretiert werden.
          Ob wirklich das Passwort schuld daran ist, kannst du auch testen, indem du einfach ein Passwort ohne Sonderzeichen eingibst. Dann sollte der ursprüngliche Fehler erst einmal weg sein, nur Mails können dann nicht gesendet werden.

          Wenn es wirklich an Sonderzeichen im Passwort lag, dann pack mal das Passwort in Anführungszeichen, also z.B.:
          password "pAssW0Rd123"

          Gruß,
          Jan

          • Bernd sagt:

            Hallo Habt ihr eine Lösung für das Problem gefunden?
            Denn ich habe genau das gleiche Problem :(
            Das mit dem PW habe ich bereits versucht, aber es ändert nichts an der Fehlermeldung:

            root@nextcloud:~# echo „TEST“ | mail -s „Betreff“
            bash: syntax error near unexpected token `newline‘
            root@nextcloud:~#

            Vielen Dank

            Gruß Bernd

  • Bernd sagt:

    ohne am ende geht es… :D
    Das PW ist nicht das Problem auch wenn zig Sonderzeichen enthalten sind

    Gruß Bernd

    • Jan sagt:

      Hi Bernd,

      ich glaube, da hat das Kommentar-System das Zeichen (vermutlich ein Sonderzeichen) verschluckt. Welches ist es genau? Kannst mir auch gern per Mail zukommen lassen, dann kann ich das hier noch nachträglich einfügen und den Artikel ggf. um einen Hinweis ergänzen.

      Gruß,
      Jan

  • Frank Hennen sagt:

    Hallo zusammen,

    bei mir hat die Testmail erst funktioniert, nachdem ich die /etc/mail.rc angelegt habe. Vorher kam immer eine Fehlermeldung, dass der Prozess mit Error Code 65 aussteigt. Dies habe ich im Google als Grund leider nicht gefunden.

    Gruß
    Frank

  • David sagt:

    Hallo Jan,

    egal was ich versuche, die Antwort lautet immer:
    „mail: Nachricht kann nicht gesendet werden: Prozess wurde mit einem von Null verschiedenen Status beendet“

    Hast du einen Tip für mich?

    • Jan sagt:

      Hi David,

      schau mal in die Datei /var/log/mail.err. Hier sollte eine genaue Fehlermeldung zu finden sein.

      Gruß,
      Jan

      • Der Flo sagt:

        Hi Jan,

        jetzt hänge ich gerade am Versand der Mail ^^
        test halber wollte ich das ganze über meine Gmail Adresse erstmal testen.

        Ich erhalte die gleiche Fehlermeldung nur ist bei mir die mail.err unter /var/log/ leer ? warum?
        muss ich da den Port in /etc/msmtprc entsprechend auf die 465(laut gmail) anpassen oder lasse ich den auf 587? allerdings erhalte ich bei beiden Varianten die gleiche Fehlermeldung.

        Danke und Gruß
        Flo

  • Heinz sagt:

    Hallo Jan,

    vielen Dank für deine sehr gute Beschreibung. Ich habe alles nach deiner Vorgabe installiert. Bei Ausführung im Terminal funktioniert alles wie gewollt. Allerdings wenn mir der Rechner (Stretch) beim Systemstart eine E-Mail mit diversen Infos zuschicken soll, klappt das nicht. Dazu habe ich eine Datei emailnotify.desktop in Autostart angelegt. Hier wir ein Script aufgerufen, das den E-Mailversand startet. Vor dem Versand wartet das Script mit sleep 60. Wenn ich das Script in emailnotify.desktop aufrufe kommt folgende Fehlermeldung:

    „msmtp: TLS Aushandlung fehlgeschlagen: The TLS connection was non-properly terminated. msmtp: konnte Mail nicht verschicken (Account default aus /home/pi/.msmtprc)
    mail: Senden der Daten an /usr/bin/msmtp -t fehlgeschlagen: Prozess wurde mit einem von Null verschiedenen Status beendet
    mail: Nachricht kann nicht gesendet werden: Prozess wurde mit einem von Null verschiedenen Status beendet „

    Wenn ich aber die Scriptdatei zweimal hintereinander in emailnotify.desktop aufrufe, dann wird die E-Mail einmal versendet.Hast du dazu eine Erklärung und vielleicht eine Lösung. Vielen Dank im Voraus.

    Viele Grüße
    Heinz

    • Jan sagt:

      Hallo Heinz,

      also die Meldung mit TLS sollte eigentlich nicht für das erfolglose Übertragen verantwortlich sein. Hier wird die TLS-Verbindung nicht ordentlich beendet, aber die Mail sollte schon rausgegangen sein.
      Schau doch mal in das Log von msmtp: /var/log/msmtp.log
      Vielleicht stehen hier noch andere Fehlermeldungen drin.

      Gruß,
      Jan

      • Heinz Weber sagt:

        Hallo Jan,

        vielen Dank für deine Antwort. Ich habe eine Log-Datei aktiviert und folgende Meldung erhalten (E-Mailadressen sind fiktiv!):
        „Jun 28 09:07:11 host=mail.abc.de tls=on auth=on user=pi@abc.de from=pi@abc.de recipients=home@xyz.com errormsg=’TLS Aushandlung fehlgeschlagen: The TLS connection was non-properly terminated.‘ exitcode=EX_PROTOCOL“
        Vielleich kannst du damit etwas anfangen!?

        Viele Grüße
        Heinz

        • Jan sagt:

          Hallo Heinz,

          ist es nach wie vor so, dass es beim zweiten Aufruf dann klappt? Dann kann man einen Fehler in der Konfiguration ausschließen.
          Leider sagt mir diese Fehlermeldung nichts und eine Suche im Web liefert auch keine brauchbaren Informationen.
          Was passiert zwischen den beiden Aufrufen?

          Gruß,
          Jan

  • Hat mir geholfen, allerdings scheint sich bei der Festlegung in /etc/mail.rc ein Fehler eingeschlichen zu haben.

    Gebe ich die Zeile so an, wie vorgegeben, erhalte ich beim Aufruf:

    mail: Cannot start ‚/usr/bin/msmtp -t‘: executable not found (adjust *mta* variable)

    Lasse ich die Anführungszeichen weg, also

    set sendmail=/usr/bin/msmtp -t

    klappt es.

    arch linux, bash 5.0.7

    • Jan sagt:

      Hallo Hans,

      das scheint dann aber etwas Arch-spezifisches zu sein. Unter Ubuntu hatte ich mit der gezeigten Anleitung noch keine Probleme.
      Aber danke für den Tipp, dieser könnte auch für andere interessant sein.

      Gruß,
      Jan

  • Heinz sagt:

    Hallo Jan,

    zwischen den beiden Aufrufen ist nur eine sleep 60 eingebaut. Auch wenn ich vor dem ersten Aufruf die Wartezeit vergrößere, wird die gleiche Fehlermeldung geliefert.

    Gruß
    Heinz

    • Jan sagt:

      Hallo Heinz,

      puh, das kann ich mir echt nicht erklären.
      Ruf doch msmtp in einem Skript auf, welches den Rückgabewert des Programms auswertet. Wenn dieser einen Fehler anzeigt, dann einfach msmtp nochmals aufrufen.
      Das ist zwar nicht unbedingt schön, wäre aber ein Workaround.

      Gruß,
      Jan

  • Gregor sagt:

    Danke für die Info mit der /etc/mail.rc

    Ich bekam vorher mit dem mail command immer die Meldung:
    mail: cannot send message: Process exited with a non-zero status
    Die Error Ausgabe (echo $?) war 36.

    Nach dem erstellen der mail.rc und dem Inhalt, klappt alles auf anhieb.

  • Michl sagt:

    Hallo,

    vielen Dank für die ausführliche Anleitung!

    Leider funktioniert (nur bei mir?) die Interpretation von /etc/aliases nicht: obwohl im debug-output der aliases-Pfad korrekt wiedergegeben wird, werden die Benutzernamen in /etc/aliases nicht interpretiert. Stattdessen wird als Empfängeradresse das übliche benutzername@hostname gesetzt.

    Wenn ich allerdings bsd-mailx anstatt mailutils installiere (und die /etc/mail.rc belasse, wie sie ist) funktioniert alles korrekt.

    • Jan sagt:

      Hi Michl,

      welche .msmtprc Datei hast du bearbeitet/angelegt? Unter /etc, oder unter dem Home-Verzeichnis der entsprechenden User?
      Wenn es allerdings mit bsd-mailx funktioniert, dann sollte man das so belassen, oder?

      Gruß,
      Jan

      • Michl sagt:

        Hi,

        ich habe die msmtprc unter /etc angelegt.

        Klar werde ich es belassen – die Frage ist aber, wieso es mit mailutils nicht funktioniert. Es wäre interessant, ob das bei jemand anderem funktioniert – falls nicht, solltest du evtl. deine Anleitung adaptieren.

        Viele Grüße!

    • Thorsten sagt:

      Ist hier auch so. Warum auch immer. Es funktioniert nur mit bsd-mailx _nicht_ mit den mailutils.

      Vielleicht hilft es ja jemand….

      • Jan sagt:

        Hi Thorsten,

        leider kann ich das Problem immer noch nicht nachvollziehen.
        Habe msmtp vor kurzem auf mehreren Servern (Ubuntu) erfolgreich eingerichtet und hatte damit keine Probleme.

        Gruß,
        Jan

  • Hans sagt:

    Hallo Jan,

    ich habe jetzt mal den Schwenk von ssmtp zu msmtp gemacht.
    Die Installation haz gut funktioniert. Fail2Ban und der letzte Test in der Anleitung funktioniert auch.
    Leider bekomme ich keine Mails von meinen cron- Jobs (crontab -e). Mit ssmtp hat es noch funktioniert.

    In der crontab -e Datei habe ich als erste Zeile MAILTO=meinMail@provider.de eingetragen.

    Leider finde ich auch keine Log Dateien von msmtp.

    Hast Du noch einen Ansatz?

    Grüße
    Hans

    • Jan sagt:

      Hallo Hans,

      es kommt immer darauf an, mit welchem User der Cronjob ausgeführt wird. Daher solltest du zunächst einmal probieren, mit diesem User eine Mail per Kommandozeile zu senden.
      Klappt das denn?
      Ansonsten vielleicht auch mal ins syslog schauen, ob hier zur Laufzeit des Cronjobs irgendwelche Meldungen ausgegeben werden.

      Gruß,
      Jan

      • Hans sagt:

        Hallo Jan,
        ich erstelle die cron-jobs als root. Dieser kann über die Kommandozeile eine Mail rausschicken.
        Im Syslog steht:

        sendmail: 554 Unauthorized sender address
        sendmail: konnte Mail nicht verschicken (Account default aus /etc/msmtprc)

        In der /etc/msmtprc ist

        account default: bob@meindedomain.de

        eingetragen.

        Seltsam finde ich, das Fail2ban mir Mails schicken kann.

        Gruß
        Hans

        • Jan sagt:

          Hi Hans,

          versuch mal, eine Konfigurations-Datei unter dem Home-Verzeichnis des Users anzulegen (also ~/.msmtprc). Hier gab es hin und wieder schon Probleme, dass die allgemeine /etc/.msmtprc nicht richtig angezogen wurde.

          Gruß,
          Jan

          • Hans sagt:

            Hallo Jan,

            Dein Tip mit der ~/.msmtprc hat leider nicht funktioniert.

            Jetzt habe es aber hinbekommen.
            Allerdings nutze ich jetzt eine Gmail Adresse. Bei Gmx hat es nicht funktioniert.

            Bei Gmail musste ich dann noch den Zugriff durch weniger sichere Apps zulassen.

            Was könnte man noch machen, damit die GMX Adresse funktioniert?

            Gruß
            Hans

          • Jan sagt:

            Hi Hans,

            OK, dann liegt es wohl an GMX selbst. Welche Einstellungen du hier verwenden musst, kann ich dir aber leider auch nicht sagen, da ich kein GMX verwende.
            Vielleicht einfach mal ein wenig rumprobieren.

            Gruß,
            Jan

  • Hans sagt:

    Bei mir klappte es nur mit einem Eintrag

    set sendmail=“/usr/bin/msmtp“, also ohne das „-t“ in /etc/mail.rc.

    Aber ganz vielen Dank für die fantastische Zusammenstellung!!

  • Tom sagt:

    Zur Info :
    ich habe das auf dem Raspi (Buster) mit einem mailbox.org Account eingerichtet.
    In der /etc/msmtprc musste ich noch den Parameter tls_starttls auf off stellen da
    hier TLS ohne STARTTLS über Port 465 (smtps) genutzt wird.

    Ohne diesen Änderung hing der Aufruf der Testmail ohne eine Meldung.

    • Jan sagt:

      Hallo Tom,

      OK, danke für den Hinweis!
      Die korrekte Konfiguration hängt immer auch vom verwendeten Mail-Provider ab, so dass ich hier leider keine allgemeingültige Anleitung abliefern kann.

      Gruß,
      Jan

  • Jan sagt:

    Hallo Jan,

    ich bin unter Debian unterwegs und meine auch deine Anleitung sauber ausgeführt zu haben, aber irgendwo hakt es dennoch.

    Ich bekomme bei meiner Testmail folgende Meldungen:

    mail: Senden der Daten an /usr/bin/msmtp -t fehlgeschlagen: Prozess wurde mit einem von Null verschiedenen Status beendet

    mail: Nachricht kann nicht gesendet werden: Prozess wurde mit einem von Null verschiedenen Status beendet

    Das Problem im Grunde ist, das ich kein Log finde…
    Ich habe sogar in der msmtprc den folgenden Eintrag für eine separates Log eingetragen
    logfile /opt/log/msmtp.log
    (https://marlam.de/msmtp/msmtp.html#General-commands)
    (und die Datei auch angelegt) allerdings bleibt diese ebenfalls leer…

    Noch eine Info: Ich hab die msmtprc sowohl unter ~/. also auch unter /etc/ angelegt (inhaltlich gleich)

    Hast du eine Idee für mich?

    Viele Grüße
    ein anderer Jan

    • Jan sagt:

      Hallo anderer Jan ;-)

      schau mal, ob die entsprechende Datei auch wirklich hier zu finden ist: /usr/bin/msmtp (und nicht z.B. /usr/local/bin/msmtp).

      Gruß,
      Jan

      • Jan sagt:

        Hi!
        Ja, die Datei msmtp ist genau hier zu finden /usr/bin

        Noch eine Idee? Vielleicht wie ich an ein lesbares Log komme? :-)

        Viele Grüße
        Jan

        • Jan sagt:

          Hi,

          wenn in den Logs zu msmtp nicht zu finden ist, dann schau doch mal im syslog nach.

          Gruß,
          Jan

          • Jan sagt:

            Hi,

            das schweigt sich auch aus.
            Nachdem ich den Testabruf abgesetzt habe, ändert sich keines der Logs aus /var/log/

            Ich habe gerade noch gesehen, dass es noch eine Info-Zeile gibt:

            msmtp: /home/pi/.msmtprc: enthält Passwörter und muss daher Ihnen gehören

            mail: Senden der Daten an /usr/bin/msmtp -t fehlgeschlagen: Prozess wurde mit einem von Null verschiedenen Status beendet

            mail: Nachricht kann nicht gesendet werden: Prozess wurde mit einem von Null verschiedenen Status beendet

            Und während ich das hier schreibe, klingelt es im Kopf! Die Datei „/home/pi/.msmtprc muss also „mir“ also dem User „pi“ gehören, denn der führt den „echo“-Befehl aus.

            Okay, dann habe ich also die Datei per „sudo chown pi:pi“ dem User zugeordnet.

            Nun bekomme ich folgende Meldung:

            msmtp: /home/pi/.msmtprc: enthält Passwörter und darf daher Lese-/Schreibrecht nur für den Eigentümer haben

            Das verstehe ich dann wieder nicht, weil ich die Datei dem User „pi“ zugeordnet habe.

            Habe dann noch per „chmod 777“ der Datei „alle Rechte“ zugeordnet, der Fehler bleibt aber der Gleiche…

            Sry für den vielen Text, aber ich wollte meine Schritte so detailliert wie möglich angeben.

            Und ach ja, als „root“ funktioniert der Mailversand nun, das hatte ich erst jetzt testet…

            Viele Grüße und vielen Dank für deine fixe Hilfe, echt stark!
            Jan

          • Jan sagt:

            Hi Jan,

            müsste die Datei dann nicht per chmod die Rechte 700 zugeordnet bekommen? Nur dann hat nur der Owner alle Rechte, alle anderen nicht.

            Gruß,
            Jan

  • Caerulean sagt:

    Danke für das Tuto, endlich funktioniert’s!

  • Dirk sagt:

    Es funktioniert soweit alles, außer der Versand über cron, hier wird die Mail als

    From: root (Cron Daemon)

    versendet, dass führt leider dazu, dass der smtp Server die Mail ablehnt

    550-5.7.1 [194.59.204.53 14] Messages missing a valid address in From:
    550 5.7.1 header, or having no From: header, are not accepted.

    Mit dem ssmtp hat das bisher funktioniert.

    Wie kann ich denn die From Adresse für den cron einstellen?

    • Jan sagt:

      Hi Dirk,

      welche Version der msmtprc hast du verwendet? Die globale, oder die User-spezifische?

      Gruß,
      Jan

      • Dirk sagt:

        Hi,

        ich habe beide angelegt die globale unter /etc und die user unter /home… mit selbem Inhalt.

        Es funktioniert wie gesagt generell ja nur sendet cron mit einer eigenen FROM Adresse.

        • Jan sagt:

          Hi,

          vielleicht noch unter /etc/aliases die entsprechenden Aliase eintragen. Hier sollte aber eigentlich der „default“-Eintrag alles erwischen…

          Gruß,
          Jan

          • Dirk sagt:

            Hab ich natürlich gemacht wie in der Anleitung.

            Bei anderen z.b. Apticron funktioniert es ja auch nur bei conjobs nicht,
            dass Problem ist wohl auch bekannt, denn der cron überschreit die FROM Zeile.

            Was mich wundert ist, dass es mit ssmtp funktioniert hat, hier kann ich aber im ssmtp einstellen ob eine FromLineOverride erlaubt ist oder nicht.

          • Jan sagt:

            Hi Dirk,

            puh, da bin ich gerade etwas überfragt. Unter welchem User läuft denn der Cronjob, bzw. was ist an dem User speziell?

            Gruß,
            Jan

  • Dirk Schneider sagt:

    Hi Jan,

    eigentlich nichts er läuft als root es liegt wohl tatsächlich am cron der als Absender „root (Cron Deamon)“ verwendet statt der mail die in der msmtp Konfig als from konfiguriert ist.

    Blöde Frage
    der Einstrag
    set sendmail=“/usr/bin/msmtp -t“
    funktioniert bei mir nicht es geht nur ohne „“ also
    set sendmail=/usr/bin/msmtp -t

    kann es hieran liegen? für was steht denn die Option -t?
    Gruß
    Dirk

    • Jan sagt:

      Hi Dirk,

      wundert mich aber dennoch ein wenig. Ich sende auch Mails mit einem Cronjob, der als root ausgeführt wird und hier wird die richtige Absenderadresse angegeben. Nutzt du Ubuntu, Debian, oder ganz was anderes?

      Die Option „-t“ setzt den „Sendmail-Mode“, siehe hier.

      Gruß,
      Jan

      • Dirk sagt:

        Hi Jan,

        ich nutze Debian Buster ohne GUI

        Okay muss das dann in „“ oder nicht? vielleicht ist das, dass Problem aber bei set sendmail=“/usr/bin/msmtp -t“ bekomme ich folgende Fehlermeldung

        mail: /usr/bin/msmtp -t: No such file or directory
        Can’t send mail: sendmail process failed with error code 1

        • Jan sagt:

          Hi Dirk,

          das „-t“ ist ja nur ein Parameter. Die Fehlermeldung deutet aber eher darauf hin, dass er die Datei /usr/bin/msmtp nicht finden kann.
          Wenn doppelte Anführungszeichen nicht funktionieren, dann nimm mal einfache Anführungszeichen.

          Gruß,
          Jan

          • Dirk sagt:

            Hi,

            also es liegt an dem -t ohne diesen Parameter tritt die Fehlermeldung nicht auf.

          • Jan sagt:

            Hi Dirk,

            versuch doch mal, folgendes Paket zu installieren: msmtp-mta
            Ich vermute mal, dass ihm nicht msmtp selbst fehlt, sondern eine Abhängigkeit, die durch „msmtp -t“ unter der Haube aufgerufen wird.

            Gruß,
            Jan

          • Dirk sagt:

            Hi Jan,

            das Paket ist ja installiert steht ja auch so in der Anleitung und wenn ich es richtig verstanden habe, legt das nur einen Symlink unter /usr/sbin/sendmail an und auch dieser ist vorhanden

            msmtp-mta ist schon die neueste Version (1.8.3-1)

            ls -al /usr/sbin/sendmail
            lrwxrwxrwx 1 root root 12 Feb 15 2019 /usr/sbin/sendmail -> ../bin/msmtp

          • Jan sagt:

            Hi Dirk,

            puh, dann bin ich erst einmal echt überfragt.
            Aber es funktioniert bei dir ja, außer dass ein falscher Absender angezeigt wird, oder?
            Wenn ich dazu noch etwas in Erfahrung bringe, melde ich mich noch einmal.

            Gruß,
            Jan

  • Dirk sagt:

    Hi,

    also die Datei existiert unter /usr/bin/msmtp root:msmtp 755

    Die Fehlermeldung kommt sowohl bei doppelten als auch einfachen Anführungszeichen

  • André V. sagt:

    Hallo zusammen,

    vielen Dank für die Anleitung zur Installatioin von msmtp.

    Die Eingabe vom Befehl:

    echo „Inhalt der E-Mail“ | mail -s „Betreff“ test@mail.de

    liefert Fehlerausgabe:

    msmtp: account default not found: no configuration file available
    mail: Sending data to /usr/bin/msmtp -t failed: Process exited with a non-zero status
    mail: cannot send message: Process exited with a non-zero status

    Nachdem die „Einführungszeichen“ in der Datei /etc/mail.rc entfernt wurden:

    set sendmail=/usr/bin/msmtp -t

    bekomme ich folgende Fehlerausgabe:

    msmtp: no recipients found
    mail: Sending data to /usr/bin/msmtp failed: Process exited with a non-zero status
    mail: cannot send message: Process exited with a non-zero status

    Die /var/log/mail.err und /var/log/mail.log sind leer. Die Dateie /var/log/msmtp.log existiert leider nicht.

    Kann mir bitte jemand weiter helfen? Vielen Dank im Voraus.

    Beste Grüße
    André

  • Roland sagt:

    Hallo Jan,
    gute, nachvollziehbare Anleitung.
    Ich habe allerdings der Domain auf meinem Server, eine Internetseite (WordPress) und zwei Magenta Shops.
    IKann ich msmtp so konfigurieren, dass aus allen drei Domain die Mail an den
    jeweiligen SMTP Server des Provider (IONOS) verschickt werden?
    Gruß, Roland

    • Jan sagt:

      Hi Roland,

      ich denke das wird nicht gehen, denn die Mail-Settings von msmtp sind immer nur pro Account. Das kann man meines Wissens nach nicht als „Mail-Proxy“ verwenden.

      Gruß,
      Jan

  • Norbert Dorau sagt:

    Hallo Jan,

    erst mal vielen Dank für die Zusammenstellung.

    wenn man die Test Mail in der Kommando Zeile ausführt

    echo „Inhalt der E-Mail“ | mail -s „Betreff“ test@mail.de

    kann man sich die Anführungszeichen auch sparen. Nur wenn der Betreff aus zwei getrennten Wörtern besteht, dann braucht man sie dort wieder.

    Wenn man aber aus einem c++ Programm mit system also

    system (“ echo Inhalt der E-Mail | mail -s Betreff test@mail.de“ )
    eine mail verschicken will, dann dürfen dort keine weiteren außer den Aussen -Anführungszeichen vorhanden sein.

    So nun zu meiner Frage mit der ich nicht weitergekommen bin:

    ich möchte aus meinem C++ Programm eine email mit einem Meßwert verschicken. So etwa

    system („Der Meßwert lautet: X Einheiten | mail -s Messwert_aktuell messung@mail.de„)

    X ist ein numerischer Messwert. X kann ich auch in einen char Wert umwandeln, aber das ändert nichts. In der mail bleibt es bei einem Buchstaben.

    Ist das jetzt ein msmpt oder ein C++ Problem?

    Grüße

    Norbert

    • Jan sagt:

      Hi Norbert,

      in C++ gibst du ja den Wert in Hochkommata direkt als String aus. Müsste das daher nicht in etwa so aussehen (value ist dein numerischer Meßwert):
      string str = "Der Meßwert lautet: " + value + " Einheiten";
      system ("printf(str) | mail -s Messwert_aktuell messung@mail.de")

      Sorry, meine C++ Kenntnisse sind etwas eingerostet, aber vielleicht bringt dich das ja auf die richtige Fährte.

      Gruß,
      Jan

  • Norbert Dorau sagt:

    Hallo Jan,

    nee, das funktioniert nicht. Das Problem scheint bei dem msmpt zu liegen.
    In C++ kann ich die Strings und Werte beliebig zusammenpacken usw.

    Aber msmpt interpretiert alles was vor dem | steht nur als alphanumerischen Text. Sonderzeichen werden entweder ignoriert oder führen zu der Aussage, daß der Email Text leer sei.

    Habe auch mal ein wenig gesucht, aber die Information beschränken sich alle darauf, wie man den das mail Programm konfiguriert und mit Text „füllt“.

    Also mir fällt jetzt erst mal nichts mehr ein.

    Grüße

    Norbert

    • Jan sagt:

      Hi Norbert,

      kannst du mit C++ eine (Bash-)Variable füllen?
      Denn so etwas geht (rein auf der Bash):
      test = 5
      echo "Inhalt der E-Mail " + $test | mail -s "Betreff" meine@mail.de

      Gruß,
      Jan

      • Norbert Dorau sagt:

        Moin Jan,

        Nein, in C++ und auch in den anderen C’s kann man das also das Füllen einer Kommandozeilen Variable nicht machen. Habe jedenfalls keine Möglichkeit gefunden.
        Das bash Zeilen Beispiel konnte ich realisieren.

        Das Problem ist wohl, daß der system Befehl einen const char erwartet. Und den habe ich ja nicht.
        Tja…

        Grüße

        Norbert

        • Norbert Dorau sagt:

          Moin Jan,

          ich habe mir jetzt mal folgende Lösung ausgedacht.

          Speichern des Meßwerts durch das C Programm in einer Text Datei

          Dann eine batch Programm, das

          den Inhalt der Text Datei ausliest
          den Inhalt der Text Datei in eine bash Variable packt
          und mit dieser Variablen das Mail Programm aufruft

          Man könnte natürlich auch gleich die Text Datei als Anhang in eine Mail packen, aber dann wird das Auslesen am Handy wieder aufwendiger.

          So, jetzt muß ich mir „nur“ noch die batch Datei zusammenbasteln.

          Hört sich das machbar an??

          Grüße

          Norbert

          • Jan sagt:

            Hi Norbert,

            ist denke ich mal ein wenig „von hinten durch die Brust ins Auge“, aber allemal machbar. ;-)

            Gruß,
            Jan

          • Norbert sagt:

            Moin Jan,

            ja, der Spruch „von hinten durch die Brust ins Auge“ ist mir dabei auch eingefallen. :-) Aber was soll’s, so funktioniert es. Das kleine Rechnerlein muß so halt ein bißchen mehr ackern. Aber der kann das…
            Na ja, und ich muß ja nun immer erst mal was auf die SD Karte schreiben.
            Vielleicht finde ja noch mal was „eleganteres“

            Grüße

            Norbert

  • Norbert sagt:

    Hallo Jan,

    hier in den Fragen wurde ja auch so vor einem Jahr mal nach dem mail.log gefragt und festgestellt, daß dieses log bei dem Fragenden leer war. Ich hatte jetzt auch das Problem, daß irgendwann irgendwie mails nicht angekommen sind. Deshalb wollte ich nun mal etwas genauer schauen, wo das Problem liegt.
    Zu dem Problem des leeren mail.logs habe ich jetzt bei dir und im Internet nichts gefunden, dabei lag die Lösung doch so nah!!

    Ganz einfach: Voreingestellt ist bei msmtp, daß KEIN log geschrieben wird!!
    Man muß das Schreiben erst einschalten in dem man in die msmtprc Datei eine Zeile mit

    syslog LOG_MAIL

    hinzufügt.

    Dann füllt sich auch die mail.log Datei. Ob jetzt nun auch in die mail.err Datei im Fehlerfall hineingeschrieben wird, konnte ich noch nicht feststellen, da natürlich jetzt erst mal kein Fehler aufgetreten ist.

    Grüße

    Norbert

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.