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 ของไฟล์แนบ