Comment envoyer des e-mails de manière asynchrone en utilisant Python, Django et Celery ?

Celery est une file d’attente de tâches distribuée qui vous permet d’exécuter des tâches à partir de votre application ou script Python. Il vous permet d’exécuter vos tâches de manière asynchrone. Cela signifie que vous n’avez pas à attendre cette fonction. Dans ce tutoriel, nous allons apprendre comment envoyer des emails de manière asynchrone ? Vous pouvez exécuter votre script en l’envoyant simplement à Celery et il exécutera votre script à la demande. Il a généralement besoin d’un courtier pour transférer les tâches dans cet article, nous utiliserons RabbitMQ.

Le processus de céleri va comme ceci:

Client -> Django -> Rabbitmq -> Céleri

Django est un framework d’application Web open-source et gratuit de haut niveau pour python. Django est utilisé pour sa conception épurée, son développement rapide, sa maintenance facile et son site Web sécurisé.

Conditions préalables

  1. Python 3
  2. Un IDE de votre préférence
  3. Django 3
  4. Environnement virtuel
  5. LapinMQ
  6. Céleri

Étape -1 : Installation des packages requis

Vous pouvez simplement installer Django en tapant la commande ci-dessous dans votre invite de commande ou dans le terminal :

pip3 install django

Virtualenv est un outil pour créer un espace séparé du système. Virtualenv a son propre environnement, vous pouvez exécuter du code python séparément du système et cela n’affecte pas le système. C’est très utile pour développer un nouveau logiciel multiple sans interférer les uns avec les autres processus. Pour installer virtualenv, vous pouvez exécuter la commande ci-dessous dans votre terminal :

pip3 install python3-venv

Créons maintenant un dossier pour notre projet :

mkdir sende
cd sende

Maintenant, initialisons l’environnement virtuel de notre projet et activons-le :

python3 -m venv djangoenv  
source djangoenv/bin/activate  

Après cela, vous pouvez exécuter tout le code pour envoyer un e-mail à l’aide de céleri dans cet environnement virtuel. Il est temps d’installer le RabbitMQ. Il s’agit d’un logiciel de courtage de messages open source qui vous donne accès à une plate-forme commune pour envoyer et recevoir des messages.

Utilisez la commande ci-dessous pour installer RabbitMQ :

Pour MacOS :

brew install rabbitmq

Pour Windows, vous pouvez le télécharger ici, et pour Linux, téléchargez-le ici.

Maintenant, installons Celery :

pip3 install celery

Étape -2 : Configurer le céleri

Démarrez un nouveau projet à l’aide de la commande ci-dessous :

django-admin startproject celery_project 

Tout d’abord, activez puis démarrez le serveur Rabbit MQ en utilisant simplement cette commande dans votre terminal :

sudo systemctl enable rabbitmq-server
sudo systemctl start rabbitmq-server

Vous pouvez vérifier que le serveur fonctionne ou non à l’aide de la commande ci-dessous :

sudo systemctl status rabbitmq-server

Pour utiliser Django avec le céleri, nous devons d’abord définir une instance de céleri. Pour cela, allez dans votre dossier principal du projet et créez un nouveau fichier nommé ‘celery.py’ et configurez-le. Ouvrez celery.py dans votre IDE et exécutez cette commande :

from_future_import absolute_import, unicode_literals
import os
from celery import celery

Ensuite, nous devons définir les variables d’environnement du module de paramètres Django pour le programme en ligne de commande celery :

os.environ.setdefault('DJANGO_SETTING_MODULE' , 'celery_project.settings')

Après cela, nous créons une instance d’application :

app = celery ('celery_project')

Ensuite, nous ajoutons le module de paramètres Django comme source de configuration pour le céleri :

App.config_from_object('django.conf:settings' , namespace='CELERY')

Ensuite, nous allons utiliser la tâche de découverte automatique des applications que nous avons dans d’autres applications. Nous allons définir les tâches à exécuter par le céleri. les tâches sont placées à l’intérieur de tasks.py et la découverte automatique va trouver le fichier de tâches et importer le fichier pour que le céleri s’exécute.

