E-Mail-Versand für den Raspberry Pi konfigurieren

Hier im Blog habe ich bereits einige Beiträge zum Versand von Statusmeldungen und Dateien von einem Raspberry Pi verfasst.
Damit auch Nachrichten an eine Empfänger-E-Mail versendet werden können, sind einige Pakete und ein paar Anpassungen erforderlich.
Der Artikel zum Einrichten und Konfigurieren ist in die Jahre gekommen, deshalb gibt es ein Update.

Motion mit E-Mail-Versand


Inhaltsverzeichnis

MTA Postfix

Installation Pakete

Postfix Konfigurieren

main.cf konfigurieren
main.cf – Einstellungen für Stato AG
main.cf – Einstellungen für GMail

Zugangsdaten eintragen

Absender anpassen

E-Mail-Versand testen


MTA Postfix

Für den E-Mail-Versand auf den Raspberry Pi verwende ich den Mail Transfer Agent (=MTA) Postfix.

Postfix verwendet zum Versenden von Nachrichten ein bereits bestehendes E-Mail-Konto. In der folgenden Konfiguration teilen wir genau das dem MTA mit. Für diese Anleitung verwende ich ein E-Mail-Konto, dass bei der Strato AG gehostet wird.
Nutzt ihr ein GMail-Konto und möchtet darüber E-Mails versenden, ist lediglich der Eintrag „relayhost“ anzupassen.

Eine genaue detaillierte Beschreibung von „postfix“ gibt es auf der offiziellen Website:
https://de.postfix.org/

Installation Pakete

Damit der E-Mail-Versand auch funktioniert, sind noch einige Pakete zu installieren.

sudo apt install postfix libsasl2-modules mutt

Der Versand von E-Mail läuft bei mir nur noch über „mutt„. Damit lassen sich sämtliche Statusmeldungen und sonstige Nachrichten einfach über Skripte versenden.

Weitere Informationen zu mutt findet ihr hier

  1. http://www.mutt.org/
  2. https://de.wikipedia.org/wiki/Mutt
Pakete für E-Mail-Versand installieren
Pakete für E-Mail-Versand installieren

Während der Installation werden ein paar Dinge abgefragt. Die könnt ihr wie in den Screenshots dargestellt beantworten.

Postfix konfigurieren
Postfix konfigurieren
Postfix konfigurieren
Postfix konfigurieren
Postfix konfigurieren
Postfix konfigurieren

Gib mir gerne einen Kaffee ☕ aus!

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕ ausgeben.

PayPal Logo


liberapay.com/strobelstefan.org


Kaffee via Bitcoin

bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj


Postfix Konfigurieren

Postfix und die dazugehörigen Pakete sind nun auf dem Raspberry Pi installiert und müssen noch angepasst werden.

In der Datei „/etc/postfix/main.cf“ wird der MTA konfiguriert.

sudo nano /etc/postfix/main.cf

main.cf – Einstellungen für Stato AG

Die Strato E-Mail-Server sind auf der Seite abzurufen:
https://www.strato.de/faq/mail/so-lauten-die-strato-e-mail-server/

Tragt die folgenen Zeilen einfach am Ende der Datei ein.

relayhost= smtp.strato.de:587
smtp_sasl_auth_enable = yes
sender_canonical_maps = hash:/etc/postfix/sender_canonical
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_enforce_tls = no
smtp_tls_enforce_peername = no
smtpd_tls_security_level = may

main.cf – Einstellungen für GMail

Die Google E-Mail-Server sind auf der Seite abzurufen:
https://support.google.com/mail/answer/7104828?hl=de

relayhost= smtp.gmail.com:587
smtp_sasl_auth_enable = yes
sender_canonical_maps = hash:/etc/postfix/sender_canonical
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_enforce_tls = no
smtp_tls_enforce_peername = no
smtpd_tls_security_level = may

Es kann sein, dass in der Original-Datei bereits eine Zeile mit „relayhost“ zu finden ist. Diese könnt ihr einfach aus kommentieren mit „#„.
Belasst ihr den doppelten Eintrag, dann taucht das ständig als Warnmeldung im Log File auf.

Doppelter Eintrag relayhost aus kommentieren
Doppelter Eintrag relayhost aus kommentieren

In der Konfiguration wird auf zwei Dateien verwiesen, die von euch noch anzulegen sind.

  1. /etc/postfix/sasl_passwd: In dieser Datei werden die Anmeldedaten (Benutzername und Passwort) gespeichert.
  2. /etc/postfix/sender_canonical: In dieser Datei werden die Absendernamen definiert.

