Hallo zusammen,
ich möchte mit Python eine Email versenden. Leider haben die Beiträge in diesem Forum mich hier nicht weitergebracht.
Ich möchte das Mail über meinen bestehenden Zugang (T-online) versenden.
Leider klappt das nicht.
Der Port und Password verwende ich auch in meinem Emailprogramm.
Hier mein Code:
import smtplib
GMAIL_USER = 'absender@t-line.de'
GMAIL_PASS = 'password'
SMTP_SERVER = 'securesmtp.t-online.de'
SMTP_PORT = 465
def send_email(recipient, subject, text):
smtpserver = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
#smtpserver.ehlo()
#smtpserver.starttls()
#smtpserver.ehlo()
smtpserver.login(GMAIL_USER, GMAIL_PASS)
header = 'To:' + empfaenger@web.de + '\n' + 'From: ' + GMAIL_USER
msg = header + '\n' + testtest + '\n\n'
smtpserver.sendmail(GMAIL_USER, 'empfaenger@web.de', msg)
smtpserver.quit()
send_email('absender@t-online.de', 'sub', 'this is text')
Das ist die Reaktion!
Traceback (most recent call last):
File "/home/pi/e_mail.py", line 16, in <module>
send_email('absender@t-online.de', 'sub', 'this is text')
File "/home/pi/e_mail.py", line 7, in send_email
smtpserver = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
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 337, in connect
(code, msg) = self.getreply()
File "/usr/lib/python3.5/smtplib.py", line 393, in getreply
raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed
>>>
Bin für jede Hilfe dankbar.
Ich habe es auch schon über einen anderen Server versucht. Gleiche Reaktion.
Daher vermute ich bei mir ein Grundsätzliches Kenntnisproblem.
Grüße
Reiner
Email aus Python versenden mit Raspbery Pi
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Reiner_Rosa: Anmerkungen zum Quelltext: `GMAIL_*` in Namen die nichts mit GMail zu tun haben sind irreführend.
Abkürzungen in Namen vermeiden. Wenn man `PASSWORD` meint, nicht nur `PASS` schreiben, und `message` ist leichter lesbar und verständlicher als `msg`.
Beim Aufruf der Funktion wird "absender@t-online.de" als `recipient` übergeben, was ein bisschen irreführend ist.
Keines der drei Argumente der Funktion wird tatsächlich verwendet.
Bei ``header = 'To:' + empfaenger@web.de + '\n' + 'From: ' + GMAIL_USER`` sind die Namen `empfaenger` und `web` nicht definiert und führen zu einem `NameError`. Das der Compiler da nicht schon drüber stolpert liegt daran, das ``@`` ein Operator ist.
In der nächsten Zeile ist dann `testtest` undefiniert.
Zeichenketten mit ``+`` zusammenstückeln ist unübersichtlich und eher BASIC als Python. In Python gibt es dafür Zeichenkettenformatierung mit der `format()`-Methode und ab Python 3.6 f-Zeichenkettenliterale.
Auch wenn die Reihenfolge der Header keine Rolle spielt, würde ich "From" vor "To" setzen. Zwischen "To:" und dem Wert sollte ein Leerzeichen gesetzt werden.
Zwischen den Headern und dem Text erwartet SMTP eine Leerzeile. Du setzt die nach dem Text.
Zwischenstand (ungetestet):
Ich würde aber auch eine Bibliothek empfehlen die einem den ganzen Low-Level-Kram abnimmt um den man sich beim SMTP-Protokoll und erstellen einer Nachricht nach RFC2822 sonst selbst kümmern muss.
Abkürzungen in Namen vermeiden. Wenn man `PASSWORD` meint, nicht nur `PASS` schreiben, und `message` ist leichter lesbar und verständlicher als `msg`.
Beim Aufruf der Funktion wird "absender@t-online.de" als `recipient` übergeben, was ein bisschen irreführend ist.
Keines der drei Argumente der Funktion wird tatsächlich verwendet.
Bei ``header = 'To:' + empfaenger@web.de + '\n' + 'From: ' + GMAIL_USER`` sind die Namen `empfaenger` und `web` nicht definiert und führen zu einem `NameError`. Das der Compiler da nicht schon drüber stolpert liegt daran, das ``@`` ein Operator ist.
In der nächsten Zeile ist dann `testtest` undefiniert.
Zeichenketten mit ``+`` zusammenstückeln ist unübersichtlich und eher BASIC als Python. In Python gibt es dafür Zeichenkettenformatierung mit der `format()`-Methode und ab Python 3.6 f-Zeichenkettenliterale.
Auch wenn die Reihenfolge der Header keine Rolle spielt, würde ich "From" vor "To" setzen. Zwischen "To:" und dem Wert sollte ein Leerzeichen gesetzt werden.
Zwischen den Headern und dem Text erwartet SMTP eine Leerzeile. Du setzt die nach dem Text.
Zwischenstand (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python3
import smtplib
SMTP_USER = "absender@t-online.de"
SMTP_PASSWORD = "password"
SMTP_SERVER = "securesmtp.t-online.de"
SMTP_PORT = 465
def send_email(recipient, subject, text):
with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as smtp_server:
# smtp_server.starttls()
smtp_server.login(SMTP_USER, SMTP_PASSWORD)
headers = f"From: {SMTP_USER}\nTo: {recipient}\nSubject: {subject}\n"
smtp_server.sendmail(SMTP_USER, recipient, f"{headers}\n{text}")
if __name__ == "__main__":
send_email("empfaenger@web.de", "subject", "this is text")
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
-
- User
- Beiträge: 2
- Registriert: Montag 16. März 2020, 19:39
Zuerst mal ein Danke für die schnelle Reaktion.
Welche Bibliothek könnte ich denn nehmen?
Gruss
Reiner
Welche Bibliothek könnte ich denn nehmen?
Gruss
Reiner