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:1025Oznacza 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.