Django - การส่งอีเมล

Django มาพร้อมกับเครื่องมือขนาดเล็กที่พร้อมใช้งานและใช้งานง่ายในการส่งอีเมล คล้ายกับ Python คุณต้องนำเข้า smtplib ใน Django คุณต้องนำเข้า django.core.mail ในการเริ่มส่งอีเมลให้แก้ไขไฟล์ settings.py โครงการของคุณและตั้งค่าตัวเลือกต่อไปนี้ -

  • EMAIL_HOST - เซิร์ฟเวอร์ smtp

  • EMAIL_HOST_USER - เข้าสู่ระบบข้อมูลรับรองสำหรับเซิร์ฟเวอร์ smtp

  • EMAIL_HOST_PASSWORD - ข้อมูลรับรองรหัสผ่านสำหรับเซิร์ฟเวอร์ smtp

  • EMAIL_PORT - พอร์ตเซิร์ฟเวอร์ smtp

  • EMAIL_USE_TLS or _SSL - จริงถ้าการเชื่อมต่อที่ปลอดภัย

การส่งอีเมลธรรมดา

มาสร้างมุมมอง "sendSimpleEmail" เพื่อส่งอีเมลง่ายๆ

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 -

  • subject - หัวเรื่องอีเมล.

  • message - เนื้อหาอีเมล

  • from_email - อีเมลจาก.

  • recipient_list - รายชื่อที่อยู่อีเมลของผู้รับ

  • fail_silently - Bool หาก send_mail เท็จจะเพิ่มข้อยกเว้นในกรณีที่เกิดข้อผิดพลาด

  • auth_user - เข้าสู่ระบบผู้ใช้หากไม่ได้ตั้งค่าใน settings.py

  • auth_password - รหัสผ่านผู้ใช้หากไม่ได้ตั้งค่าใน settings.py

  • connection - แบ็กเอนด์อีเมล

  • html_message - (ใหม่ใน Django 1.7) หากมีอีเมลจะเป็นแบบหลายส่วน / ทางเลือก

มาสร้าง URL เพื่อเข้าถึงมุมมองของเรา -

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

ดังนั้นเมื่อเข้าถึง /myapp/simpleemail/[email protected] คุณจะได้รับหน้าต่อไปนี้ -

การส่งอีเมลหลายฉบับด้วย send_mass_mail

วิธีนี้ส่งคืนจำนวนข้อความที่ส่งสำเร็จ สิ่งนี้เหมือนกับ send_mail แต่ใช้พารามิเตอร์พิเศษ datatuple มุมมอง sendMassEmail ของเราจะเป็น -

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)

มาสร้าง URL เพื่อเข้าถึงมุมมองของเรา -

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]/ เราจะได้รับ -

รายละเอียดพารามิเตอร์ send_mass_mail คือ -

  • datatuples - ทูเพิลที่แต่ละองค์ประกอบเป็นเหมือน (หัวเรื่องข้อความจากอีเมลผู้รับ _ รายการ)

  • fail_silently - Bool หาก send_mail เท็จจะเพิ่มข้อยกเว้นในกรณีที่เกิดข้อผิดพลาด

  • auth_user - เข้าสู่ระบบผู้ใช้หากไม่ได้ตั้งค่าใน settings.py

  • auth_password - รหัสผ่านผู้ใช้หากไม่ได้ตั้งค่าใน settings.py

  • connection - แบ็กเอนด์อีเมล

ดังที่คุณเห็นในภาพด้านบนข้อความสองข้อความถูกส่งเรียบร้อยแล้ว

Note - ในตัวอย่างนี้เรากำลังใช้ Python smtp debuggingserver ซึ่งคุณสามารถเปิดได้โดยใช้ -

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

ซึ่งหมายความว่าอีเมลที่คุณส่งทั้งหมดจะถูกพิมพ์บน stdout และเซิร์ฟเวอร์จำลองกำลังทำงานบน localhost: 1025

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

วิธีการเหล่านี้จะส่งอีเมลไปยังผู้ดูแลเว็บไซต์ตามที่กำหนดไว้ในตัวเลือก ADMINS ของไฟล์ settings.py และไปยังผู้จัดการไซต์ตามที่กำหนดไว้ในตัวเลือก MANAGERS ของไฟล์ settings.py สมมติว่าตัวเลือก ADMINS และ MANAGERS ของเรามีลักษณะดังนี้ -

ADMINS = (('โปโล', '[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)

รหัสด้านบนจะส่งอีเมลไปยังผู้ดูแลระบบทุกคนที่กำหนดไว้ในส่วน 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)

รหัสด้านบนจะส่งอีเมลไปยังผู้จัดการทุกคนที่กำหนดไว้ในส่วนผู้จัดการ

รายละเอียดพารามิเตอร์ -

  • Subject - หัวเรื่องอีเมล.

  • message - เนื้อหาอีเมล

  • fail_silently - Bool หาก send_mail เท็จจะเพิ่มข้อยกเว้นในกรณีที่เกิดข้อผิดพลาด

  • connection - แบ็กเอนด์อีเมล

  • html_message - (ใหม่ใน Django 1.7) หากมีอีเมลจะเป็นแบบหลายส่วน / ทางเลือก

การส่งอีเมล HTML

การส่งข้อความ HTML ใน Django> = 1.7 ทำได้ง่ายเหมือน -

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

สิ่งนี้จะสร้างอีเมลหลายส่วน / ทางเลือก

แต่สำหรับ Django <1.7 การส่งข้อความ HTML นั้นทำได้ผ่านคลาส django.core.mail.EmailMessage แล้วเรียก 'ส่ง' บนวัตถุ -

มาสร้างมุมมอง "sendHTMLEmail" เพื่อส่งอีเมล 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)

รายละเอียดพารามิเตอร์สำหรับการสร้างคลาส EmailMessage -

  • Subject - หัวเรื่องอีเมล.

  • message - เนื้อหาอีเมลใน HTML

  • from_email - อีเมลจาก.

  • to - รายชื่อที่อยู่อีเมลของผู้รับ

  • bcc - รายชื่อที่อยู่อีเมลของผู้รับ "สำเนาลับ"

  • connection - แบ็กเอนด์อีเมล

มาสร้าง URL เพื่อเข้าถึงมุมมองของเรา -

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] เราจะได้รับ -

การส่งอีเมลพร้อมไฟล์แนบ

ซึ่งทำได้โดยใช้วิธี 'แนบ' บนวัตถุ EmailMessage

มุมมองในการส่งอีเมลพร้อมไฟล์แนบจะเป็น -

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)

รายละเอียดเกี่ยวกับการแนบอาร์กิวเมนต์ -

  • filename - ชื่อไฟล์ที่จะแนบ

  • content - เนื้อหาของไฟล์ที่จะแนบ

  • mimetype - ประเภท mime ของไฟล์แนบ