Zugangsdaten eintragen

Ein sehr wichtiger Punkt in der ganzen Konfiguration ist das richtige eintragen der Zugangsdaten für euer E-Mail-Konto in der „/etc/postfix/sasl_passwd„-Datei.

Die Informationen sind in diesem Format in der Datei einfach ganz oben als neue Zeile einzutragen.

E-Mail-Server:Port E-Mail-Adresse:Passwort

In einem Beispiel sieht das dann so aus:

sudo nano /etc/postfix/sasl_passwd
smtp.strato.de:587 :passwort

Die Datei speichert ihr anschließend ab. Damit Postifx nun auch die Daten lesen kann, ist die Datei in eine db-Datei umzuwandeln. Das ist nach jeder Anpassung der Datei erforderlich.

Das erledigt ihr mit dem Befehl:

sudo postmap /etc/postfix/sasl_passwd

Eine kleine Anpassung der Zugriffsrechte auf die Datei ist notwendig, damit nur Benutzer mit sudo-Rechten einen Lese-/Schreibzugriff auf den Dateiinhalt bekommen.

sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db

Versucht ein Benutzer ohne Zugriffsrechte auf die Datei zuzugreifen erhält er die Meldung:

Error reading /etc/postfix/sasl_passwd: Permission denied

Damit die Änderung auch wirksam wird, ist Postfix neuzustarten.

sudo systemctl restart postfix

Absender anpassen

In der Datei /etc/postfix/sender_canonical werden die Aliase, also die Absender definiert.

sudo nano /etc/postfix/sender_canonical

In der Datei tragt ihr einfach fortlaufend die Aliase nach diesem Schema ein

pi 

In einem Beispiel sieht das dann so aus

pi 
user1 
user2 

Auch diese Datei muss nach jeder Anpassung in eine db-Datei umzuwandeln.

sudo postmap /etc/postfix/sender_canonical

Da in dieser Datei normalerweise keine sensiblen Zugangsdaten enthalten sind, ist das Anpassen der Zugriffsrechte optional.

sudo chown root:root /etc/postfix/sender_canonical /etc/postfix/sender_canonical.db
sudo chmod 0600 /etc/postfix/sender_canonical /etc/postfix/sender_canonical.db

Damit die Änderung auch wirksam wird, ist Postfix neuzustarten.

sudo systemctl restart postfix

E-Mail-Versand testen

Zum Abschluss ist der Versand von E-Mails noch zu prüfen.

Der einfachste Befehl zum Versand einer E-Mail lautet.

echo 'Test E-Mail' | mutt  -s "Test-Email ohne Anhang"

Der Versand mit einem Anhang ist wie folgt:

echo 'Test-Email mit Anhang' | mutt e-mail-adresse -a /home/pi/datei.txt -s "Test-Email mit Anhang"

Es muss natürlich eine Datei vorhanden sein, die versendet werden kann. Dazu erstellen wir einfach eine neue Datei im Verzeichnis des Benutzers „pi

touch datei.txt

Möchtet ihr den Versand der E-Mail in einem Log File protokollieren, dann geht das so.

mutt e-mail-adresse -a /home/pi/datei.txt -s "Test-Email mit Anhang" >> /home/pi/email.log

Ihr könnt die Datei selbst wählen, dazu einfach nach „>>“ eine Datei angeben.

Gibt es bei dem Versand von E-Mails Probleme, dann könnt ihr das in der „mail.log„-Datei nachlesen.

sudo tail -f /var/log/mail.log

