E-Mails versenden mit dem Raspberry Pi 3

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Mauron
User
Beiträge: 4
Registriert: Sonntag 17. Dezember 2017, 15:06

Guten Tag Community,

ersteinmal vielen Dank für die Aufnahme. Mein Name ist Marvin und ich bin 18 Jahre alt. Zu meinem 18ten Geburtstag habe ich einen Raspberry Pi 3 bekommen. In den Sommerferien nahm ich an einem Ferienkurs zu Raspberry Pis teil und da entwarfen wir unter Anderem einen Code, mit dem man wohl E-Mails "in anderem Namen" verschicken kann. Man kann damit E-Mails an Leute senden (ohne Inhalt, nur mit Betreff aktuell), und zwar von einer beliebigen Absendeadresse. Diese muss also nicht mal existieren und man brauch kein Passwort. Außerdem brauch man wohl keinen E-Mail-Server...
Ich weiß dass man mit diesem Code u.U. viel Unsinn anstellen kann, da man aber keinen Inhalt hinzufügen kann ist es eher zum Spaß bzw. die Theorie dahinter gedacht... Also keine Angst ;-)

Der Code funktioniert nur leider irgendwie nicht... findet jemand einen Fehler bzw. habe ich etwas vergessen?

Mit freundlichen Grüßen
Mauron

Code: Alles auswählen

from smtplib import SMTP
from email.mime.text import MIMEText
msg = MIMEText("")
msg['Subject'] = 'Hello World'
msg['From'] = 'bla@blubb.de
msg['To'] = 'blablubb@gmail.com'
server = smtplib.SMTP('localhost')
server.set_debuglevel(1)
server.sendmail("blubbbla@gmail.com", "blablubb@gmail.com", msg)
server.quit()
ich erhalte folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "/home/pi/Dokumente/emailtest.py", line 8, in <module>
    server = smtplib.SMTP('localhost')
NameError: name 'smtplib' is not defined
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst dich entscheiden, ob du

Code: Alles auswählen

from modul import Name

ding = Name()
machen willst, oder

Code: Alles auswählen

import modul

ding = modul.Name()
Du mischst gerade das eine mit dem anderen.

Was die Eigenschaften deines Codes angeht: Email macht keinen Unterschied, ob du eine Mail mit oder ohne Inhalt verschickst. Entweder wird die angenommen, oder verworfen. Mich wuerde *sehr* wundern, wenn du unter beliebiger Mail an beliebige Adressen Nachrichten verschicken kannst. Ueblicherweise verweigern SMTP-Server eine eingehende Nachricht, wenn der Absender und der Server von dem die Nachricht kommen nicht in Bezug zueinander gebracht werden koennen.
Mauron
User
Beiträge: 4
Registriert: Sonntag 17. Dezember 2017, 15:06

Danke für die Antwort! Jetzt ist das meine Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "/home/pi/Dokumente/emailtest.py", line 8, in <module>
    server = smtplib.SMTP('localhost')
  File "/usr/lib/python3.5/smtplib.py", line 251, in __init__
    (code, msg) = self.connect(host, port)
  File "/usr/lib/python3.5/smtplib.py", line 335, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "/usr/lib/python3.5/smtplib.py", line 306, in _get_socket
    self.source_address)
  File "/usr/lib/python3.5/socket.py", line 712, in create_connection
    raise err
  File "/usr/lib/python3.5/socket.py", line 703, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
Also damals hab ich das irgendwie so verstanden, dass der Server wohl gerade weil er das nicht zuordnen kann die trotzdem irgendwie verschickt... aber kenne mich das nicht sooo aus leider, deshalb frage ich hier ja nach :D
Der Code hat auf jeden Fall funktioniert, wir haben das ausprobiert... Verstehe nur nicht wieso es jetzt nicht (mehr) geht.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nunja, so funktioniert hat er schonmal nicht. Er hatte einen Fehler, der auf keinem Python der Welt - auch nicht im Sommer-Camp - funktioniert haette.

Und das er nun fehlschlaegt deutet darauf hin, dass du keinen lokalen SMTP-Server betreibst. Was du aber mit 'localhost' angibst zu tun.

Was Email angeht, und warum das wann wie versandt und wann nicht wird... ich kann dir nur sagen: es geht so einfach nicht. Nochmal: der Email-Versand mit oder ohne Inhalt ist technisch exakt gleich, und wird auch sonstwie nicht anders gehandhabt. Wenn es wirklich ginge, dann wuerde es dem ungefilterten SPAM-Versand Tuer und Tor oeffnen. Es mag sein, das man das hinbekommt (SPAM gibt es ja), aber es hat halt nix mit der von dir behaupteten Eigenschaft zu tun, das man ja nur einen Betreff angibt.

Angesichts der Fehlermeldung musst du wohl noch mal nachvollziehen, wie ihr das System aufgesetzt habt. ZB mit EXIM, Postfix oder unter Angaben eines externen SMTP-Servers.

Die Frage ist auch, was du denn erreichen willst. Ist es dir *wichtig*, Emails von einem unbekannten Absender zu verschicken? Oder willst du einfach Emails zur Benachrichtigung an dich selbst schicken? Dann kannst du ja einen gueltigen SMTP-Server + Username/Passwort benutzen.
Mauron
User
Beiträge: 4
Registriert: Sonntag 17. Dezember 2017, 15:06

Ich erinnere mich daran, dass in der vorletzten Zeile die erste E-Mail-Adresse eine wohl tatsächlich existierende war und dass der "Betreuer" einen eigenen Server besaß. Kann der Erfolg des Codes also daran liegen, dass wir in einem Netzwerk waren, in dem ein Server existierte?

Der Grund wieso ich das machen möchte ist einfach der, dass ich lernen möchte wie das geht und wie es funktioniert.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn der Server angegeben war, statt localhost, dann wuerde es das erklaeren.

Ich habe persoenlich wenige, und hauptsaechlich unangenehme Erfahrungen mit dem aufsetzen und verschicken von Emails gemacht. Eben weil durch die immer mehr anziehenden Regeln/Heuristiken der Email-Provider die Huerden hoeher gelegt werden, damit SPAM nicht noch mehr Ueberhand gewinnt. Insofern kann ich dir hier jetzt auch nicht weiterhelfen - es kann ja keiner erraten, was ihr damals gemacht habt.

Wenn du dich fuer Email interessiert, gibt es da bestimmt eine Vielzahl von online-Quellen, in denen du dich da belesen kannst. Mit Python an sich hat das erstmal nichts mehr zu tun.
Antworten