app autodiscover_tasks()

Ajout du code dans le setting.py

EMAIL_BACKEND ='django.core.mail.backends.smtp.EmailBackend
#add your host of the email here in this case its Gmail so we are going to use Gmail host
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_USE_TLS = True
#add the port number of the email server
EMAIL_PORT = 587
#add your gamil here
EMAIL_HOST_USER = '[email protected]'
#add your password here
EMAIL_HOST_PASSWORD = 'password'

Mise à jour du init.py

Nous devons mettre à jour notre fichier init.py pour cela, vous pouvez simplement coller le code ci-dessous dans votre fichier init.py.

from celery import app as celery
_app__all__ = ('celery_app',)

Étape -3 : Création de la vue

Nous allons créer un view.py dans notre application de projet que nous pouvons utiliser et qui va tout déclencher pour le céleri, vous pouvez coller ce code dans ce view.py.

from django.shortcuts import render
def index(request):   
    return HttPresopnse('Done!')

Étape -4 : Configurer les paramètres de Gmail

Configurez l’identifiant Gmail pour Django :

  1. Accédez à votre identifiant de messagerie puis gérez votre compte
  2. Ensuite, accédez à la sécurité, faites défiler vers le bas et activez l’accès aux applications moins sécurisées.
  3. Ensuite, activez la vérification en 2 étapes
  4. Après cela, vous pouvez voir le nouveau mot de passe de l’application optionnelle
  5. Générer le mot de passe de l’application
  6. Et le copier-coller quelque part

Maintenant, mettez à jour settings.py avec vos informations d’identification.

Étape 5 : Création de mail.py

Créez le fichier mail.py dans le dossier céleri et copiez-collez ce code dans le fichier. Nous définissons déjà la valeur de l’email, de l’hôte, de l’utilisateur dans le fichier setting.py afin que nous puissions importer la valeur dans le fichier.

from django.core.mail import send_mail
from project.settings import EMAIL_HOST_USER
def send_mail_to(subject, message, receivers):   
    send_mail(subject,message,EMAIL_HOST_USER,[receivers],   fail_silently= False)

Maintenant que nous avons terminé le téléchargement et la configuration du céleri, créons la tâche dans le céleri qui peut envoyer des e-mails.

Étape 6 : Création d’une tâche pour le céleri

Tout d’abord, nous devons créer une application pour ce type de commande ci-dessous dans votre terminal :

python3 manage.py startapp.task

Après avoir créé le task.py, collez le code ci-dessous dans le fichier :

#import the task from celery
from celery.decorators import task
from celery.utils.log import get_task_logger
from time import time
from .celery.inform_using_mail import send_mail_tosleeplogger = get_task_logger(__name__)@task(name='first_task')def 
my_first_task(duration):

   #add your subject of the email   
   subject= 'sending emails using celery'
   #add your message 
   message= 'hello this is my first send email with celery using Django’
   #adding email of the receiver    
   receiver= '[email protected]'   
   is_task_completed= False   error=''   
   try:       
      sleep(duration)       
      is_task_completed= True   
   except Exception as err:       
      error= str(err)       logger.error(error)   
   if is_task_completed:       
      send_mail_to(subject,message,receivers)   
   else:       
      send_mail_to(subject,error,receivers)   
      return('first_task_done')

Nous devons redémarrer le travailleur à partir du terminal pour exécuter la tâche. Pour cela, collez la commande ci-dessous dans le terminal.

service supervisor restart

Après avoir exécuté ce code, notre tâche devrait s’exécuter. Ce didacticiel vous aidera non seulement à envoyer des e-mails de manière asynchrone, mais également à exécuter des tâches de manière asynchrone.

Derniers mots

Dans cet article, nous apprenons comment envoyer des e-mails de manière asynchrone en utilisant le céleri, rabbitMQ et virtualenv. Celery est un logiciel très utile pour effectuer des tâches automatiques et planifier des tâches.

Faites-nous savoir si vous avez des questions/commentaires concernant ce processus.

Bon codage !

Voici quelques tutoriels utiles que vous pouvez lire :

Spread the love
 
   

Laisser un commentaire