Senden Sie eine E-Mail mit Anhängen in Python

Zeeshan Afridi 21 Juni 2023
  1. Senden Sie eine E-Mail mit Anhängen in Python
  2. Schritte zum Senden einer E-Mail mit Anhängen in Python
Senden Sie eine E-Mail mit Anhängen in Python

Der heutige Artikel lehrt uns, wie Python verwendet wird, um E-Mails mit Anhängen zu versenden. Dafür benötigen wir keine externe Bibliothek zum Versenden von E-Mails. Stattdessen importieren wir ein Modul namens smtplib und verwenden es, weil die Mail über das SMTP-Protokoll gesendet wird. Mal sehen, wie wir es tun können.

Senden Sie eine E-Mail mit Anhängen in Python

Python behandelt den gesamten Nachrichteninhalt als normalen Text, wenn es eine Textnachricht sendet. Selbst wenn wir einer Textnachricht HTML-Tags hinzufügen, werden sie nicht gemäß der HTML-Syntax strukturiert, und die Nachricht wird weiterhin als Primärtext angezeigt.

Python kann jedoch eine HTML-Nachricht in seinem nativen Format senden. Daher können wir beim Senden einer E-Mail eine MIME-Version, einen Inhaltstyp und einen Zeichensatz auswählen, um eine HTML-E-Mail zu senden.

Python enthält ein Paket namens smtplib. Die Mail wird via SMTP (Simple Mail Transfer Protocol) versendet. Für den Versand erzeugt es SMTP-Client-Session-Objekte.

Korrekte (gültige) Quell- und Ziel-E-Mail-Adressen, Serveradressen und Portnummern sind für SMTP erforderlich. Beispielsweise lautet die Portnummer für Google 587. Denken Sie daran, dass sich die Serveradresse und die Portnummer je nach verwendetem Dienst ändern. Für diesen Artikel verwenden wir Google.

Zuerst müssen wir das Mailversandmodul smtplib importieren. Zur Erhöhung der Anpassungsfähigkeit setzen wir zudem das Modul MIME (Multipurpose Internet Mail Extension) ein.

Unter dem Header MIME können wir Absender, Empfänger und weitere Informationen speichern. Der MIME wird auch benötigt, um die Datei an die E-Mail anzuhängen. Zum Versenden von Nachrichten verwenden wir den Gmail-Dienst von Google.

Um den Sicherheitsanforderungen von Google zu entsprechen, müssen wir bestimmte Anpassungen vornehmen. Beispielsweise funktioniert der folgende Code möglicherweise nicht, wenn solche Einstellungen fehlen oder Google den Zugriff von Drittanbieter-Apps nicht unterstützt.

Wir müssen weniger sichere App-Zugriffseinstellungen im Google-Konto angeben, um Zugriff zu gewähren. Außerdem können wir keinen weniger sicheren Zugang verwenden, wenn die zweistufige Verifizierung aktiviert ist.

Schritte zum Senden einer E-Mail mit Anhängen in Python

Zuerst müssen wir MIME erstellen, dann Absender, Empfänger, E-Mail-Titel und angehängten Text in das erstellte MIME einfügen. Öffnen Sie danach die an die E-Mail angehängte Datei im Binärmodus.

Fügen Sie für die Anhänge einen Header hinzu, öffnen Sie eine SMTP-Sitzung mit einer funktionierenden Portnummer 587 und beenden Sie die Sitzung.

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

mail_content = """Hello,
This mail is to inform you about Today's meeting.
"""

sender_address = "sender@gmail.com"
sender_pass = "-------"
receiver_address = "receiver@gmail.com"

message = MIMEMultipart()
message["From"] = sender_address
message["To"] = receiver_address
message["Subject"] = "Info about meeting."
message.attach(MIMEText(mail_content, "plain"))

session = smtplib.SMTP("smtp.gmail.com", 587)
session.starttls()
session.login(sender_address, sender_pass)
text = message.as_string()
session.sendmail(sender_address, receiver_address, text)
session.quit()

print("Mail Sent")

Ausgang:

Mail Sent

Hier ist ein weiteres Beispiel für das Senden einer E-Mail mit Anhängen in Python.

Beispielcode:

import smtplib

from pathlib import Path
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
import email.utils
from email import encoders
from smtpd import COMMASPACE


def send_mail(
    send_from,
    send_to,
    subject,
    message,
    files=[],
    server="localhost",
    port=587,
    username="",
    password="",
    use_tls=True,
):

    msg = MIMEMultipart()
    msg["From"] = send_from
    import email.utils

    msg["To"] = COMMASPACE.join(send_to)
    msg["Date"] = email.utils.formatdate(localtime=True)
    msg["Subject"] = subject

    msg.attach(MIMEText(message))

    for path in files:
        part = MIMEBase("application", "octet-stream")
        with open(path, "rb") as file:
            part.set_payload(file.read())
        encoders.encode_base64(part)
        part.add_header(
            "Content-Disposition", "attachment; filename={}".format(Path(path).name)
        )
        msg.attach(part)

    smtp = smtplib.SMTP(server, port)
    if use_tls:
        smtp.starttls()
    smtp.login(username, password)
    smtp.sendmail(send_from, send_to, msg.as_string())
    smtp.quit()

Ausgang:

/Users/apple/PycharmProjects/email/venv/bin/python /Users/apple/PycharmProjects/email/main.py 

Process finished with exit code 0

Denken Sie daran, dass der erste Schritt zum Senden von E-Mails in Python darin besteht, Ihr Google-Konto weniger sicher zu machen. andernfalls wird ein Verbindung abgelehnt-Fehler generiert. Stellen Sie sicher, dass die zweistufige Authentifizierung (2FA) entfernt wird, damit sie funktioniert.

Zweitens müssen wir das Mailing-Sendemodul importieren, und für SMTP sind gültige Quell- und Ziel-E-Mail-Adressen und Portnummern erforderlich. Beispielsweise lautet die Portnummer für Google 587.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

Verwandter Artikel - Python Email