Hallo Ihr Lieben,
ich möchte mit Python eine E-Mail versenden . Das ist mein Code:
#send email
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
server = smtplib.SMTP('smtp.ionos.de', 465)
try:
name="Mein Name" #You need to fill the name here
server.connect('smtp.ionos.de', 465)
server.starttls()
server.ehlo()
server.login("info@test.de","Passwort")
TOADDR = "test@web.de"
FromADDR = "info@test.de"
msg = MIMEMultipart('alternative')
msg['Subject'] = "Testbetreff"
msg['From'] = FromADDR
msg['To'] = TOADDR
#The below is email body
html = """\
<html>
<body>
<p><span style="color: rgb(0,0,0);">Dear {0},</span></p>
<p>
your email body
</p>
<p>Kind Regards,<br />
Your name ....
</p>
</body>
</html>
""".format(name.split()[0])
msg.attach(MIMEText(html, 'html'))
server.sendmail(FromADDR, TOADDR, msg.as_string())
except Exception as e:
# Print any error messages to stdout
print(e)
finally:
server.quit()
Ich erhalte folgenden Fehler wenn ich es ausführe:
Traceback (most recent call last):
File "C:\Users\MeinName\Downloads\emailsendenTest3.py", line 5, in <module>
server = smtplib.SMTP('smtp.ionos.de', 465)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\Python312\Lib\smtplib.py", line 255, in __init__
(code, msg) = self.connect(host, port)
^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\Python312\Lib\smtplib.py", line 343, in connect
(code, msg) = self.getreply()
^^^^^^^^^^^^^^^
File "C:\Program Files\Python312\Lib\smtplib.py", line 405, in getreply
raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed
Ich verwende Python 3.12
Probleme mit smtplib
Laut Python-Doku (https://docs.python.org/3/library/smtplib.html#index-0) gibt es auch noch eine Klasse SMTP_SSL.
Probiere doch mal anstelle von
Probiere doch mal
Code: Alles auswählen
server = smtplib.SMTP_SSL('smtp.ionos.de', 465)
Code: Alles auswählen
server = smtplib.SMTP('smtp.ionos.de', 465)
- DeaD_EyE
- User
- Beiträge: 1022
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
https://www.ionos.de/hilfe/e-mail/allge ... -und-smtp/
Es wird SSL/TLS benötigt.
Port 465: explizites TLS.
Port 587: TLS nach ehlo() und starttls()
Beim Port 465 ist die Verbindung von Anfang an verschlüsselt.
Beim Port 587 wird erst unverschlüsselt verbunden und dann eine verschlüsselte Verbindung durch starttls() initiiert.
Bei diesem Server wird explizites TLS benötigt, d.h. von Anfang an ist die Verbindung verschlüsselt.
Dafür die Klasse SMTP_SSL verwenden.
Für das Versenden von E-Mails nutze ich lieber emails.
Aber es ist auch nicht verkehrt zu lernen, wie eine E-Mail zusammengesetzt ist.
Es wird SSL/TLS benötigt.
Port 465: explizites TLS.
Port 587: TLS nach ehlo() und starttls()
Beim Port 465 ist die Verbindung von Anfang an verschlüsselt.
Beim Port 587 wird erst unverschlüsselt verbunden und dann eine verschlüsselte Verbindung durch starttls() initiiert.
Bei diesem Server wird explizites TLS benötigt, d.h. von Anfang an ist die Verbindung verschlüsselt.
Dafür die Klasse SMTP_SSL verwenden.
Code: Alles auswählen
import smtplib
server = smtplib.SMTP_SSL("smtp.ionos.de", 465)
Für das Versenden von E-Mails nutze ich lieber emails.
Aber es ist auch nicht verkehrt zu lernen, wie eine E-Mail zusammengesetzt ist.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
- __blackjack__
- User
- Beiträge: 13123
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@beginnerM99: Anmerkungen zum Quelltext:
Die Ausnahmebehandlung ist nicht sinnvoll. Da wird Information weggeworfen die zur Fehlersuche nützlich ist. Wenn man Ausnahmen nicht sinnvoll behandeln kann, lässt man es einfach sein, und lässt sich Python darum kümmern.
Die `SMTP`-Objekte sind Kontextmanager, also ``with`` statt ``try``/``finally`` zum Aufräumen.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).
Namen sollten keine kryptischen Abkürzungen enthalten oder gar nur daraus bestehen. Der Name soll dem Leser vermitteln was der Wert dahinter im Programm bedeutet, nicht zum rätseln zwingen.
Ungetestet:
Die Ausnahmebehandlung ist nicht sinnvoll. Da wird Information weggeworfen die zur Fehlersuche nützlich ist. Wenn man Ausnahmen nicht sinnvoll behandeln kann, lässt man es einfach sein, und lässt sich Python darum kümmern.
Die `SMTP`-Objekte sind Kontextmanager, also ``with`` statt ``try``/``finally`` zum Aufräumen.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).
Namen sollten keine kryptischen Abkürzungen enthalten oder gar nur daraus bestehen. Der Name soll dem Leser vermitteln was der Wert dahinter im Programm bedeutet, nicht zum rätseln zwingen.
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python3
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
TEMPLATE = """\
<html>
<body>
<p><span style="color: black;">Dear {0},</span></p>
<p>
your email body
</p>
<p>
Kind Regards,<br />
Your name ....
</p>
</body>
</html>
"""
def main():
name = "Mein Name"
recipient_email_address = "test@web.de"
sender_email_address = "info@test.de"
#
# TODO Multipart/Alternativ mit nur einem Part ist weder Multipart noch
# gibt's Alternativen.
#
message = MIMEMultipart("alternative")
message["Subject"] = "Testbetreff"
message["From"] = sender_email_address
message["To"] = recipient_email_address
message.attach(
MIMEText(TEMPLATE.format(name.split(maxsplit=1)[0]), "html")
)
with smtplib.SMTP_SSL("smtp.ionos.de") as server:
server.connect("smtp.ionos.de", 465)
server.login("info@test.de", "Passwort")
server.sendmail(
sender_email_address, recipient_email_address, message.as_string()
)
if __name__ == "__main__":
main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman