Good to Know Database

Raspbian: E-Mails vom Raspberry Pi mit sendEmail verschicken


Es gibt immer wieder Fälle in welchen man bei einem bestimmten Ereignis eine E-Mail versenden will. Sei es nur als Information wenn ein Prozess beendet wurde oder um ein eingetretenes Ereignis einem Benutzer oder dem Administrator mitzuteilen. In der folgenden Anleitung soll gezeigt werden wie Sie auf Ihrem Raspberry Pi unter Raspbian eine E-Mail mit sendEmail generieren und an einen Mailserver übergeben. Der Vorteil von sendEmail ist, dass Sie auf diese Weise keinen Mailserver, welcher sich um die Zustellung der E-Mail kümmert, auf Ihrem Raspberry Pi installieren müssen.

Als Grundlage für die folgende Anleitung dient das momentan aktuelle Raspbian Image vom 26.07.2013 (2013-07-26-wheezy-raspbian.zip), welches Sie zuvor auf eine SD-Karte installieren müssen.

Bevor Sie mit der Installation beginnen, sollten Sie die lokale Paketdatenbank aktualisieren.

pi@raspberrypi ~ $ sudo apt-get update

Anschließend installieren Sie sendEmail und die beiden Pakete libio-socket-ssl-perl und libnet-ssleay-perl. Die beiden Perl-Libraries werden benötigt, damit die Verbindung zum SMTP-Server mit TLS verschlüsselt werden kann.

pi@raspberrypi ~ $ sudo apt-get install sendemail libio-socket-ssl-perl libnet-ssleay-perl

Damit wäre die Installation von sendEmail im Grunde bereits erledigt. Da in der Regel beim Versenden von automatisch generierten E-Mails immer der gleiche Absender und der gleiche ausgehende Mailserver verwendet wird, erstellen wir jetzt ein kleines Shell-Skript welches die grundlegenden Informationen bereits enthält.

pi@raspberrypi ~ $ sudo vi /usr/local/bin/mailnotify.sh

Fügen Sie in die neue Datei den folgenden Code ein und ändern anschließend die Einstellungen entsprechend ab. Hierbei wird über die Option SENDER die E-Mail Adresse des Absenders spezifiziert und über RECIPIENT die Adresse des Empfängers. Der vollständige Domainname des SMTP-Mailservers wird über SMTPSERVER angegeben. Sie können hier einen Mailserver aus Ihrem eigenen Netzwerk angeben oder den Mailserver eines größeren Providers wie zum Beispiel GMail, GMX oder Web.de. Sollte der SMTP-Server vor der Annahme einer neuen E-Mail eine Authentifizierung verlangen, müssen Sie die SMTP-Zugangsdaten über SMTPUSERNAME und SMTPPASSWORD angeben. Unterstützt der SMTP-Server eine verschlüsselte Verbindung, sollten Sie die Option USETLS auf jeden Fall aktivieren.

Hinweis: Da das Shell-Skript unter /usr/local/bin/ für jeden Benutzer verfügbar ist, kann auch jeder Benutzer auf Ihrem Raspberry Pi das Skript verwenden und die Zugangsdaten für das Postfach auslesen. Ist dies nicht erwünscht, können Sie den Zugriff über die Benutzerrechte einschränken oder das Skript zum Beispiel in Ihrem Heimatverzeichnis ablegen.

###########################################################################
##                                                                       ##
##              Sending E-Mail notification with sendEmail               ##
##                                                                       ##
## Creation:    15.08.2013                                               ##
## Last Update: 20.10.2013                                               ##
##                                                                       ##
## Copyright (c) 2013 by Georg Kainzbauer <http://www.gtkdb.de>          ##
##                                                                       ##
## This program is free software; you can redistribute it and/or modify  ##
## it under the terms of the GNU General Public License as published by  ##
## the Free Software Foundation; either version 2 of the License, or     ##
## (at your option) any later version.                                   ##
##                                                                       ##
###########################################################################
#!/bin/bash

# Sender of the mail
SENDER="absender@domain.de"

