Django - Mengirim Email

Django hadir dengan mesin ringan yang siap dan mudah digunakan untuk mengirim e-mail. Mirip dengan Python, Anda hanya perlu mengimpor smtplib. Dalam Django anda hanya perlu mengimpor django.core.mail. Untuk mulai mengirim email, edit file settings.py proyek Anda dan setel opsi berikut -

  • EMAIL_HOST - server smtp.

  • EMAIL_HOST_USER - Kredensial login untuk server smtp.

  • EMAIL_HOST_PASSWORD - Kredensial kata sandi untuk server smtp.

  • EMAIL_PORT - port server smtp.

  • EMAIL_USE_TLS or _SSL - Benar jika koneksi aman.

Mengirim E-mail Sederhana

Mari buat tampilan "sendSimpleEmail" untuk mengirim email sederhana.

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)

Berikut detail parameter send_mail -

  • subject - Subjek email.

  • message - Badan email.

  • from_email - Email dari.

  • recipient_list - Daftar alamat email penerima.

  • fail_silently - Bool, jika false send_mail akan memunculkan pengecualian jika terjadi kesalahan.

  • auth_user - Login pengguna jika tidak disetel di settings.py.

  • auth_password - Kata sandi pengguna jika tidak disetel di settings.py.

  • connection - Bagian belakang email.

  • html_message - (baru di Django 1.7) jika ada, email akan menjadi multi bagian / alternatif.

Mari buat URL untuk mengakses tampilan kita -

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

Jadi saat mengakses /myapp/simpleemail/[email protected], Anda akan mendapatkan halaman berikut -

Mengirim Banyak Email dengan send_mass_mail

Metode ini mengembalikan jumlah pesan yang berhasil dikirim. Ini sama dengan send_mail tetapi membutuhkan parameter tambahan; datatuple, tampilan sendMassEmail kami akan menjadi -

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)

Mari buat URL untuk mengakses tampilan kita -

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

Saat mengakses /myapp/massemail/[email protected]/[email protected]/, kami mendapatkan -

Rincian parameter send_mass_mail adalah -

  • datatuples - Tuple di mana setiap elemen seperti (subjek, pesan, from_email, penerima_list).

  • fail_silently - Bool, jika false send_mail akan memunculkan pengecualian jika terjadi kesalahan.

  • auth_user - Login pengguna jika tidak disetel di settings.py.

  • auth_password - Kata sandi pengguna jika tidak disetel di settings.py.

  • connection - Bagian belakang email.

Seperti yang Anda lihat pada gambar di atas, dua pesan berhasil dikirim.

Note - Dalam contoh ini kami menggunakan server debuggingserver smtp Python, yang dapat Anda luncurkan menggunakan -

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

Ini berarti semua email yang Anda kirim akan dicetak di stdout, dan server tiruan berjalan di localhost: 1025.

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

Metode ini mengirim email ke administrator situs seperti yang ditentukan dalam opsi ADMINS dari file settings.py, dan ke manajer situs seperti yang ditentukan dalam opsi MANAGERS dari file settings.py. Mari kita asumsikan opsi ADMINS dan MANAGERS kita terlihat seperti -

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)

Kode di atas akan mengirimkan email ke setiap admin yang ditentukan di bagian ADMINS.

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)

Kode di atas akan mengirimkan email ke setiap manajer yang ditentukan di bagian MANAJER.

Detail parameter -

  • Subject - Subjek email.

  • message - Badan email.

  • fail_silently - Bool, jika false send_mail akan memunculkan pengecualian jika terjadi kesalahan.

  • connection - Bagian belakang email.

  • html_message - (baru di Django 1.7) jika ada, email akan menjadi multi bagian / alternatif.

Mengirim email HTML

Mengirim pesan HTML di Django> = 1.7 semudah -

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

Ini akan menghasilkan email multipart / alternatif.

Tetapi untuk Django <1.7 pengiriman pesan HTML dilakukan melalui kelas django.core.mail.EmailMessage kemudian memanggil 'send' pada obyek -

Mari buat tampilan "sendHTMLEmail" untuk mengirim email 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)

Detail parameter untuk pembuatan kelas EmailMessage -

  • Subject - Subjek email.

  • message - Badan email dalam HTML.

  • from_email - Email dari.

  • to - Daftar alamat email penerima.

  • bcc - Daftar alamat email penerima “Bcc”.

  • connection - Bagian belakang email.

Mari buat URL untuk mengakses tampilan kita -

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

Saat mengakses /myapp/htmlemail/[email protected], kami mendapatkan -

Mengirim E-mail dengan Lampiran

Ini dilakukan dengan menggunakan metode 'lampirkan' pada objek EmailMessage.

Tampilan untuk mengirim email dengan lampiran akan -

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)

Detail tentang melampirkan argumen -

  • filename - Nama file yang akan dilampirkan.

  • content - Isi file yang akan dilampirkan.

  • mimetype - Jenis pantomim konten lampiran.