Seite 1 von 1

smtplib fehler

Verfasst: Samstag 13. November 2021, 09:26
von THE_PYTHON_GUY
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

Re: smtplib fehler

Verfasst: Samstag 13. November 2021, 10:57
von noisefloor
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

Re: smtplib fehler

Verfasst: Samstag 13. November 2021, 13:05
von Sirius3
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')