9 Antworten auf „E-Mail-Versand für den Raspberry Pi konfigurieren“

    1. Hallo Alexander,

      Das funktioniert in etwa so.

      Skript ausführbar machen und mit „python -t ./.py“ starten.
      Das Ganze lässt sich mit einem CRON Job automatisiert zu einer definierten Zeit ausführen.

      Hier das Skript:

      
      import smtplib
      
      ########################################
      # E-Mail login credentials #
      ########################################
      # enter your complete e-mail address
      username = "sender@email.de"
      # enter password for your e-mail address
      password = "passwort123456"
      
      
      ############################
      # General Email Variables  #
      ###########################
      # We call this values in the section "def email(condition)"
      # E-Mail address that is displayed in the from field
      From = "sender@email.de"
      # Define the recipient of your e-mail(s)
      To = "empfänger@email.de"
      
      
      ############################
      # message1   #
      ############################
      # Defines the complete e-mail message1
      message1 = """From: sender 
      To: Empfänger 
      MIME-Version: 1.0
      Content-type: text/html
      Subject: Betreff hier reinschreiben
      
      

      E-Mail Body

      Mehr Text, der HTML formatiert sein kann.

      """ print("Send E - Mail@") mail = smtplib.SMTP('smtp.gmail.com', 587) mail.ehlo() mail.starttls() mail.login(username, password) mail.sendmail(From, To, message1) mail.close() print("Sending completed")

      Du kannst das Senden von Nachrichten auch mit einer Bedienung kombinieren:

      
      ...
      
      def email(condition):
          if condition == 'bedingung1':
              print("Send E - Mail - B1")
              mail = smtplib.SMTP('smtp.gmail.com', 587)
              mail.ehlo()
              mail.starttls()
              mail.login(username, password)
              mail.sendmail(From, To, message1)
              mail.close()
              print("Sending completed - B1")
          if condition == 'bedingung2':
              print("Send E-Mail - B2")
              mail = smtplib.SMTP('smtp.gmail.com', 587)
              mail.ehlo()
              mail.starttls()
              mail.login(username, password)
              mail.sendmail(From, To, message2)
              mail.close()
              print("Sending completed - B2")
      

      Grüße

      Stefan

  1. Danke für die Antwort…
    Gibt es noch eine Möglichkeit, im Mailtext für einen Zeilenumbruch z.B. beim Versand von Messwerten?
    Sieht doof aus, wenn alles in einer Reihe steht und nicht untereinander…

  2. Hallo Stefan,
    ich habe den Email Versand auf meinem Pi genau wie von dir beschrieben eingerichtet. Leider funktioniert der Versand der Test E-Mail nicht.
    Hier der Inhalt der Logdatei…

    pr 18 22:39:27 raspberrypi postfix/master[13396]: warning: /usr/lib/postfix/sbin/cleanup: bad command startup — throttling
    Apr 18 22:40:06 raspberrypi postfix/master[13396]: warning: unix_trigger_event: read timeout for service public/pickup
    Apr 18 22:40:27 raspberrypi postfix/cleanup[15263]: fatal: open dictionary: expecting „type:name“ form instead of „#“
    Apr 18 22:40:28 raspberrypi postfix/master[13396]: warning: process /usr/lib/postfix/sbin/cleanup pid 15263 exit status 1
    Apr 18 22:40:28 raspberrypi postfix/master[13396]: warning: /usr/lib/postfix/sbin/cleanup: bad command startup — throttling
    Apr 18 22:41:06 raspberrypi postfix/master[13396]: warning: unix_trigger_event: read timeout for service public/pickup
    Apr 18 22:41:28 raspberrypi postfix/cleanup[15509]: fatal: open dictionary: expecting „type:name“ form instead of „#“
    Apr 18 22:41:29 raspberrypi postfix/master[13396]: warning: process /usr/lib/postfix/sbin/cleanup pid 15509 exit status 1
    Apr 18 22:41:29 raspberrypi postfix/master[13396]: warning: /usr/lib/postfix/sbin/cleanup: bad command startup — throttling
    Apr 18 22:42:06 raspberrypi postfix/master[13396]: warning: unix_trigger_event: read timeout for service public/pickup
    Apr 18 22:42:29 raspberrypi postfix/cleanup[15779]: fatal: open dictionary: expecting „type:name“ form instead of „#“
    Apr 18 22:42:30 raspberrypi postfix/master[13396]: warning: process /usr/lib/postfix/sbin/cleanup pid 15779 exit status 1
    Apr 18 22:42:30 raspberrypi postfix/master[13396]: warning: /usr/lib/postfix/sbin/cleanup: bad command startup — throttling

    Mir sagen die Meldungen leider nicht viel. Kannst du mir helfen?

    Gruß
    Harald

    1. Hallo Harald,

      hast du die Informationen für deinen E-Mail-Dienst korrekt in der main.cf eingetragen und die Zugangsdaten richtig in den beiden db-Dateien hinterlegt?

      Grüße

      Stefan

  3. Hallo Stefan,
    danke für diese gute Anleitung. Ich brauchte sie, um meinem CheckMK auf dem Raspberry den Mail-Versand beizubringen. Da ja in meinem Fall eine Anwendung die Mails verschickt, kann ich dann trotzdem die Anpassung der Zugriffsrechte vornehmen?
    Viele Grüße

  4. Hi Stefan,
    vielen Dank für diese simple Anleitung!
    Ich möchte nur für alle Copy & Paste Anwender anmerken, dass die Kommentare in der GMail main.cf in eigene Zeilen gehören, sonst werden sie nicht als Kommentar erkannt 😉
    VG

Schreibe einen Kommentar

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