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.