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
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.
Bild von der Kamera holen und ablegen! Dieser Code sollte auch dort liegen wo das mailnotify.sh liegt!
#!/bin/bash /bin/rm -f image.jpg /usr/bin/wget -O /var/www/ipcam_snapshot/image.jpg "http://IP der Kammera/snapshot.cgi?user=xxx&pwd=xxx" export IMAGE=/var/www/ipcam_snapshot/image.jpg sleep 10 /usr/local/bin/mailnotify_intercom.sh