Seite 1 von 1

Einfache Plain-Text Email mit unterschiedlichem Anhang versenden

Verfasst: Mittwoch 16. Dezember 2020, 15:36
von MikeAlt
Hallo Forum,
ich versuche mich gerade mit Python und bin dabei mir etwas zusammen zu schreiben um eine Plain-Text Email mit unterschiedlichem Angang zu senden.
Zwar könnte ich andere Wege gehen, würde das aber gerne mit Python umsetzen.
Im Internet bin ich auf viele verschiedene Bespiele gestoßen bei denen der Versand via HTML und MINE Attachements gezeigt wird.
Soweit ich das verstanden habe werden dabei die Anhänge decodiert und müssen individuell als mimetype angegeben werden.
Ich möchte aber plain-text Mails mit Anhängen, egal welchem Typen verschicken und nicht für jeden Fall den mimetype definieren müssen. Bzw nicht den Anhang decodieren, sondern nur von mir aus als binäre Datei mitsenden so dass sie 1:1 übermittelt wird.
Den Versand der Text-Mail habe ich bereits erfolgreich über folgenden Code erreicht:

Code: Alles auswählen

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
senderEmail = "absender.email"
empfangsEmail = "empfaenger.email"
msg = MIMEMultipart()
msg['From'] = senderEmail
msg['To'] = empfangsEmail
msg['Subject'] = "Subject-Text"
emailText = "Dies ist eine Test E-Mail!"
msg.attach(MIMEText(emailText, 'html'))
server = smtplib.SMTP(localhost, 587) # Die Server Daten
server.starttls()
server.login(senderEmail, "Dein Passwort") # Das Passwort
text = msg.as_string()
server.sendmail(senderEmail, empfangsEmail, text)
server.quit()
Muss ich immer diese Mimetype Variante nutzen ? Und wie bekomme ich meine Anhänge mit verschickt ohne den MimeType dafür definieren zu müssen ?
Ich verwende Python 3.6 und möchte gerne die internen Python Werkzeuge benutzen und nichts zusätzliches installieren.

Ich wäre über Hilfe dankbar.
Danke und LG
Mike

Re: Einfache Plain-Text Email mit unterschiedlichem Anhang versenden

Verfasst: Mittwoch 16. Dezember 2020, 16:19
von __blackjack__
@MikeAlt: Wenn Du das da erfolgreich eingesetzt hast, dann verwendest Du Python 2.x und nicht 3.6. Python 2 sollte man aber nicht mehr in neuem Code verwenden. Das ist jetzt fast ein Jahr ohne irgendwelchen Support der Python-Entwickler.

Den MIME-Typ muss man angeben, denn ein fehlender MIME-Typ wird als "text/plain; charset=us-ascii" angesehen, was definitiv falsch für beliebige Daten/Dateien ist. Du kannst natürlich auch für jeden Anhang "application/octet-stream" als Mimetyp setzen, wenn Du keinen spezifischeren kennst oder ermitteln kannst oder willst.

Der MIME-Typ für den Textteil ist übrigens falsch in Deinem Beispiel, denn "html" ist nicht "plain" und der Text im Beispiel ist kein HTML.

Wenn es keinen Grund gibt auf die etwas tiefere Ebene der MIME-Objekte zu gehen, würde ich `email.message.EmailMessage` als Ausgangspunkt nehmen.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Und Du solltest keine kryptischen Abkürzungen verwenden. Wenn man `message` meint, sollte man nicht `msg` schreiben.