Sendmail auf dem Raspberry einrichten:
Wir installieren 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.
Code:
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.
Code:
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.
Code:
###########################################################################
## ##
## Sending E-Mail notification with sendEmail ##
## ##
## Creation: 15.08.2013 ##
## Last Update: 20.10.2013 ##
## ##
## Copyright (c) 2013 by Georg Kainzbauer <georgkainzbauer@gmx.net> ##
## ##
## 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.
Code:
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:
Code:
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.
Code:
pi@raspberrypi ~ $ sudo vi /usr/share/perl5/IO/Socket/SSL.pm
In der Zeile 1490 sollten Sie den folgenden regulären Ausdruck vorfinden.
Code:
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.
Code:
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.
Code:
pi@raspberrypi ~ $ mailnotify.sh "Test" "Dies ist eine Testnachricht."
Aug 15 16:32:30 raspberrypi sendEmail[4163]: Email was sent successfully!