Beispiel - Verwaltung von E-Mail-Adressen
Newsletter
Newsletter werden benutzt, um allen Mitgliedern einer Gruppe Informationen per E-Mail zukommen zu lassen.
So könnten schulinterne Newsletter etwa dazu dienen, allen Schülerinnen und Schülern der Jahrgangsstufe 11 des ...-Gymnasiums den neuen Kursarbeitsplan zukommen zu lassen. Hierzu benötigt der MSS-Leiter die E-Mail-Adressen aller Schülerinnen und Schüler der 11. Jahrgangsstufe.
Zudem wird ein Programm benötigt, das E-Mails an alle diese Adressen verschickt. Wie so etwas geht wird weiten unten gezeigt. Wir betrachten hier zuerst die Verwaltung von E-Mail-Adressen.
Verwaltung von E-Mail-Adressen
Wie lässt sich eine größere Ansammlung von E-Mail-Adressen verwalten? Bisher haben wir alle anfallenden Daten mit Hilfe von Variablen erfasst. Diesen Ansatz könnten wir hier ebenfalls weiter verfolgen.
# Datenverwaltung
adresse1 = 'amueller@gmx.de'
adresse2 = 'carla2@hotmail.org'
adresse3 = 'herbert.fluhr@web.de'
adresse4 = 'petra@dahm.de'
adresse5 = 'ewen@t-online.de'
adresse6 = 't_schmidt@web.de'
adresse7 = 'nicole.weber@gmx.de'
# Datenverarbeitung
print(adresse1)
print(adresse2)
print(adresse3)
# ...
Wenn auf diese Weise sehr viele E-Mail-Adressen verwalten werden sollen (z.B. die Adressen von 100 Personen), dann erweist sich der gewählte Ansatz als nicht praktikabel. Ein neuer Ansatz muss also her.
Statt alle Daten einzeln mit Variablen zu verwalten, ist es geschickter,
eine Art Daten-Container
zu benutzen.
Mit einer Liste als Daten-Container werden mehrere einzelne Daten zu einer komplexeren Dateneinheit zusammenfassen.
Man benötigt dann nur noch eine Variable, um die gesamte Dateneinheit zu verwalten.
# Datenverwaltung
adressen = [
'amueller@gmx.de',
'carla2@hotmail.org',
'herbert.fluhr@web.de',
'petra@dahm.de',
'ewen@t-online.de',
't_schmidt@web.de',
'nicole.weber@gmx.de'
]
# Datenverarbeitung
for adresse in adressen:
print(adresse)
Aufgabe 1
Teste das gezeigte Programm. Erweitere die bereits existierende Liste um weitere E-Mail-Adressen. Worin besteht der Vorteil, eine Datenansammlung mit einer Liste zu verwalten?
Zugriff auf die Listenelemente
Auf die einzelnen Elemente einer Liste kann man (lesend und schreibend) zugreifen.
Aufgabe 2
Informiere dich auf der nächsten Seite über den Zugriff auf Listenelemente. Bearbeite anschließend den folgenden Python-Dialog. Stelle erst Vermutungen über die Rückmeldungen von Python auf. Überprüfe anschließend deine Vermutungen, indem du den Dialog selbst ausführst.
>>> adressen = [
'amueller@gmx.de',
'carla2@hotmail.org',
'herbert.fluhr@web.de',
'petra@dahm.de',
'ewen@t-online.de',
't_schmidt@web.de',
'nicole.weber@gmx.de'
]
>>> adressen[0]
>>> adressen[1]
>>> adressen[6]
>>> adressen[7]
>>> len(adressen)
>>> adressen[len(adressen)-1]
>>> adressen
>>> adressen[1] = 'carla_meier@online.de'
>>> adressen
Eine Liste durchlaufen
Es gibt mehrere Möglichkeiten in Python, alle Elemente einer Liste zu durchlaufen.
Aufgabe 3
(a) Informiere dich auf der nächsten Seite, wie man eine Liste durchlaufen kann.
(b) Entwickle ein Programm, das alle E-Mail-Adressen auf dem Bildschirm ausgibt.
(c) Entwickle ein Programm, das E-Mail-Header erzeugt und auf dem Bildschirm wie folgt ausgibt.
>>>
from: mssleiter@burg-kl.de
to: amueller@gmx.de
subject: Kursarbeiten
...
from: mssleiter@burg-kl.de
to: carla2@hotmail.org
subject: Kursarbeiten
...
...
from: mssleiter@burg-kl.de
to: nicole.weber@gmx.de
subject: Kursarbeiten
...
Hinzufügen und Löschen von Listenelelementen
Listen kann man dynamisch erweitern. Man kann auch wieder Elemente aus einer Liste löschen.
Aufgabe 4
(a) Informiere dich zuerst auf der nächsten Seite, wie man Elemente hinzufügt und auf Teillisten zugreift.
(b) Bearbeite anschließend den folgenden Python-Dialog. Stelle erst Vermutungen über die Rückmeldungen von Python auf. Überprüfe anschließend deine Vermutungen, indem du den Dialog selbst ausführst.
>>> adressen = ['amueller@gmx.de', 'carla2@hotmail.org', 'herbert.fluhr@web.de', 'petra@dahm.de']
>>> adressen
>>> adressen + ['b-krewer@t-online.de']
>>> adressen
>>> adressen = adressen + ['b-krewer@t-online.de']
>>> adressen
>>> adressen[0:1] + adressen[2:5]
>>> adressen
>>> adressen = adressen[0:1] + adressen[2:5]
>>> adressen
Aufgabe 5
(a) Führe den Python-Dialog selbst aus. Erkläre, wie die Ergebnisse zustande kommen.
(b) Wie kann man ein neues Listenelement vorne in die Liste setzen? Wie kann man das erste Listenelement löschen? Teste deine Ideen mit geeigneten Python-Dialogen.
E-Mails automatisiert verschicken
Das folgende Programm zeigt, wie man eine E-Mail automatisiert verschicken kann.
def eMailVersenden(adresseAbsender, adresseEmpfaenger, betreff, text):
# Mail erstellen
mail_from = adresseAbsender
mail_to = adresseEmpfaenger
mail_subject = betreff
mail_header = 'From: ' + mail_from + '\n' + 'To: ' + mail_to + '\n' + 'Subject: ' + mail_subject + '\n'
mail_text = text
mail_body = '\n' + mail_text + '\n\n'
mail = mail_header + mail_body
print(mail)
# Mail versenden - Einstellungen aus Postausgang-Server (SMTP)
# Web.de
# benutzer = adresseAbsender
# mailserver = 'smtp.web.de'
# Aol.de
# benutzer = 'meineAdresse@aol.com'
# mailserver = 'smtp.aim.com'
# Gmx.de
# benutzer = 'meineAdresse@gmx.de'
# mailserver = 'smtp.gmx.de'
# Gmail / GoogleMail
# benutzer = 'meineAdresse@googlemail.com'
# mailserver = 'smtp.gmail.com'
#Verbindung erstellen, anmelden und Email verschicken
import smtplib
benutzer = adresseAbsender
mailserverBenutzer = '...' # ggf. oben auswählen
passwort = '...' # BLANKEN !!!
empfaenger = mail_to
#mailserver = 's. oben'
smtp = smtplib.SMTP(mailserverBenutzer)
smtp.starttls()
smtp.login(benutzer, passwort)
smtp.sendmail(benutzer, empfaenger, mail)
smtp.quit()
# Test
eMailVersenden('...', '...', 'Test', 'Hallo, alles ok?')
Aufgabe 6
Ändere das Programm so ab, dass man eine E-Mail an alle Adressen einer Empfängerliste schicken kann. Teste das Programm mit geeigneten Daten.