MIMEMultipart in Python

Abid Ullah 21 Juni 2023
  1. Pythons Module MIMEMultipart, MIMEText und MIMEBase
  2. Beispielskript zum Senden von E-Mails mit Anhängen in Python
MIMEMultipart 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.

  1. 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.

  2. 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.

  3. 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.

  1. Zuerst beginnen wir das Skript, indem wir eine Instanz für MIMEMultipart erstellen und sie msg nennen.

  2. Dann beschreiben wir die E-Mail-Adressen des Absenders und des Empfängers. Wir beschreiben auch den Betreff in den Schlüsseln From, To und Subject der von uns erstellten Instanz.

  3. Jetzt müssen wir den Text der Nachricht, die wir senden möchten, in einer Variablen namens body konstruieren und diese Variable an die msg-Instanz anhängen, die wir zuvor mit der attach()-Methode erstellt haben.

  4. 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 und subtype. Diese definieren die Basisklasse für alle unsere MIME-fähigen Unterklassen der Nachricht.

    Denken Sie daran, dass der Haupttyp hier der Inhaltstyp major ist, der hauptsächlich aus Texten oder Bildern besteht, und der Subtyp der Inhaltstyp minor ist, der typischerweise aus Plains, Gifs, Audio und/oder anderen Medien besteht.

  5. 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 Instanz msg 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.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

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