E-Mail

Wie kann man in Python eine E-Mail mit Anhang per SMTP versenden?

Dieses Bespiel zeigt, wie man in Python eine E-Mail mit Anhang versenden kann. Der Anhang wird direkt aus einer Datei gelesen.

#!/usr/bin/env python3
import smtplib
import mimetypes
from email.message import EmailMessage

# E-Mail-Objekt initialisieren und Nachrichtentext setzen:
msg = EmailMessage()
msg['Subject'] = 'Diese E-mail enthält einen Anhang'
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'
# Set text content
msg.set_content('Please see attached file')

def attach_file_to_email(email, filename):
    """Attach a file identified by filename, to an email message"""
    with open(filename, 'rb') as fp:
        file_data = fp.read()
        maintype, _, subtype = (mimetypes.guess_type(filename)[0] or 'application/octet-stream').partition("/")
        email.add_attachment(file_data, maintype=maintype, subtype=subtype, filename=filename)

# Anhang anhängen
attach_file_to_email(msg, "myfile.pdf")

def send_mail_smtp(mail, host, username, password):
    s = smtplib.SMTP(host)
    s.starttls()
    s.login(username, password)
    s.send_message(msg)
    s.quit()

# E-Mail per SMTP senden
send_mail_smtp(msg, 'smtp.domain.com', '[email protected]', 'sae7ooka0S')

Das oben gezeigte Skript benutzt die Folgenden Funktionen:

import smtplib
import mimetypes

def attach_file_to_email(email, filename):
    """Attach a file identified by filename, to an email message"""
    with open(filename, 'rb') as fp:
        file_data = fp.read()
        maintype, _, subtype = (mimetypes.guess_type(filename)[0] or 'application/octet-stream').partition("/")
        email.add_attachment(file_data, maintype=maintype, subtype=subtype, filename=filename)

def send_mail_smtp(mail, host, username, password):
    s = smtplib.SMTP(host)
    s.starttls()
    s.login(username, password)
    s.send_message(msg)
    s.quit()

Initalisiere das E-Mail-Object wie Folgt:

# E-Mail-Objekt initialisieren und Nachrichtentext setzen:
msg = EmailMessage()
msg['Subject'] = 'This email contains an attachment'
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'
# Set text content
msg.set_content('Please see attached file')

und hänge dann die Datei so an:

attach_file_to_email(msg, "myfile.pdf")

Danach kannst du die E-Mail so per SMTP versenden:

send_mail_smtp(msg, 'smtp.my-domain.com', '[email protected]', 'sae7ooka0S')
Posted by Uli Köhler in E-Mail, Python

Was bedeutet Delivery Status Notification ‚550 5.1.1 User unknown (in reply to RCPT TO command)‘?

Problem:

Du versuchst, eine E-Mail zu senden, aber kurz nach dem Absenden der E-Mail erhältst du eine Delivery Status notification-Mail wie diese:

This is the mail system at host techoverflow.net.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

                   The mail system

<[email protected]>: host mail.recpient.com[213.216.0.1] said: 550 5.1.1 User
    unknown (in reply to RCPT TO command)

Lösung:

Wenn die Delivery status notification-E-Mail eine Zeile wie diese enthält:

<[email protected]>: host mail.firma.com[213.216.0.1] said: 550 5.1.1 User unknown (in reply to RCPT TO command)

bedeutet das, dass die Empfänger-E-Mail-Adresse (am Anfang der Zeile – in diesem Beispiel [email protected]) nicht existiert.

In den meisten Fällen gibt es entweder

  • einen Schreibfehler in der Mailadresse, z.B. [email protected] oder
  • die Person in der Firma existiert nicht mehr oder
  • die Domain ist falsch – z.B. firma.com statt firma.de oder enthält einen Tippfehler wie z.B. frima.de

Falls du die E-Mail an mehrere Empfänger geschickt hast (z.B. mit CC), dann ist sie bei den anderen Empfängern angekommen, außer:

  • die Delivery status notification-E-Mail enthält weitere Zeilen mit 550 5.1.1 User unknown , die weitere Empfänger auflisten, bei denen die Mails nicht angekommen sind, oder
  • es kommen weitere Delivery Status Notification-Mails an, die weitere Empfänger enthalten, bei denen die Mail nicht angekommen ist.

Manchmal dauert es einige Minuten, bis weitere Delivery status notification-Mails ankommen. Ab und zu landen diese E-Mail auch im Spam-Ordner.

Hinweis: Enthält die entsprechende Zeile in der Delivery Status Notification nicht 550 5.1.1 User unknown, dann liegt ein anderer Fehler vor.

Tip: Falls die Mailadresse des Empfängers nicht mehr existiert und du keine andere geeignete Mailadresse kennst, versuche eine der Folgenden Mailadressen:

oder sieh auf der Firmenhomepage im Impressum nach.

Posted by Uli Köhler in E-Mail