Envoyer des e-mails de manière asynchrone à l'aide de redis+celery

Environnement : centos7+django2+redis+céleri

 

1. Installez d'abord redis et le céleri.

pip installer le céleri

pip intsall redis

 pip installer django-redis
 

  • démarrer le service redis start | systemctl démarrer redis
  • Modifiez le fichier de configuration redis vim /etc/redis.conf
  • Voir processus redis ps -aux | grep redis
  • Méthode de modification du mot de passe : vim .etc/redis.conf Trouvez la phrase #requirepass foobared. Ajoutez requirepass yoursecret#your password après. Redémarrez rsystemctl redémarrez redis. Bien sûr, vous ne pouvez pas non plus définir

Pour plus de configuration Redis, veuillez consulter la documentation officielle pour en savoir plus. Site chinois http://www.redis.cn/ . Site officiel en anglais https://redis.io/

2. Créez un fichier tasks.py. [ doit être ce nom ] sous le fichier de répertoire appa créé .

from __future__ import absolute_import, unicode_literals
from celery import shared_task
from django.core.mail import send_mail
import logging

logger = logging.getLogger(__name__)


@shared_task
def celery_send_email(subject, message, from_email, recipient_list, **kwrags):
    try:
        # 使用celery并发处理邮件发送的任务
        logger.info("\n开始发送邮件")
        send_mail(subject, message, from_email, recipient_list, **kwrags)
        logger.info("邮件发送成功")
        return 'success!'
    except Exception as e:
        logger.error("邮件发送失败: {}".format(e))


Remarque : La première ligne est la meilleure : à partir de __future__, importez absolute_import, unicode_literals. Sinon, il est facile de faire des erreurs.

3. Ajoutez le fichier celery.py dans le même répertoire que setting.py.

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# 为celery程序设置DJANGO_SETTINGS_MODULE环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '你的项目名字.settings')

app = Celery('project_name')

# 从Django的设置文件中导入CELERY设置
app.config_from_object('django.conf:settings', namespace='CELERY')
# 从所有已注册的app中加载任务模块
app.autodiscover_tasks()


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

Quatrièmement, recherchez le fichier __init__.py dans le même répertoire que setting.py

from __future__ import absolute_import, unicode_literals
# 这将保证celery app总能在django应用启动时启动
from .celery import app as celery_app


__all__ = ['celery_app']

Cinq, ouvrez le fichier setting.py pour ajouter

#扣扣邮箱验证
# 邮件配置
EMAIL_USE_SSL = True

EMAIL_HOST = 'smtp.qq.com'  # 如果是 163 改成 smtp.163.com
EMAIL_PORT = 465
EMAIL_HOST_USER = '[email protected]' # 你的 QQ 账号
EMAIL_HOST_PASSWORD = '' #你的授权密码。具体在设置--账号里面,一定要打开POP3服务。
# 默认邮件
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER



#celery配置
CELERY_BROKER_URL = 'redis://localhost:6379' #celery中间人 redis://redis服务所在的ip地址:端口/数据库号
CELERY_RESULT_BACKEND = 'redis://localhost:6379'#celery结果返回,可用于跟踪结果
#celery内容等消息的格式设置
#: Only add pickle to this list if your broker is secured
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_ENABLE_UTC = True
#celery时区设置,使用settings中TIME_ZONE同样的时区
CELERY_TIMEZONE = 'Asia/Shanghai'

6. Ajoutez un fichier de vue au fichier views.py


from django.http import HttpResponse
from your_product import setting
from celery_test.tasks import celery_send_email<br><br>
def add_task_to_celery(request):
    email = ''#需要发送邮件的邮箱地址
    celery_send_email.delay(u'邮件主题', '邮箱内容', setting.DEFAULT_FROM_EMAIL, [email])
    return HttpResponse('hello world')

7. Ajoutez une route pour envoyer des e-mails dans le fichier url.py

from django.contrib import admin
from django.urls import path
from your_urls import views  #导入你的视图文件路径
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('send_email/', views.add_task_to_celery, name='send_email'),
]

8. Exécutez la commande suivante dans le même répertoire de niveau de manage.py pour démarrer le processus de travail de celery (principalement utilisé pour la consommation ou l'exécution de tâches)

celery -A worker your_projectName --loglevel=info

Blogue de référence :

https://www.cnblogs.com/wumingxiaoyao/p/8515075.html

https://blog.csdn.net/qq_32868151/article/details/78937719

https://blog.csdn.net/xiaohuoche175/article/details/81480576

Je suppose que tu aimes

Origine blog.csdn.net/hard_days/article/details/103254622
conseillé
Classement