Django - wysyłanie e-maili

Django zawiera gotowy i łatwy w użyciu lekki silnik do wysyłania e-maili. Podobnie jak w Pythonie, wystarczy import smtplib. W Django wystarczy zaimportować django.core.mail. Aby rozpocząć wysyłanie wiadomości e-mail, edytuj plik settings.py projektu i ustaw następujące opcje -

  • EMAIL_HOST - serwer smtp.

  • EMAIL_HOST_USER - Dane logowania do serwera SMTP.

  • EMAIL_HOST_PASSWORD - Poświadczenie hasła do serwera SMTP.

  • EMAIL_PORT - port serwera smtp.

  • EMAIL_USE_TLS or _SSL - Prawda, jeśli bezpieczne połączenie.

Wysyłanie prostej wiadomości e-mail

Utwórzmy widok „sendSimpleEmail”, aby wysłać prostą wiadomość e-mail.

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)

Oto szczegóły parametrów send_mail -

  • subject - Temat wiadomości e-mail.

  • message - Treść wiadomości e-mail.

  • from_email - E-mail od.

  • recipient_list - Lista adresów e-mail odbiorców.

  • fail_silently - Bool, jeśli false send_mail zgłosi wyjątek w przypadku błędu.

  • auth_user - Logowanie użytkownika, jeśli nie zostało ustawione w settings.py.

  • auth_password - Hasło użytkownika, jeśli nie zostało ustawione w settings.py.

  • connection - Obsługa poczty e-mail.

  • html_message - (nowość w Django 1.7) jeśli jest obecny, e-mail będzie wieloczęściowy / alternatywny.

Utwórzmy adres URL, aby uzyskać dostęp do naszego widoku -

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'),)

Więc po wejściu na /myapp/simpleemail/[email protected] otrzymasz następującą stronę -

Wysyłanie wielu e-maili z send_mass_mail

Metoda zwraca liczbę pomyślnie dostarczonych wiadomości. Działa tak samo jak send_mail, ale wymaga dodatkowego parametru; datatuple, nasz widok sendMassEmail będzie wyglądał następująco:

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)

Utwórzmy adres URL, aby uzyskać dostęp do naszego widoku -

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'),)

Uzyskując dostęp do /myapp/massemail/[email protected]/[email protected]/, otrzymujemy -

szczegóły parametrów send_mass_mail to -

  • datatuples - Krotka, w której każdy element jest podobny (temat, wiadomość, adres_email, lista_ odbiorców).

  • fail_silently - Bool, jeśli false send_mail zgłosi wyjątek w przypadku błędu.

  • auth_user - Logowanie użytkownika, jeśli nie zostało ustawione w settings.py.

  • auth_password - Hasło użytkownika, jeśli nie zostało ustawione w settings.py.

  • connection - Obsługa poczty e-mail.

Jak widać na powyższym obrazku, dwie wiadomości zostały wysłane pomyślnie.

Note - W tym przykładzie używamy serwera debugującego Python smtp, który można uruchomić za pomocą -

$python -m smtpd -n -c DebuggingServer localhost:1025

Oznacza to, że wszystkie wysłane przez ciebie e-maile będą drukowane na stdout, a fałszywy serwer działa na localhost: 1025.

Sending e-mails to admins and managers using mail_admins and mail_managers methods

Te metody wysyłają wiadomości e-mail do administratorów witryny, zgodnie z opcją ADMINS w pliku settings.py, oraz do menedżerów witryny, zgodnie z opcją MANAGERS w pliku settings.py. Załóżmy, że nasze opcje ADMINISTRATORZY i MENEDŻERÓW wyglądają następująco -

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)

Powyższy kod wyśle ​​e-mail do każdego administratora zdefiniowanego w sekcji ADMINISTRACJA.

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)

Powyższy kod wyśle ​​e-mail do każdego menedżera zdefiniowanego w sekcji MANAGEROWIE.

Szczegóły parametrów -

  • Subject - Temat wiadomości e-mail.

  • message - Treść wiadomości e-mail.

  • fail_silently - Bool, jeśli false send_mail zgłosi wyjątek w przypadku błędu.

  • connection - Obsługa poczty e-mail.

  • html_message - (nowość w Django 1.7) jeśli jest obecny, e-mail będzie wieloczęściowy / alternatywny.

Wysyłanie wiadomości e-mail w formacie HTML

Wysyłanie wiadomości HTML w Django> = 1.7 jest tak proste, jak -

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=")

Spowoduje to utworzenie wieloczęściowej / alternatywnej wiadomości e-mail.

Ale dla Django <1.7 wysyłanie wiadomości HTML odbywa się za pośrednictwem klasy django.core.mail.EmailMessage, a następnie wywołuje polecenie „send” na obiekcie -

Utwórzmy widok „sendHTMLEmail”, aby wysłać wiadomość e-mail w formacie HTML.

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)

Szczegóły parametrów dla tworzenia klasy EmailMessage -

  • Subject - Temat wiadomości e-mail.

  • message - Treść wiadomości e-mail w formacie HTML.

  • from_email - E-mail od.

  • to - Lista adresów e-mail odbiorców.

  • bcc - Lista adresów e-mail odbiorców „UDW”.

  • connection - Obsługa poczty e-mail.

Utwórzmy adres URL, aby uzyskać dostęp do naszego widoku -

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'),)

Uzyskując dostęp do /myapp/htmlemail/[email protected], otrzymujemy -

Wysyłanie wiadomości e-mail z załącznikiem

Odbywa się to za pomocą metody „attach” w obiekcie EmailMessage.

Widok do wysłania wiadomości e-mail z załącznikiem to -

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)

Szczegóły dotyczące załączania argumentów -

  • filename - nazwa pliku do załączenia.

  • content - zawartość pliku do załączenia.

  • mimetype - Typ MIME zawartości załącznika.