E-Mails versenden mit Python

E-Mails versenden mit Python Titelbild

Von Zeit zu Zeit kann es hilfreich sein, mit dem Raspberry Pi E-Mails zu versenden. Die Möglichkeiten sind vielseitig. Angefangen bei einem einfachen Wecker bis hin zu Benachrichtigung, wenn bestimmte Ereignisse eintreten, wie zum Beispiel gemessene Bewegungen oder überschrittene Grenzwerte bezüglich der Feuchtigkeit. Dazu kommt, dass sich Emails überall einfach empfangen lassen.

Für die folgende Anleitung braucht ihr einen Account bei einem E-Mail-Provider. Wir werden hier einen Account von Google Mail und einen von GMX benutzen, generell kannst du aber jeden E-Mail-Anbieter nutzen.

Wenn du Google Mail benutzt, musst du erst noch einstellen, dass auch unsichere Apps auf deine E-Mail zugreifen können. Einfach auf "Turn On" klicken.

Alle Bibliotheken die wir benutzen werden, sind bei Python2 schon standardmäßig dabei.

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText

senderEmail = "jp42@gmx.de"
empfangsEmail = "samuel.brinasdfasdfkmann@googlemail.com"
msg = MIMEMultipart()
msg['From'] = senderEmail
msg['To'] = empfangsEmail
msg['Subject'] = "Deine Pflanze verdurstet"

emailText = "Diese E-Mail kommt von deinem <b>Raspberr</b> Pi"
msg.attach(MIMEText(emailText, 'html'))

server = smtplib.SMTP('mail.gmx.net', 587) # Die Server Daten
server.starttls()
server.login(senderEmail, "deinPasswort") # Das Passwort
text = msg.as_string()
server.sendmail(senderEmail, empfangsEmail, text)
server.quit()

. Natürlich musst du bei den Variablen senderEmail, empfangsEmail und das Passwort für deine E-Mail-Adresse anpassen. Wenn du Google Mail benutzt, muss Zeile 15 mit den Email Serverdaten so aussehen: server = smtplib.SMTP('smtp.gmail.com', 587).

Wenn du das Programm ausführst, sollte nichts im Terminal erscheinen und die E-Mail wurde versandt. Bei Problemen haben wir unten noch einmal mögliche Fehlerquellen aufgelistet.

Schritt für Schritt erklärt

In den ersten 3 Zeilen binden wir die benötigten Bibliotheken ein. Die erste Bibliothek smtplib ist eine Bibliothek für das Versenden von E-Mails mit dem Simple Mail Transfer Protocol, welches ein Standard für das Versenden von E-Mails ist. Die Bibliotheken in Zeile 2 und 3 brauchen wir vor allem für das richtige Darstellen des E-Mail Inhaltes.

In Zeile 5 und 6 wird festgelegt, wer der Sender und wer der Empfänger ist. Du kannst dabei natürlich auch die E-Mail an dich selber senden.

In den Zeilen 7 bis 10 wird der erste Teil des E-Mail Inhaltes festgelegt und in der Variable msg gespeichert. In Zeile 10 legen wir den Betreff (engl. Subject) fest. Hier kannst du alles wählen, was ein String ist.

In Zeile 12 und 13 legen wir jetzt den Inhalt der E-Mail fest. Dazu erstellen wir zuerst einen String und übergeben diesen in der nächsten Zeile auch an die msg Variable. Der Text kann natürlich auch länger sein. Damit die E-Mail nicht einfach nur ein langer Textblock ist, können wir mit HTML Tags (das sind die < > ) den Inhalt darstellen. < b > < / b > Stehen für einen fett geschriebenen Text.

In Zeile 14 erstellen wir die Variable server und speichern die Zugangsdaten zum SMTP Server. Das ist konkret der Ort, an den wir die E-Mail und Anmeldeinformationen schicken. Es ist quasi die Anschrift des Mailservers. Diese Zeile musst du ändern, wenn du bei einem anderen Provider deine E-Mail-Adresse hast.

In Zeile 16 und 17 bauen wir die Verbindung zum Server auf und versuchen dann, uns anzumelden. Dafür übergeben wir die E-Mail-Adresse und das Passwort.

In Zeile 18 werden jetzt die gesamten Daten, die wir in der *msg Variable gespeichert haben, in ein Format für die E-Mail umgewandelt und in der Variable text gespeichert. In Zeile 20 wird dann die E-Mail versendet, mit den Empfänger- und Sender-Daten, die schon vorher festgelegt wurden. In Zeile 21 wird die Verbindung zum Mail Server geschlossen.

Die E-Mail ist versendet und damit wurde die Aufgabe des Programmes erfüllt.

Mögliche Fehlermeldungen

smtplib.SMTPAuthenticationError: (535, 'Authentication credentials invalid')

Diese Fehlermeldung sagt, dass die Login-Daten nicht stimmen. Das kann daran liegen, dass das Passwort oder die E-MailAAdresse zum Anmelden nicht korrekt war. Hier solltest du die Daten nochmal kontrollieren.

socket.gaierror: [Errno -2] Name or service not known

In diesem Fall wird ein falscher Server angegeben. Jeder E-Mail-Provider hat eine andere Anschrift. Den von GMX findest du unter: mail.gmx.net und von Google Mail unter: smtp.gmail.com

Die Email ist bei der Empfänger E-Mail-Adresse nicht angekommen? Hier solltest du nochmal kontrollieren, ob diese im Programm richtig angegeben wurde. Es gibt nämlich keine Fehlermeldung, wenn an eine nicht vorhandene E-Mail-Adresse benutzt wurde.

Noch Fragen oder Feedback?

Bevor du eine Frage stellen kannst musst du dich zuerst Anmelden oder Regestrieren!