MIMEMultipart in Python
-
Pythons Module
MIMEMultipart
,MIMEText
undMIMEBase
- Beispielskript zum Senden von E-Mails mit Anhängen in Python
Das Versenden von E-Mails als Aufforderung oder Erinnerung oder für irgendetwas anderes ist zu einem wichtigen und regelmäßigen Bestandteil unseres Lebens geworden. Softwareentwickler stoßen während der Entwicklungsphase häufig auf Situationen, in denen sie möchten, dass der Endbenutzer eine E-Mail über ihre Anwendung erhält.
In diesem Artikel erfahren Sie, wie Sie E-Mails mit Anhängen mithilfe von Python und seinem MIME-Modul (Multipurpose Internet Mail Extensions) effizient versenden können.
Pythons Module MIMEMultipart
, MIMEText
und MIMEBase
Ähnlich wie smtplib
in Python bieten die MIME-Module erweiterte Tools, um den Sende-Empfangsprozess von E-Mails einfacher und verbesserter zu gestalten.
Während uns das smtplib
-Modul ermöglicht, E-Mails ohne Anhänge zu versenden, kommen die MIME
-Module zum Einsatz, wenn wir E-Mails mit Anhängen versenden müssen.
Die drei Module von MIME
haben unterschiedliche und einzigartige Zwecke, die es jeweils ermöglichen, unsere Erfahrung beim Senden einer E-Mail über ein Python-Skript zu verbessern.
-
MIMEMultipart
Dieses Modul wird verwendet, wenn wir eine Nachricht mit unterschiedlichen Inhaltstypen erstellen möchten. Das bedeutet, dass
MIMEMultipart
die Verwendung vieler Inhaltstypen unterstützt.Zum Beispiel text/HTML und application/octet-stream. Mit Hilfe von Multipart können wir auch sowohl HTML als auch ein Bild im HTML haben.
-
MIMEText
Dies wird verwendet, um textbasierte E-Mails zu senden. Mit diesem Modul können wir ganz einfach eine vollständige textbasierte E-Mail schreiben und versenden.
-
MIMEBase
Das
MIMEBase
-Modul wird nur als Basisklasse verwendet, damit wir spezifischere Unterklassen und ‘MIME-bewusst’ haben können.
Beispielskript zum Senden von E-Mails mit Anhängen in Python
Während man vielleicht denkt, dass das Schreiben eines Python-Skripts zum Senden von E-Mails mit Anhängen ziemlich kompliziert sein kann im Vergleich zu einem ohne, machen die MIME-Module den gesamten Prozess ziemlich einfach.
Wir müssen diese Schritte befolgen, um eine E-Mail mit einem Anhang zu senden.
Um einen Anhang hinzuzufügen, müssen wir die folgenden Python-Bibliotheken importieren.
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
Diese Bibliotheken machen die anstehende Aufgabe ziemlich einfach. Glücklicherweise sind dies native Bibliotheken und machen die Arbeit gut, sodass wir keine externen Bibliotheken importieren müssen, um einen Anhang hinzuzufügen.
-
Zuerst beginnen wir das Skript, indem wir eine Instanz für
MIMEMultipart
erstellen und siemsg
nennen. -
Dann beschreiben wir die E-Mail-Adressen des Absenders und des Empfängers. Wir beschreiben auch den Betreff in den Schlüsseln
From
,To
undSubject
der von uns erstellten Instanz. -
Jetzt müssen wir den Text der Nachricht, die wir senden möchten, in einer Variablen namens
body
konstruieren und diese Variable an diemsg
-Instanz anhängen, die wir zuvor mit derattach()
-Methode erstellt haben. -
Jetzt kommt der lustige Teil, wo wir die Datei öffnen, die wir anhängen möchten. Wir öffnen diese Datei im
rb
-Modus.Anschließend erstellen wir eine Instanz von
MIMEBase
mit zwei Parametern:maintype
undsubtype
. Diese definieren die Basisklasse für alle unsere MIME-fähigen Unterklassen der Nachricht.Denken Sie daran, dass der
Haupttyp
hier der Inhaltstypmajor
ist, der hauptsächlich aus Texten oder Bildern besteht, und derSubtyp
der Inhaltstypminor
ist, der typischerweise aus Plains, Gifs, Audio und/oder anderen Medien besteht. -
Nun setzen wir mit
set_payload
unsere Payload in eine verschlüsselte Form um. Wir codieren es in Base 64 und hängen diese Datei an die mehrteilige Instanzmsg
an, die wir zuvor erstellt haben.
Hier ist ein Python-Skript, das uns hilft, die Verwendung der MIME-Module zu visualisieren und zu verstehen.
Beispielcode:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
fromaddr = "EMAIL address of the sender"
toaddr = "EMAIL address of the receiver"
# instance of MIMEMultipart
msg = MIMEMultipart()
# storing the sender's email address
msg["From"] = fromaddr
# storing the receiver's email address
msg["To"] = toaddr
# storing the subject
msg["Subject"] = "Subject of the Mail"
# The string to store the body of the mail
body = "Body_of_the_mail"
# attach the body with the msg instance
msg.attach(MIMEText(body, "plain"))
# open the file to be sent
filename = "File_name_with_extension"
attachment = open("Path of the file", "rb")
# The instance of MIMEBase and named as p
p = MIMEBase("application", "octet-stream")
# To change the payload into encoded form
p.set_payload((attachment).read())
# encode into base64
encoders.encode_base64(p)
p.add_header("Content-Disposition", "attachment; filename= %s" % filename)
# attach the instance 'p' to instance 'msg'
msg.attach(p)
# creates SMTP session
s = smtplib.SMTP("smtp.gmail.com", 587)
# start TLS for security
s.starttls()
# Authentication
s.login(fromaddr, "Password_of_the_sender")
# Converts the Multipart msg into a string
text = msg.as_string()
# sending the mail
s.sendmail(fromaddr, toaddr, text)
# terminating the session
s.quit()
Dies ist ein ziemlich einfaches Skript, um eine E-Mail an eine Person zu senden. Wenn wir diese E-Mail an mehrere Personen senden möchten, können wir dafür Schleifen verwenden.
Eine weitere wichtige Sache, die hier zu beachten ist, ist, dass dieses Skript nicht funktioniert, wenn wir die zweistufige Authentifizierung für unsere E-Mail-Konten aktiviert haben. Damit dies funktioniert, müssen wir die zweistufige Überprüfung deaktivieren.
Der Versand einer E-Mail auf diese Weise stellt außerdem sicher, dass die E-Mail direkt im Posteingang des Benutzers landet und niemals im Spam-Ordner.
Obwohl diese Funktion missbraucht werden kann, wissen wir, dass sie für Unternehmen hilfreich sein kann, die Dringlichkeit benötigen und aufgrund einer verpassten E-Mail keinen Raum für Verzögerungen haben.
Wir haben alles gelernt, was man über das Versenden einer einfachen E-Mail mit Anhang mit Python und seinen nativen MIME-Bibliotheken wissen muss.
My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.
LinkedIn