So với các framework khác, gửi email trong Django khá là đơn giản. Mặc dù Python đã cung cấp chức năng gửi email tương đối dễ dàng qua thư viện smtplib , tuy nhiên Django cũng cung cấp một package để gửi mail được nói là khá nhanh và dễ dàng trong việc test email trong môi trường development, ngoài ra gói này cũng cung cấp hỗ trợ cho các nền tảng không thể sử dụng SMTP. Trong Django, module này tên là django.core.mail

Bài viết này đưa ra một cách đơn giản và dễ sử dụng nhất hỗ trợ cho bạn đọc nào muốn tạo chức năng gửi mail nhanh chóng qua hệ thống Gmail của Google.

Các bước tạo một project Django mới mình không nhắc lại trong bài viết, chi tiết bạn đọc có thể tham khảo tại đây.

Để sử dụng email trong Django, việc đầu tiên là cần cấu hình thông tin email trong file settings.py

# Config send email
EMAIL_USE_TLS = True
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'test@gmail.com'  # Change to your Django gmail
EMAIL_HOST_PASSWORD = 'YourEmailPassw' # Change to your Django gmail password
EMAIL_PORT = 587

Những config trên là đủ để có thể sử dụng chức năng gửi email trong Django, tuy nhiên hiện nay Google yêu cầu bảo mật rất gắt gao, việc đăng nhập gmail từ các ứng dụng bên ngoài bị Google quản lý rất chặt, do vậy một trong những việc cần làm tiếp theo là Kích hoạt chức năng sử dụng Mật khẩu ứng dụng để project Django của chúng ta đăng nhập vào Gmail qua mật khẩu này.

Sau khi đăng nhập Gmail như bình thường, vào trang https://myaccount.google.com/ trên thanh menu bên trái, nhấn vào tab Bảo mật (Security), tại đây bạn sẽ thấy phần tạo Mật khẩu ứng dụng, nhấn vào và tạo một mật khẩu ứng dụng mới, sau khi tạo chúng ta sẽ được một mật khẩu dạng như thế này

Thay thế trực tiếp mật khẩu này vào biến EMAIL_HOST_PASSWORD vừa tạo mới ở trên, giờ đây chúng ta đã có đủ công cụ để chơi với Gmail qua Django rồi.

Open terminal, kích hoạt chế độ shell python bằng command python manage.py shell và chạy

from django.core.mail import send_mail

send_mail( 'Thank you for registering to our site', 'Hi, This is a test email', 'test@gmail.com', ['emailcuaban@gmail.com'],fail_silently=False )

Tất cả các trường trong hàm send_mail được định nghĩa tại đây. Kiểm tra lại bằng cách đăng nhập vào email người gửi hoặc email người nhận để xem kết quả.

 

Trên đây là toàn bộ những thao tác cấu hình để gửi email trong Django, nếu bạn đọc thấy đơn giản quá mình sẽ bonus thêm cấu hình giúp bạn đọc có thể render email rồi mới gửi đi (giống như nội dung các email quảng cáo của shopee, tiki, adayroi, …)

from django.core.mail import send_mail
from django.utils.html import strip_tags
from django.conf import settings
from django.template.loader import render_to_string


html_message = render_to_string('path/email_template.html', {'data': data})
plain_message = strip_tags(html_message)
send_mail('Thank you for registering to our site', plain_message,settings.EMAIL_HOST_USER, ['emailcuaban@gmail.com'], html_message=html_message)

Trong đó path/email_template.html là đường dẫn đến file email_template đặt trong thư mục template của project Django, còn {‘data’: data} là các biến truyền vào trong email_template, tương tự như cách đưa dữ liệu vào template để render ra một trang web trong Django.