首页 > 其他 > 详细

celery 异步发送邮件

时间:2020-08-02 17:46:38      阅读:90      评论:0      收藏:0      [点我收藏+]

1.settings同级目录下创建 celery 文件

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

# 设置环境变量
os.environ.setdefault(DJANGO_SETTINGS_MODULE, 项目名.settings)

# 注册Celery的APP
app = Celery(项目名)
# 绑定配置文件
app.config_from_object(django.conf:settings, namespace=CELERY)

# 自动发现各个app下的tasks.py文件
app.autodiscover_tasks()

2 配置settings文件

# 发送方 邮箱账户
my_mail = ‘4544****@qq.com
# 发送发 邮箱授权码
my_pass = d*****




# celery  参数

CELERY_BROKER_URL = redis://127.0.0.1:6379/

CELERY_RESULT_BACKEND = redis://127.0.0.1:6379/

CELERY_RESULT_SERIALIZER = json

3 配置 settings同级目录下 init 文件

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

#导包
import pymysql
#初始化
pymysql.install_as_MySQLdb()



__all__ = [celery_app]

4 工具py里 创建发邮件的类

from syl.settings import *
from celery.task import task

# 定义发送邮件的方法
@task
def send_mail(subject, content, mailaddr):
    
    sleep(5)
    res = True
    try:
        # 声明邮件对象
        msg = MIMEText(content, plain, utf-8)

        # 设置发送方对象
        msg[From] = formataddr([‘自定义标题, my_mail])

        # 设置收件方对象
        msg[To] = formataddr([尊敬的客户, mailaddr])

        # 设置标题
        msg[Subject] = subject

        # 设置smtp服务器
        server = smtplib.SMTP_SSL("smtp.qq.com", 465)

        # 登录邮箱
        server.login(my_mail, my_pass)

        # 发送邮件
        server.sendmail(my_mail, [mailaddr], msg.as_string())

        # 关闭smtp链接
        server.quit()
    except Exception as e:
        print(e)
        res = False
        return res
    return res

5 调用接口

class Send_email(APIView):

    # 注册
    def post(self, request):
# 接收邮件的 邮箱 email= request.POST.get(email)
user = User.objects.filter(email=email)
if user: return Response({code: 222, message: 该用户名已被注册}) try: # 邮件 subject = "账号激活" content = ‘自定义内容‘ mail.delay(subject, content,email)
return Response({code: 200, address: 验证链接已发送到您的邮箱,请前往激活账号}) except Exception as e: print(e) return Response({code: 400})

6 先启动django项目 然后另开终端 cd到celery 目录下启动celery 服务

celery worker -A 项目名 --loglevel=info --pool=solo

 

classSyl_user(APIView):# 注册defpost(self, request):# 用户名重复校验 name = request.POST.get(‘username‘)# 接收邮件的 邮箱 recipient = request.POST.get(‘email‘) user = User.objects.filter(username=name)if user:return Response({‘code‘:222,‘message‘:‘该用户名已被注册‘}) data = request.POST.copy()# 弹出密码 password = data.pop(‘password‘)# 密码加密 password = make_password(password[0])# 密码放回 data[‘password‘]= password try: se = UserSer(data=data) se.is_valid() se.save() user = User.objects.get(username=name) uid = user.id plyload ={‘iss‘:‘实验二楼‘,‘iat‘:int(time.time()),‘exp‘:int(time.time())+300,‘uid‘: uid,} key = jwt.encode(plyload,‘jiang‘, algorithm=‘HS256‘)print(key.decode(‘utf-8‘))# 邮件 subject ="账号激活" content ="点击链接激活账号:http://localhost:8000?token="+ key.decode(‘utf-8‘)+‘.com‘ mail.delay(subject, content,recipient)print(recipient)return Response({‘code‘:200,‘address‘:‘验证链接已发送到您的邮箱,请前往激活账号‘})except Exception as e:print(e)return Response({‘code‘:400,‘message‘: se.errors})

celery 异步发送邮件

原文:https://www.cnblogs.com/weiwuhu/p/13418648.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!