In einigen Projekten ist es nötig oder hilfreiche eine Mitteilung per Mail zu versenden. Dies ist natürlich auch möglich, wobei es jedoch verschiedene Möglichkeiten gibt. In diesem Tutorial geht es daher darum, wie man mit dem Raspberry Pi Emails senden kann, per Konsole, PHP, Python und vielen weiteren Sprachen.
Viel wird außer einem Raspberry Pi für dieses Tutorial nicht benötigt, da alles softwareseitig stattfindet. Dein Raspbian System sollte fertig eingerichtet und auf dem aktuellen Stand sein. Danach können wir direkt starten.
Per Kommandozeile Emails senden
Die einfachste und wahrscheinlich meist genutzte Möglichkeit mit dem Raspberry Pi Emails zu versenden ist über die Kommandozeile (Bash). Dies hat den Vorteil, dass es über verschiedene Sprachen (bspw. Python) einfach aufgerufen werden kann und somit die Mail verschickt wird, ohne dass viele andere Bibliotheken installiert werden müssen.
Alles was wir dazu brauchen ist ein kleines Paket, dass all dies für uns übernimmt. Wir loggen uns also per SSH ein und installieren es folgendermaßen:
sudo apt-get update && sudo apt-get install ssmtp mailutils
Dies dauert einen Augenblick. Danach sind wir schon fast fertig! Wir müssen lediglich noch unsere Daten eines Email Accounts eintragen, von dem die Mails gesendet werden sollen:
sudo nano /etc/ssmtp/ssmtp.conf
Hier ein Beispiel für GMail. Falls du einen anderen Provider nutzt, schaue dort die SMTP Einstellungen nach. Folgender Inhalt kommt in die Datei (Email Adresse und Passwort entsprechend anpassen):
root=postmaster mailhub=smtp.gmail.com:587 hostname=raspberrypi FromLineOverride=YES AuthUser=EMAILADRESSE@gmail.com AuthPass=DEINPASSWORT UseSTARTTLS=YES
Mittels der Option rewriteDomain=your.domain
und der Datei /etc/ssmtp/revaliases
können auch noch andere Absender angegeben werden (die Mail wird von deinem Google-Konto gesendet, aber es erscheint als xy@your.domain
. Speichere mit STRG+O und kehre mit STRG+X zurück zur Konsole.
Bei manchen Anbietern (1&1 / United Internet) ist der Eintrag rewriteDomain=your.domain
sogar unbedingt notwendig, damit das E-Mail schreiben funktioniert.
Nun testen wir das ganze einmal. Gib folgendes ein (Passe die E-Mail Adresse an, damit du überprüfen kannst, ob die Mail auch ankam):
echo “Test Inhalt text” | mail -s “Test Betreff Mail” empfaenger-mail@example.com
Der erste Parameter gibt den textuellen Inhalt an (hier ist auch HTML möglich), der zweite den Betreff der Mail und der dritte die Empfänger Email Adresse. Die Mail sollte gleich ankommen.
Falls du hier eine Fehlermeldung bekommst, ist es wahrscheinlich, dass die angegebenen Daten in der Konfigurationsdatei nicht stimmen. Überprüfe deinen User und Passwort.
Eine andere kleine Alternative ist der NullMailer.
Per PHP Skript vom Raspberry Pi Emails senden
Eine weitere Möglichkeit ist den Mailversand direkt per PHP zu starten. Dies kann z.B. für reine PHP Skripte sinnvoll sein. Zwar gibt es auch die Funktion shell_exec in PHP, womit wir den oberen Befehl ausführen können, jedoch geht dies auch ohne das vorherige Tool.
Damit wir Mails versenden können, muss Apache2 und PHP installiert sein. Am besten solltest du PHP7 installieren, da PHP5 bald nicht mehr unterstützt wird.
sudo apt-get install -y apache2
Die Source Listen enthalten nicht die Packages für PHP7, daher müssen wir diese erst hinzufügen:
sudo nano /etc/apt/sources.list
Füge folgende zwei Zeilen am Ende hinzu:
deb http://repozytorium.mati75.eu/raspbian jessie-backports main contrib non-free #deb-src http://repozytorium.mati75.eu/raspbian jessie-backports main contrib non-free
Für die Paketquellen sind zusätzliche Zertifikate nötig, welche wir hinzufügen:
sudo gpg --keyserver pgpkeys.mit.edu --recv-key CCD91D6111A06851 sudo gpg --armor --export CCD91D6111A06851 | sudo apt-key add -
Nun entfernen wir erst alte PHP5 Pakete (sofern vorhanden) und aktualisieren die Paketquellen, sodass wir anschließend die PHP7 Packages installieren können:
sudo apt-get remove php5* sudo apt-get update sudo apt-get install -y php7.0 php7.0-curl php7.0-gd php7.0-imap php7.0-json php7.0-mcrypt php7.0-mysql php7.0-opcache php7.0-xmlrpc libapache2-mod-php7.0
Prüfe ob die Installation geklappt hat mit:
php -v
Soweit, so gut. Nun wollen wir den entsprechenden Code zum Senden der Emails erstellen. Dies kann natürlich in alle PHP Dateien eingebunden werden, von der eine Mail versendet werden soll. Erstelle dazu eine Snippet Datei:
sudo nano mail-php-snippet.php
Diese Datei bekommt folgenden Inhalt (Sender und Empfänger anpassen):
1 2 3 4 5 6 7 8 9 |
<!--?<span class="hiddenSpellError" pre="" data-mce-bogus="1"-->php $to = "empfaenger@example.com"; $subject = "PHP Test mail"; $message = "This is a test email"; $from = "sender@deine.domain"; $headers = "From:" . $from; mail($to,$subject,$message,$headers); echo "Mail Sent.\n"; ?> |
Speichere nun mit STRG+O und gehe zurück zur Bash mit STRG+X. Anschließend kannst du das Skript aufrufen, worauf hin die Mail versendet wird:
php mail-php-snippet.php
Sollte die Email nicht sofort angekommen sein, schaue auch in deinem Spam Ordner nach.
Übrigens: Ein solches PHP Skript kann auch Eingabeparameter annehmen und somit per Konsole aufgerufen werden. Das hingegen ermöglicht auch eine Benutzung durch andere Programme. Unsere Python (etc.) Skripte können also ihre Parameter einfach übergeben. Der Vorteil ist hierbei, dass wir kein eigens eingerichtetes Email Konto brauchen.
16 Kommentare
Eine weitere lohnenswerte Alternative auf einem Raspberry Pi (oder einem anderen Debian-ähnlichen System) ist das Paket msmtp (bzw. msmtp-mta), das über die Paketverwaltung installiert wird und mit ebenfalls nur sehr geringem Aufwand konfiguriert wird. Das wäre für viele bestimmt auch interessant zu lesen.
es gibt auch noch den nullmailer
Hallo,
„Dies hat den Vorteil, dass es über verschiedene Sprachen (bspw. Python) einfach aufgerufen werden kann und somit die Mail verschickt wird.“…….
…..und wie sende ich denn nun über ein Python-Programm meine Mail ohne dabei das laufende Programm zu unterbrechen?
Ich könnte das nämlich gut brauchen für eine Alarmanlage, die ich mit einem Raspi und einem PiFace betreibe. Bisher habe ich im Alarmfall neben dem Alarmton, der eingeschaltet wird, nur eine mit „print“ in einem LX-Terminal ausgegebene Meldung. Solange ich in der Nähe bin reicht das. Wenn ich aber längere Zeit abwesend bin, wäre es schön, wenn mir das Programm eine Mail mit Datum und Uhrzeit des Alarmfalls senden würde. Da ich zwar auf Reisen nicht täglich meine Mails lese, aber doch ab- und zu bei Gelegenheit mal da reinschaue, wäre es auch beruhigend, wenn KEINE Alarmmeldung im Postfach wäre.
Martin
Dafür kannst du z.B. os.system nutzen.
Hallo wenn ich nur einfach mal den test ausprobiere dann bekomme ich nur ein Fehler zurück.
pi@raspberrypi:~ $ echo „Hello world email body“ | mail -s „Test Subject“ lars20mb@gmx.de
mail: Nachricht kann nicht gesendet werden: Prozess wurde mit einem von Null verschiedenen Status beendet
pi@raspberrypi:~ $
was kann ich machen?
Lars
Sind deine SMTP Einstellungen richtig?
Hallo,
ich habe die so übernommen wie es oben beschrieben wird. Habe halt nur meine gmail adresse eingesetzt mit dem entsprechenden passwort.
Muss ich etwas in /revaliases eintragen?
Lars
Nachdem ich meine Google einstellungen bei sichere APP auf unsicher geschaltet habe konnte ich einmalig eine Mail vom PI versenden, aber nun streickt das ganze.
Unbekanntes Gerät
Google hat eine Anmeldung über eine weniger sichere App verhindert.
Nun muß ich mal schauen wie ich den PI als sicheres Gerät hinzufügen kann.
Lars
Das PHP Skript ist fehlerhaft und funktioniert so wie es ist nicht. Hier mein Vorschlag wie es richtig ist.
>
Schade, die PHP Version scheitert an
sudo gpg –keyserver pgpkeys.mit.edu –recv-key CCD91D6111A06851
sudo gpg –armor –export CCD91D6111A06851 | sudo apt-key add –
bei beiden Zeilen gibt es eine „Datei oder Verzeichnis nicht gefunden…“
Das PHP Script bleibt somit unwirksam. Der PHP Script Verbesserungsvorschlag von Lukas würde mich auch interessieren… 😉
Gruß und Dank
Andeas
So funktioniert das Skript garantiert.
https://pastebin.com/b3PJi1CC
Das wäre sehr hilfreich.
sudo gpg –keyserver pgpkeys.mit.edu –recv-key CCD91D6111A06851
sudo gpg –armor –export CCD91D6111A06851 | sudo apt-key add –
letzterer funktioniert bei mir auch nicht, und somit wird nichts verschickt…. folgender fehler:
gpg: WARNUNG: Nichts exportiert
gpg: Keine gültigen OpenPGP-Daten gefunden.
Hallo,
ich will auf meinen Raspberry Emails über den Festplatten-Zustand mittels smartd per Email verschicken, aber ich scheitere bisher schon an der Konfiguration des mailutils Email tools.
Ich habe alle Schritte, wie oben beschrieben, ausgeführt. Ich benutze mein Gmail Konto. Benutzername und PW stimmen, mit denselben kann ich mich über die Weboberfläche problemlos einloggen..
Wenn ich jedoch wie oben angegeben eine Email senden will, bekomme ich als Fehlermeldung:
„mail: Nachricht kann nicht gesendet werden: Prozess wurde mit einem von Null verschiedenen Status beendet“
Was mache ich falsch?
Hallo,
seit Anfang Juni funktioniert das email versenden per smtp nicht mehr.
Habe viele Hinweise gefunden aber es konnte das Problem nicht lösen.
kann da jemand weiterhelfen?
Falls du gmail nutzt, so musst du beachten, dass Google die Authentifizierung geändert hat.