Senden Sie eine E-Mail mit Anhängen in Python
- Senden Sie eine E-Mail mit Anhängen in Python
- Schritte zum Senden einer 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 is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn