Django - Gửi e-mail
Django đi kèm với một công cụ nhẹ sẵn sàng và dễ sử dụng để gửi e-mail. Tương tự như Python, bạn chỉ cần nhập smtplib. Trong Django, bạn chỉ cần nhập django.core.mail. Để bắt đầu gửi e-mail, hãy chỉnh sửa tệp settings.py dự án của bạn và đặt các tùy chọn sau:
EMAIL_HOST - máy chủ smtp.
EMAIL_HOST_USER - Thông tin đăng nhập cho máy chủ smtp.
EMAIL_HOST_PASSWORD - Thông tin đăng nhập mật khẩu cho máy chủ smtp.
EMAIL_PORT - Cổng máy chủ smtp.
EMAIL_USE_TLS or _SSL - Đúng nếu kết nối an toàn.
Gửi một e-mail đơn giản
Hãy tạo chế độ xem "sendSimpleEmail" để gửi một e-mail đơn giản.
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)
Đây là chi tiết về các tham số của send_mail -
subject - Chủ đề e-mail.
message - Nội dung thư điện tử.
from_email - E-mail từ.
recipient_list - Danh sách địa chỉ e-mail của người nhận.
fail_silently - Bool, nếu send_mail sai sẽ đưa ra một ngoại lệ trong trường hợp lỗi.
auth_user - Người dùng đăng nhập nếu không được đặt trong settings.py.
auth_password - Mật khẩu người dùng nếu không được đặt trong settings.py.
connection - Phần phụ trợ e-mail.
html_message - (mới trong Django 1.7) nếu có, e-mail sẽ là nhiều phần / thay thế.
Hãy tạo một URL để truy cập chế độ xem của chúng tôi -
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'),)
Vì vậy, khi truy cập /myapp/simpleemail/[email protected], bạn sẽ nhận được trang sau:
Gửi nhiều thư bằng send_mass_mail
Phương thức trả về số lượng tin nhắn được gửi thành công. Điều này giống như send_mail nhưng có thêm một tham số; datatuple, chế độ xem sendMassEmail của chúng ta sau đó sẽ là -
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)
Hãy tạo một URL để truy cập chế độ xem của chúng tôi -
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'),)
Khi truy cập /myapp/massemail/[email protected]/[email protected]/, chúng tôi nhận được -
Chi tiết thông số send_mass_mail là -
datatuples - Một bộ dữ liệu trong đó mỗi phần tử giống như (chủ đề, tin nhắn, từ_email, danh sách người nhận).
fail_silently - Bool, nếu send_mail sai sẽ đưa ra một ngoại lệ trong trường hợp lỗi.
auth_user - Người dùng đăng nhập nếu không được đặt trong settings.py.
auth_password - Mật khẩu người dùng nếu không được đặt trong settings.py.
connection - Phần phụ trợ e-mail.
Như bạn có thể thấy trong hình trên, hai tin nhắn đã được gửi thành công.
Note - Trong ví dụ này, chúng tôi đang sử dụng trình gỡ lỗi Python smtp, bạn có thể khởi chạy bằng cách sử dụng -
$python -m smtpd -n -c DebuggingServer localhost:1025
Điều này có nghĩa là tất cả các e-mail đã gửi của bạn sẽ được in trên stdout và máy chủ giả đang chạy trên localhost: 1025.
Sending e-mails to admins and managers using mail_admins and mail_managers methods
Các phương pháp này gửi e-mail đến quản trị viên trang web như được xác định trong tùy chọn QUẢN TRỊ của tệp settings.py và cho người quản lý trang web như được định nghĩa trong tùy chọn MANAGERS của tệp settings.py. Giả sử các tùy chọn QUẢN TRỊ và NGƯỜI QUẢN LÝ của chúng tôi trông giống như sau:
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)
Đoạn mã trên sẽ gửi e-mail đến mọi quản trị viên được xác định trong phần QUẢN TRỊ.
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)
Đoạn mã trên sẽ gửi e-mail đến mọi người quản lý được xác định trong phần MANAGERS.
Thông số chi tiết -
Subject - Chủ đề e-mail.
message - Nội dung thư điện tử.
fail_silently - Bool, nếu send_mail sai sẽ đưa ra một ngoại lệ trong trường hợp lỗi.
connection - Phần phụ trợ e-mail.
html_message - (mới trong Django 1.7) nếu có, e-mail sẽ là nhiều phần / thay thế.
Gửi e-mail HTML
Gửi tin nhắn HTML trong Django> = 1.7 dễ dàng như -
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=")
Điều này sẽ tạo ra một e-mail nhiều phần / thay thế.
Nhưng đối với Django <1,7, việc gửi tin nhắn HTML được thực hiện thông qua lớp django.core.mail.EmailMessage sau đó gọi 'send' trên đối tượng -
Hãy tạo chế độ xem "sendHTMLEmail" để gửi e-mail 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)
Thông số chi tiết để tạo lớp EmailMessage -
Subject - Chủ đề e-mail.
message - Nội dung email trong HTML.
from_email - E-mail từ.
to - Danh sách địa chỉ e-mail của người nhận.
bcc - Danh sách địa chỉ e-mail của người nhận “Bcc”.
connection - Phần phụ trợ e-mail.
Hãy tạo một URL để truy cập chế độ xem của chúng tôi -
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'),)
Khi truy cập /myapp/htmlemail/[email protected], chúng tôi nhận được -
Gửi E-mail có Đính kèm
Điều này được thực hiện bằng cách sử dụng phương thức 'đính kèm' trên đối tượng EmailMessage.
Chế độ xem để gửi e-mail có tệp đính kèm sẽ là -
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)
Chi tiết về đối số đính kèm -
filename - Tên tệp cần đính kèm.
content - Nội dung của tệp cần đính kèm.
mimetype - Loại kịch câm nội dung của tệp đính kèm.