Seite 1 von 1

E-Mail (SMTP) Google

Verfasst: Freitag 6. Dezember 2019, 16:41
von bmeyer
Guten Tag zusammen,

derzeit versuche ich eine E-Mail per SMTP zu senden. Klappt auch soweit.
Leider bekomme ich zwei Sachen nicht hin:

1. Eine Betreffzeile
2. Eine Nachricht (Body) bestehend aus mehreren Variablen

Versenden einer E-Mail mit einem einzigen String klappt wunderbar, doch ich würde gerne mehrere Variablen in "message" eintragen und senden.

str(format(usageinpercent, '.2f'))
warningtext


Hier ein kleiner Schnipsel, an welchem ihr mir eventuell Anregungen geben könnt:

Code: Alles auswählen

    
    
    message =

    server = smtplib.SMTP('smtp.gmail.com', '587')
    server.ehlo()
    server.starttls()
    server.login(gmail_user, gmail_password)

    try:
        server.sendmail(gmail_user, reciever, message)
        print("Erfolgreich.")
    except:
        print("Fehler.")
        
 
Ich bin dankbar über jede Anregung, jeden Tipp, jede Hilfe :)
Hoffe habe meine Frage ausreichend formuliert - ist schon Freitagabend. Sollte etwas fehlen, ergänze ich es gerne noch!

Vielen Dank schonmal.

Schönen Abend noch,
Ben

Re: E-Mail (SMTP) Google

Verfasst: Freitag 6. Dezember 2019, 17:21
von sls
Ich verstehe nicht was du genau willst. Du hast Variablen, die in den Body einfließen sollen, machst das aber nicht, weil? Im Script oben machst du ja genau das nicht, sondern das Script ist einfach schrott.

In der Doku steht ganz einfach beschrieben, wie man sich ein Message-Objekt bauen kann: https://docs.python.org/3/library/email.examples.html

Re: E-Mail (SMTP) Google

Verfasst: Freitag 6. Dezember 2019, 17:30
von __blackjack__
@bmeyer: Um einen Betreff (und auch einen Absender, und netterweise vielleicht auch einen Empfänger) in der Mail unterzubringen muss `message` einer Nachricht in dem Format sein das in RFC 2822 bzw. RFC 822 beschrieben ist. Python hat dafür `email.message.Message` in der Standardbibliothek.

`format()` liefert eine Zeichenkette – es macht keinen Sinn die noch mal `str()` zu übergeben.

Wenn Du einen Text aus mehreren Teilen zusammensetzen willst, dann musst Du eben genau das tun. Zum Beispiel mit Zeichenkettenformatierung mit der `format()`-*Methode* auf Zeichenketten (*nicht* der `format()`-*Funktion*) oder ab Python 3.6 mit f-Zeichenkettenliteralen. Man könnte auch eine Vorlage erstellen und mit `string.Template` arbeiten. Oder mit einer externen Bibliothek für Templates wie Jinja2.

Die Fehler”behandlung” in dem Code muss ganz dringend weg. Wenn man Ausnahmen nicht *sinnvoll* behandeln kann, dann lässt man es einfach bleiben. Man unterdrückt auf keinen Fall sinnvolle Ausgaben die einem bei der Fehlersuche helfen können.