Flask使用celery发送邮件和发送短信验证码

邮箱: qq邮箱

手机验证码: 云通讯手机验证码

  1. tasks.py

    from flask import Flask
    from flask_mail import Message
    
    from celery import Celery
    
    from exts import mail
    from libs.yuntongxun.sms import CCP
    import config
    
    app = Flask(__name__)
    
    app.config.from_object(config)
    
    mail.init_app(app)
    
    # 运行本文件
    # linux上
    # celery -A tasks.celery worker -l info
    # window上
    # celery -A tasks.celery worker --pool=solo -l info
    
    
    def make_celery(app):
        celery = Celery(
            app.import_name,
            backend=app.config['CELERY_RESULT_BACKEND'],
            broker=app.config['CELERY_BROKER_URL']
        )
        celery.conf.update(app.config)
    
        class ContextTask(celery.Task):
            def __call__(self, *args, **kwargs):
                with app.app_context():
                    return self.run(*args, **kwargs)
    
        celery.Task = ContextTask
        return celery
    
    
    # 创建celery对象
    celery = make_celery(app)
    
    
    # qq邮箱
    @celery.task
    def send_mail(subject, recipients, body):
        message = Message(
            subject=subject,
            recipients=recipients,
            body=body
        )
    
        mail.send(message)
        
    # 短信验证码的
    @celery.task
    def send_sms_captcha(telephone, captcha):
        ccp = CCP()
        ccp.send_Template_sms(telephone, [captcha, config.CAPTCHA_OUTTIME], 1)
    

    在这里插入图片描述

  2. config.py

     # MAIL_USE_TLS: 端口号587
     # MAIL_USE_SSL: 端口号465
     # QQ不支持非加密方式发送邮箱
     # 发送者邮箱的服务器地址
     MAIL_SERVER = "smtp.qq.com"
     MAIL_PORT = "587"
     # 设置为True以后flask发送邮件旧回忆TLS协议去发送
     MAIL_USE_TLS = True
     # MAIL_USE_SSL:默认为False
     # MAIL_DEBUG:默认app.debug
     MAIL_USERNAME = "邮箱账号"
     MAIL_PASSWORD = "授权码"
     MAIL_DEFAULT_SENDER = "邮箱账号"
    
    # 短信验证码有效时间1
    CAPTCHA_OUTTIME = "1"
    
    # celery相关配置
    CELERY_RESULT_BACKEND = "redis://127.0.0.1:6379/0"
    CELERY_BROKER_URL = "redis://127.0.0.1:6379/0"
    
  3. 启动worker

    # linux上
    celery -A tasks.celery worker -l info
    # window上
    celery -A tasks.celery worker --pool=solo -l info
    
  4. 启动中间人redis

  5. 异步发送邮箱, 和短信

    # 调用函数是用了delay那么就会把该任务添加到broker 也就是 我们配置的redis中
    
    # 发送qq邮件
    send_mail.delay("Python论坛邮箱验证码", [email], "您的验证码是:%s" % captcha)
    
    # 发送手机短信验证码
    send_sms_captcha.delay(telephone, captcha)
    
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只因为你温柔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值