Weil es hier viele Antworten für Python 3 gibt, aber keine, die zeigen, wie die überarbeitete email
-Bibliothek ab Python 3.6 verwendet wird, hier eine schnelle Kopie aus der aktuellen email
Beispiele-Dokumentation. (Ich habe es etwas abgekürzt, um Schnörkel wie das Raten des korrekten MIME-Typs zu entfernen.)
Moderner Code, der auf Python >3.5 abzielt, sollte nicht mehr die email.message.Message
API verwenden (einschließlich der verschiedenen Klassen MIMEText
, MIMEMultipart
, MIMEBase
usw.) oder das noch ältere mimetypes
-Gedöns.
from email.message import EmailMessage
import smtplib
from pathlib import Path
msg = EmailMessage()
msg["Subject"] = "Unser Familientreffen"
msg["From"] = "ich "
msg["To"] = "empfänger "
# auf keinen Fall das .preamble verändern
msg.set_content("Hallo, Opfer! Schau dir diese Bilder an")
picpath = Path("Pfad/zum/Anhang.png")
with picpath.open("rb") as fp:
msg.add_attachment(
fp.read(),
maintype="image", subtype="png",
filename=picpath.name)
# Beachten Sie, wie smtplib jetzt eine send_message() Methode enthält
with smtplib.SMTP("localhost") as s:
s.send_message(msg)
Die moderne email.message.EmailMessage
API ist jetzt deutlich vielseitiger und logischer als die ältere Version der Bibliothek. Es gibt immer noch einige Probleme bei der Darstellung in der Dokumentation (zum Beispiel ist es nicht offensichtlich, wie man den Content-Disposition:
eines Anhangs ändert; und die Diskussion des policy
-Moduls ist wahrscheinlich zu obskur für die meisten Neulinge) und im Grunde genommen müssen Sie immer noch eine Idee davon haben, wie die MIME-Struktur aussehen soll (obwohl die Bibliothek sich jetzt endlich um vieles kümmert, was zuvor sehr mühsam war). Vielleicht schauen Sie sich Was sind die "Parts" in einer multipart Email? für eine kurze Einführung an.
Die Verwendung von localhost
als Ihrem SMTP-Server funktioniert offensichtlich nur, wenn tatsächlich ein SMTP-Server auf Ihrem lokalen Computer läuft. Das ordnungsgemäße Versenden von E-Mails von Ihrem System ist eine ziemlich komplexe separate Frage. Für einfache Anforderungen verwenden Sie wahrscheinlich Ihr vorhandenes E-Mail-Konto und den E-Mail-Server Ihres Anbieters (suchen Sie nach Beispielen für die Verwendung von Port 587 mit Google, Yahoo oder was auch immer Sie haben – was genau funktioniert, hängt in gewisser Weise vom Anbieter ab; einige werden nur Port 465 oder den veralteten Port 25 unterstützen, der jedoch jetzt im Wesentlichen auf öffentlich zugänglichen Servern aufgrund der Spam-Filterung unmöglich ist).
6 Stimmen
Hier ist eine einfache Implementierung, die mehrere Dateien anhängen kann und sogar in Bezug auf Bilder eingebettet werden kann. datamakessense.com/…
0 Stimmen
Ich fand das nützlich drupal.org/project/mimemail/issues/911612 stellt sich heraus, dass Bilddateianhänge an einen damit verbundenen Typ-Kindteil angehängt werden müssen. Wenn Sie das Bild an den Wurzel-MIME-Teil anhängen, können die Bilder in der Liste der angehängten Elemente angezeigt und in Clienten wie Outlook365 vorab angezeigt werden.