[Django]-How to send asynchronous email using django

41πŸ‘

βœ…

it is ok now ;

import threading
from threading import Thread

class EmailThread(threading.Thread):
    def __init__(self, subject, html_content, recipient_list):
        self.subject = subject
        self.recipient_list = recipient_list
        self.html_content = html_content
        threading.Thread.__init__(self)

    def run (self):
        msg = EmailMessage(self.subject, self.html_content, EMAIL_HOST_USER, self.recipient_list)
        msg.content_subtype = "html"
        msg.send()

def send_html_mail(subject, html_content, recipient_list):
    EmailThread(subject, html_content, recipient_list).start()
πŸ‘€zjm1126

12πŸ‘

In the long run, it may prove to be a good decision to use a third-party Django application, such as django-mailer, to handle all sorts of asynchronous email sending/management requirements.

πŸ‘€ayaz

3πŸ‘

After checking out more complex solutions based around celery, etc. I found django-post_office (https://github.com/ui/django-post_office) It’s a very simple database + cron job plugin that took 5 mins to get up and running. Works perfectly on both my local dev machine and Heroku.

πŸ‘€user2916527

2πŸ‘

create new file named send_mail.py and add
the function to send the mail

def send_html_mail (*args,**kwargs):
    
    subject = kwargs.get("subject")
    html_content = kwargs.get("html_content")
    recipient_list = kwargs.get("recipient_list")
    
  
    msg = EmailMultiAlternatives(subject, html_content, EMAIL_HOST_USER, recipient_list)
    msg.attach_alternative(True, "text/html")
    msg.send()

call a this function in the views.py

import threading
from send_mail import send_html_mail
def my_view (request):
   
    # .....

    threading.Thread (

        # call to send_html_mail
        target=send_html_mail,

        kwargs={

            "subject":"My super subject",
            "html_content":"My super html content",
            "recipient_list":["to@mail.com"]

            }).start()

    # .....
   


Leave a comment