smtplib fehler

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
THE_PYTHON_GUY
User
Beiträge: 18
Registriert: Samstag 6. November 2021, 09:58

Hallo,
ich will mit folgendem Code eine Email schreiben:

Code: Alles auswählen

import smtplib

user = 'forexample@company.de'
pwd = 'Passwort'
mail_text = 'Hallo,\n\ndas ist ein Test!\n\n:)'
subject = 'Python-Mail :)'

MAIL_FROM = 'forexample@company.de'
RCPT_TO = 'forexampletwo@company.de'
DATA = 'From:%s\nTo:%s\nSubject:%s\n\n%s' % (MAIL_FROM, RCPT_TO, subject, mail_text)

class smtplib_SMTP (host='https://mail.gmx.net', port=0, local_hostname=None, [timeout, ]source_address=None)
server.starttls()
server.login(user, pwd)
server.sendmail(MAIL_FROM, RCPT_TO, DATA)
server.quit()
Leider kommt aber folgender Fehler:

Code: Alles auswählen

class smtplib_SMTP (host='https://mail.gmx.net', port=0, local_hostname=None, [timeout, ]source_address=None)
                                                                                             ^
SyntaxError: positional argument follows keyword argument
Benutzeravatar
noisefloor
User
Beiträge: 4195
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das `[timeout, ]` ist an der Stelle so falsch, weil Positionsargumente vor Schlüsselwortargumenten stehen müssen.

Das ist in der Doku auch erklärt, aber zugegebener Maßen ist das Beispiel ein bisschen unglücklich. Bzw es ist so, das Copy & Paste ohne kurz drüber nachdenken und Doku lesen nicht funktioniert ;-)

Entweder lässt du das komplett weg oder du schreibst stattdessen `timeout = 5`, falls du z.B. ein timeout von 5 Sekunden setzen willst. Wenn du es weg lässt wird der Default-Wert des Moduls genutzt (wie auch immer der ist, müsstest du in der Doku suchen).

Gruß, noisefloor
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich bekomme da einen Invalid Syntax-Error, weil `]source_address` keine gültiger Code ist, dann fehlt Doppelpunkt hinter der class-Definition, dann fehlt der Block innerhalb der Klassendefinition.
Oder es soll einfach gar keine Klasse definiert werden, sondern eine Instanz erzeugt werden. Und dafür braucht man auch nicht all die Default-Argumente angeben.

Code: Alles auswählen

server = smtplib.SMTP('https://mail.gmx.net')
Antworten