# Recipient of the mail
RECIPIENT="empfaenger@domain.de"

# SMTP server
SMTPSERVER="smtp.domain.de"

# User name on the SMTP server
SMTPUSERNAME="MeinMailAccount"

# Password on the SMTP server
SMTPPASSWORD="MeinMailPasswort"

# Enable TLS for the SMTP connection
USETLS=1

###################################################################
# NORMALLY THERE IS NO NEED TO CHANGE ANYTHING BELOW THIS COMMENT #
###################################################################

# Use first argument as mail subject
if [ -n "$1" ]; then
  SUBJECT="$1"
else
  # No subject specified
  SUBJECT=""
fi

# Use second argument as mail body
if [ -n "$2" ]; then
  BODY="$2"
else
  # No mail body specified
  BODY=""
fi

# Generate the options list for sendEmail
OPTIONS=""

if [ -n "${SMTPSERVER}" ]; then
  OPTIONS="${OPTIONS} -s ${SMTPSERVER}"
fi

if [ -n "${SMTPUSERNAME}" ]; then
  OPTIONS="${OPTIONS} -xu ${SMTPUSERNAME}"
fi

if [ -n "${SMTPPASSWORD}" ]; then
  OPTIONS="${OPTIONS} -xp ${SMTPPASSWORD}"
fi

if [ -n "${USETLS}" ]; then
  if [ ${USETLS} == 1 ]; then
    OPTIONS="${OPTIONS} -o tls=yes"
  else
    OPTIONS="${OPTIONS} -o tls=no"
  fi
fi

# Send the mail with sendEmail
sendEmail -f ${SENDER} -t ${RECIPIENT} -u "${SUBJECT}" -m "${BODY}" ${OPTIONS}

exit 0

Nachdem Sie das Shell-Skript erstellt haben, müssen Sie es noch ausführbar machen.

pi@raspberrypi ~ $ sudo chmod +x /usr/local/bin/mailnotify.sh

Sollten Sie das Shell-Skript oder sendEmail bereits jetzt ausprobieren, wird Ihnen vermutlich nur die folgende Fehlermeldung angezeigt.

pi@raspberrypi ~ $ mailnotify.sh "Test" "Dies ist eine Testnachricht."
invalid SSL_version specified at /usr/share/perl5/IO/Socket/SSL.pm line 332

Diese Fehlermeldung kann man durch eine kleine Modifikation in der /usr/share/perl5/IO/Socket/SSL.pm beheben. Öffnen Sie die Datei dazu mit einem Editor.

pi@raspberrypi ~ $ sudo vi /usr/share/perl5/IO/Socket/SSL.pm

In der Zeile 1490 sollten Sie den folgenden regulären Ausdruck vorfinden.

            m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))$}i

Ziemlich am Ende des regulären Ausdrucks befindet sich ein $-Zeichen welches Sie entfernen sollten. Nach der Änderung sollte die Zeile wie folgt aussehen.

            m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i

Speichern Sie anschließend die SSL.pm ab und rufen das Shell-Skript wie folgt auf. Sollte es keine Probleme bei den Einstellungen zum Mailserver geben, wird eine E-Mail an das im Skript angegebene Postfach gesendet.

pi@raspberrypi ~ $ mailnotify.sh "Test" "Dies ist eine Testnachricht."
Aug 15 16:32:30 raspberrypi sendEmail[4163]: Email was sent successfully!

Wie Sie in diesem Beispiel bereits erkennen können, werden beim Aufruf von mailnotify.sh zwei Argumente übergeben. Das erste Argument ist der Betreff der E-Mail und das zweite Argument enthält den Text der Nachricht.

Weiterführende Tutorials

Raspbian: TLS-Fehlermeldung beim Aufruf von sendEmail beheben
Raspbian: E-Mails mit Anhang vom Raspberry Pi mit sendEmail verschicken


Dieser Eintrag wurde am 15.08.2013 erstellt und zuletzt am 24.01.2016 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_36_2296.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2016 by Georg Kainzbauer