Django - E-posta Gönderme

Django, e-posta göndermek için hazır ve kullanımı kolay bir hafif motorla birlikte gelir. Python'a benzer şekilde, sadece smtplib'in içe aktarılmasına ihtiyacınız vardır. Django'da sadece django.core.mail'i içe aktarmanız gerekir. E-posta göndermeye başlamak için proje settings.py dosyanızı düzenleyin ve aşağıdaki seçenekleri ayarlayın -

  • EMAIL_HOST - smtp sunucusu.

  • EMAIL_HOST_USER - smtp sunucusu için oturum açma kimlik bilgileri.

  • EMAIL_HOST_PASSWORD - smtp sunucusu için şifre kimlik bilgisi.

  • EMAIL_PORT - smtp sunucu bağlantı noktası.

  • EMAIL_USE_TLS or _SSL - Bağlantı güvenli ise doğrudur.

Basit Bir E-posta Gönderme

Basit bir e-posta göndermek için bir "basitE-posta gönder" görünümü oluşturalım.

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)

Send_mail parametrelerinin ayrıntıları burada -

  • subject - E-posta konusu.

  • message - E-posta gövdesi.

  • from_email - adresinden e-posta.

  • recipient_list - Alıcının e-posta adresinin listesi.

  • fail_silently - Bool, eğer false send_mail hata durumunda bir istisna yaratacaktır.

  • auth_user - settings.py'de ayarlanmadıysa kullanıcı girişi.

  • auth_password - settings.py içinde ayarlanmadıysa kullanıcı şifresi.

  • connection - E-posta arka ucu.

  • html_message - (Django 1.7'de yeni) varsa, e-posta çok parçalı / alternatif olacaktır.

Görünümümüze erişmek için bir URL oluşturalım -

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

Dolayısıyla /myapp/simpleemail/[email protected]'a erişirken aşağıdaki sayfayı alacaksınız -

Send_mass_mail ile Birden Fazla Posta Gönderme

Yöntem, başarıyla teslim edilen mesajların sayısını döndürür. Bu send_mail ile aynıdır ancak fazladan bir parametre alır; datatuple, sendMassEmail görünümümüz daha sonra -

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)

Görünümümüze erişmek için bir URL oluşturalım -

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

/Myapp/massemail/[email protected]/[email protected]/ adresine erişirken, şunu alırız -

send_mass_mail parametrelerinin ayrıntıları -

  • datatuples - Her öğenin benzer olduğu bir grup (konu, mesaj, e-postadan, alıcı_listesi).

  • fail_silently - Bool, eğer false send_mail hata durumunda bir istisna yaratacaktır.

  • auth_user - settings.py'de ayarlanmadıysa kullanıcı girişi.

  • auth_password - settings.py içinde ayarlanmadıysa kullanıcı şifresi.

  • connection - E-posta arka ucu.

Yukarıdaki resimde görebileceğiniz gibi, iki mesaj başarıyla gönderildi.

Note - Bu örnekte, kullanarak başlatabileceğiniz Python smtp hata ayıklama sunucusunu kullanıyoruz -

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

Bu, gönderilen tüm e-postalarınızın stdout'ta yazdırılacağı ve kukla sunucunun localhost: 1025 üzerinde çalıştığı anlamına gelir.

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

Bu yöntemler, settings.py dosyasının YÖNETİCİLER seçeneğinde tanımlandığı gibi site yöneticilerine ve settings.py dosyasının YÖNETİCİLER seçeneğinde tanımlandığı şekilde site yöneticilerine e-postalar gönderir. ADMINS and MANAGERS seçeneklerimizin şöyle göründüğünü varsayalım -

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)

Yukarıdaki kod, YÖNETİCİLER bölümünde tanımlanan her yöneticiye bir e-posta gönderecektir.

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)

Yukarıdaki kod, YÖNETİCİLER bölümünde tanımlanan her yöneticiye bir e-posta gönderecektir.

Parametre ayrıntıları -

  • Subject - E-posta konusu.

  • message - E-posta gövdesi.

  • fail_silently - Bool, eğer false send_mail hata durumunda bir istisna yaratacaktır.

  • connection - E-posta arka ucu.

  • html_message - (Django 1.7'de yeni) varsa, e-posta çok parçalı / alternatif olacaktır.

HTML E-posta Gönderme

Django> = 1.7'de HTML mesajı göndermek kadar kolay -

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

Bu, çok parçalı / alternatif bir e-posta üretecektir.

Ancak Django <1.7 için HTML mesajlarının gönderilmesi django.core.mail.EmailMessage sınıfı aracılığıyla yapılır ve ardından nesne üzerinde 'gönder' çağrısı yapılır -

HTML e-posta göndermek için bir "sendHTMLEmail" görünümü oluşturalım.

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)

EmailMessage sınıfı oluşturma için parametre ayrıntıları -

  • Subject - E-posta konusu.

  • message - HTML'de e-posta gövdesi.

  • from_email - adresinden e-posta.

  • to - Alıcının e-posta adresinin listesi.

  • bcc - "Gizli" alıcıların e-posta adreslerinin listesi.

  • connection - E-posta arka ucu.

Görünümümüze erişmek için bir URL oluşturalım -

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

/Myapp/htmlemail/[email protected]'a erişirken şunu alırız -

Ekli E-posta Gönderme

Bu, EmailMessage nesnesindeki 'attach' yöntemi kullanılarak yapılır.

Ekli bir e-posta göndermek için bir görünüm -

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)

Ek bağımsız değişkenleriyle ilgili ayrıntılar -

  • filename - Eklenecek dosyanın adı.

  • content - Eklenecek dosyanın içeriği.

  • mimetype - Ekin içerik mime türü.