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.