Django - E-Mails senden
Django wird mit einer gebrauchsfertigen und benutzerfreundlichen Light Engine zum Versenden von E-Mails geliefert. Ähnlich wie bei Python benötigen Sie nur den Import von smtplib. In Django müssen Sie nur django.core.mail importieren. Um mit dem Senden von E-Mails zu beginnen, bearbeiten Sie die Datei project settings.py und legen Sie die folgenden Optionen fest:
EMAIL_HOST - SMTP-Server.
EMAIL_HOST_USER - Anmeldeinformationen für den SMTP-Server.
EMAIL_HOST_PASSWORD - Passwort für den SMTP-Server.
EMAIL_PORT - SMTP-Server-Port.
EMAIL_USE_TLS or _SSL - True wenn sichere Verbindung.
Senden einer einfachen E-Mail
Erstellen wir eine "sendSimpleEmail" -Ansicht, um eine einfache E-Mail zu senden.
from django.core.mail import send_mail
from django.http import HttpResponse
def sendSimpleEmail(request,emailto):
res = send_mail("hello paul", "comment tu vas?", "[email protected]", [emailto])
return HttpResponse('%s'%res)
Hier sind die Details der Parameter von send_mail -
subject - Betreff der E-Mail.
message - E-Mail-Text.
from_email - E-Mail von.
recipient_list - Liste der E-Mail-Adresse des Empfängers.
fail_silently - Bool, wenn false send_mail im Fehlerfall eine Ausnahme auslöst.
auth_user - Benutzeranmeldung, falls nicht in settings.py festgelegt.
auth_password - Benutzerpasswort, falls nicht in settings.py festgelegt.
connection - E-Mail-Backend.
html_message - (neu in Django 1.7) Falls vorhanden, wird die E-Mail mehrteilig / alternativ sein.
Erstellen wir eine URL, um auf unsere Ansicht zuzugreifen.
from django.conf.urls import patterns, url
urlpatterns = paterns('myapp.views', url(r'^simpleemail/(?P<emailto>
[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/',
'sendSimpleEmail' , name = 'sendSimpleEmail'),)
Wenn Sie also auf /myapp/simpleemail/[email protected] zugreifen, erhalten Sie die folgende Seite:
Senden mehrerer Mails mit send_mass_mail
Die Methode gibt die Anzahl der erfolgreich zugestellten Nachrichten zurück. Dies ist dasselbe wie send_mail, erfordert jedoch einen zusätzlichen Parameter. datatuple lautet unsere sendMassEmail-Ansicht dann -
from django.core.mail import send_mass_mail
from django.http import HttpResponse
def sendMassEmail(request,emailto):
msg1 = ('subject 1', 'message 1', '[email protected]', [emailto1])
msg2 = ('subject 2', 'message 2', '[email protected]', [emailto2])
res = send_mass_mail((msg1, msg2), fail_silently = False)
return HttpResponse('%s'%res)
Erstellen wir eine URL, um auf unsere Ansicht zuzugreifen.
from django.conf.urls import patterns, url
urlpatterns = paterns('myapp.views', url(r'^massEmail/(?P<emailto1>
[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/(?P<emailto2>
[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})', 'sendMassEmail' , name = 'sendMassEmail'),)
Beim Zugriff auf /myapp/massemail/[email protected]/[email protected]/ erhalten wir -
Details zu den send_mass_mail-Parametern sind -
datatuples - Ein Tupel, in dem jedes Element ähnlich ist (Betreff, Nachricht, from_email, Empfängerliste).
fail_silently - Bool, wenn false send_mail im Fehlerfall eine Ausnahme auslöst.
auth_user - Benutzeranmeldung, falls nicht in settings.py festgelegt.
auth_password - Benutzerpasswort, falls nicht in settings.py festgelegt.
connection - E-Mail-Backend.
Wie Sie im obigen Bild sehen können, wurden zwei Nachrichten erfolgreich gesendet.
Note - In diesem Beispiel verwenden wir den Python-SMTP-Debuggingserver, den Sie mit - starten können.
$python -m smtpd -n -c DebuggingServer localhost:1025
Dies bedeutet, dass alle Ihre gesendeten E-Mails auf stdout gedruckt werden und der Dummy-Server auf localhost: 1025 ausgeführt wird.
Sending e-mails to admins and managers using mail_admins and mail_managers methods
Diese Methoden senden E-Mails an Site-Administratoren, wie in der Option ADMINS der Datei settings.py definiert, und an Site-Manager, wie in der Option MANAGERS der Datei settings.py definiert. Nehmen wir an, unsere ADMINS- und MANAGERS-Optionen sehen folgendermaßen aus:
ADMINS = (('polo', '[email protected]'),)
MANAGERS = (('popoli', '[email protected]'),)
from django.core.mail import mail_admins
from django.http import HttpResponse
def sendAdminsEmail(request):
res = mail_admins('my subject', 'site is going down.')
return HttpResponse('%s'%res)
Der obige Code sendet eine E-Mail an jeden im Abschnitt ADMINS definierten Administrator.
from django.core.mail import mail_managers
from django.http import HttpResponse
def sendManagersEmail(request):
res = mail_managers('my subject 2', 'Change date on the site.')
return HttpResponse('%s'%res)
Der obige Code sendet eine E-Mail an jeden Manager, der im Abschnitt MANAGER definiert ist.
Parameter Details -
Subject - Betreff der E-Mail.
message - E-Mail-Text.
fail_silently - Bool, wenn false send_mail im Fehlerfall eine Ausnahme auslöst.
connection - E-Mail-Backend.
html_message - (neu in Django 1.7) Falls vorhanden, wird die E-Mail mehrteilig / alternativ sein.
Senden von HTML-E-Mails
Das Senden einer HTML-Nachricht in Django> = 1.7 ist so einfach wie -
from django.core.mail import send_mail
from django.http import HttpResponse
res = send_mail("hello paul", "comment tu vas?", "[email protected]",
["[email protected]"], html_message=")
Dadurch wird eine mehrteilige / alternative E-Mail erstellt.
Für Django <1.7 erfolgt das Senden von HTML-Nachrichten jedoch über die Klasse django.core.mail.EmailMessage. Anschließend wird für das Objekt 'send' aufgerufen.
Erstellen wir eine "sendHTMLEmail" -Ansicht, um eine HTML-E-Mail zu senden.
from django.core.mail import EmailMessage
from django.http import HttpResponse
def sendHTMLEmail(request , emailto):
html_content = "<strong>Comment tu vas?</strong>"
email = EmailMessage("my subject", html_content, "[email protected]", [emailto])
email.content_subtype = "html"
res = email.send()
return HttpResponse('%s'%res)
Parameterdetails für die Erstellung der EmailMessage-Klasse -
Subject - Betreff der E-Mail.
message - E-Mail-Text in HTML.
from_email - E-Mail von.
to - Liste der E-Mail-Adresse des Empfängers.
bcc - Liste der E-Mail-Adressen der Bcc-Empfänger.
connection - E-Mail-Backend.
Erstellen wir eine URL, um auf unsere Ansicht zuzugreifen.
from django.conf.urls import patterns, url
urlpatterns = paterns('myapp.views', url(r'^htmlemail/(?P<emailto>
[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/',
'sendHTMLEmail' , name = 'sendHTMLEmail'),)
Beim Zugriff auf /myapp/htmlemail/[email protected] erhalten wir -
E-Mail mit Anhang senden
Dies erfolgt mithilfe der Methode 'attach' für das EmailMessage-Objekt.
Eine Ansicht zum Senden einer E-Mail mit Anhang lautet:
from django.core.mail import EmailMessage
from django.http import HttpResponse
def sendEmailWithAttach(request, emailto):
html_content = "Comment tu vas?"
email = EmailMessage("my subject", html_content, "[email protected]", emailto])
email.content_subtype = "html"
fd = open('manage.py', 'r')
email.attach('manage.py', fd.read(), 'text/plain')
res = email.send()
return HttpResponse('%s'%res)
Details zum Anhängen von Argumenten -
filename - Der Name der anzuhängenden Datei.
content - Der Inhalt der anzuhängenden Datei.
mimetype - Der Content-Mime-Typ des Anhangs.