Django+celery+rabbitmq实现邮件发送
一.环境
1.pip包
amqp==2.4.2
anyjson==0.3.3
billiard==3.6.0.0
celery==4.3.0
Django==2.2
dnspython==1.16.0
eventlet==0.24.1
greenlet==0.4.15
kombu==4.5.0
monotonic==1.5
pytz==2019.1
redis==3.2.1
six==1.12.0
sqlparse==0.3.0
vine==5.0.0a1
2.rabbmitMQ
下载地址 https://www.rabbitmq.com/install-windows.html

如图1.1,安装rabbitmq之前需要安装Erlang,需要确认你选的rabbitmq 所支持的Erlang版本,

根据图1.2 选择安装的支持的Erlang,
下载地址 如图1.3 http://www.erlang.org/downloads

安装直接点下一步------
Rabbmq安装好后,点击图1.3 红色框的内容

出现黑色框框 图1.5

可视化插件方式启动rabbitmq
命令:rabbitmq-plugins enable rabbitmq_management
如下图1.6

启动成功标志:
浏览器打开 http://127.0.0.1:15672
账户密码默认都是guest
如图1.7

能打开就行
二.Django配置celery
如图2.1

红色部分为要添加和修改的内容
__init__.py
---------------------------------------------------------------------#这个是我加的分隔符,里面才是代码
from __future__import absolute_import, unicode_literals
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from Celery_pro.celeryimport appas celery_app
__all__ = ('celery_app',)
---------------------------------------------------------------------
celery.py
---------------------------------------------------------------------
from __future__import absolute_import, unicode_literals
import os
from celery import Celery
#注意下面的 Celery_pro.settings 是我的项目名称.settings,你的项目名称就写你的
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Celery_pro.settings')
#这下面的也是
app = Celery('Celery_pro',backend="celery.backends.amqp:AMQPBackend")
app.config_from_object('django.conf:settings',namespace='CELERY') app.autodiscover_tasks( lambda: [n.name for n in apps.get_app_configs()] ) @app.task(bind=True) def debug_task(self): print('Request: {0!r}'.format(self.request))
---------------------------------------------------------------------
在settings.py中 添加设置如下内容
---------------------------------------------------------------------
#存储任务队列执行后的结果的BACKEND CELERY_RESULT_BACKEND ='redis://*.*.*.*' #我的服务器IP不能暴露,你也可以写本地的redis,或者amqp://ip #充当任务队列的中介者的地址也就是--->rabbmq CELERY_BROKER_URL ='amqp://127.0.0.1//' #放回结果的格式 CELERY_RESULT_SERIALIZER ='json'
---------------------------------------------------------------------
2.2 写相关的视图函数,测试
创建一个app名称为app01,在app01目录下创建tasks.py
----------------------------------------------------------------------
from __future__import absolute_import, unicode_literals
from celeryimport shared_task
from django.core.mailimport send_mail
from Celery_proimport settings
#反转字符串
@shared_task
def reverse(string):
return string[::-1]
#异步实现发邮件
@shared_task
def SendEmail(sub,msg,to_email):
try:
send_mail(
sub,
msg,
settings.EMAIL_HOST_USER,
to_email,
fail_silently=False
)
except Exception :
return False
return True
----------------------------------------------------------------------
在视图函数中代码如下
----------------------------------------------------------------------
from django.httpimport JsonResponse
from django.shortcutsimport render
from Celery_proimport settings
from .tasksimport *
# Create your views here.
def index(request):
res=reverse.delay('hello world')
print(res.get())
return JsonResponse({"status:":"sccessful","task_id":res.task_id})
def sms(request):
res=SendEmail.delay('Hello world','give you msg',['求个妹子(填写你要发送给谁)@qq.com'])
res=res.get()
print(res)
if res:
return JsonResponse({"status":"success"})
else:
return JsonResponse({"status":"Flase"})
----------------------------------------------------------------------
邮件配置
我的使用QQ邮箱测试的,如图


赋值授权码后,记录好
在settings.py文件添加如下
----------------------------------------------------------------------
STATIC_URL='/static/' EMAIL_BACKEND ='django.core.mail.backends.smtp.EmailBackend' #固定写法 EMAIL_HOST ='smtp.qq.com' #SMTP地址 EMAIL_PORT =25 #SMTP端口 EMAIL_HOST_USER ='给你看了,你又不做我女盆友' #发送邮件的邮箱 EMAIL_HOST_PASSWORD ='我的授权码不能给你看' # 授权码 EMAIL_SUBJECT_PREFIX ='[我想要个女票] ' #为邮件Subject-line前缀,默认是'[django]' EMAIL_USE_TLS =True # 与SMTP服务器通信时,是否启动TLS链接(安全链接)默认false
----------------------------------------------------------------------
好了,基本准备完毕
先启动celery
celery -A Celery_pro worker -l info -P eventlet


启动django,注意,只能在命令行启动,点pycharm的启动键会报错,这是bug我还没解决
python manage.py runserver

看下路由

我直接访问http://127.0.0.1:8000 就是反转视图函数的字符串,hello world
OK,搞起


好的,sms的视图搞起



注意对比图2.12 和2.13的时间,表示 劳资没有骗你们 ,成功实现发邮件
参考:https://jingyan.baidu.com/article/f3e34a12a356c9f5ea653545.html
转自:https://www.jianshu.com/p/c1515248e585
Django+celery+rabbitmq实现邮件发送的更多相关文章
- django+celery +rabbitmq
celery是一个python的分布式任务队列框架,支持 分布的 机器/进程/线程的任务调度.采用典型的生产者-消费者模型 包含三部分:1. 队列 broker :可使用redis ,rabbitmq ...
- django+celery+ RabbitMQ实现异步任务实例
背景 django要是针对上传文件等需要异步操作的场景时,celery是一个非常不错的选择.笔者的项目就是使用了这个组合,这里就做一个备忘吧. 安装RabbitMQ 这个安装及使用我已经在前一 ...
- 如何使用django+celery+RabbitMQ实现异步执行
1)安装需要安装RabbitMQ.Celery和Django-celeryCelery和Django-celery的安装直接pip就好 2)修改settings.py在INSTALLED_APPS中加 ...
- 使用django+celery+RabbitMQ实现异步执行
http://www.yu180.com/group/view/259 推荐一个解决框架 https://github.com/maccman/juggernaut Realtime server p ...
- 毕业设计——Django邮件发送功能实现及问题记录
django发送邮件:send_mail()&send_mass_mail() 自强学堂 刘江的博客 HTTPS,TLS和SSL django发送邮件及其相关问题 步骤 : 0. 登录作为发送 ...
- Django的邮件发送以及云服务器上遇到的问题
邮件发送 首先我们的邮箱要开通smtp服务,然后就可以在settings中配置了 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBacken ...
- django 配置邮件发送 send_email
导入 send_email 所用方法导入 from django.core.mail import send_mail 因为使用的需要指明 发送人 所以要把 setting.py 中的 EMAIL_F ...
- Django之邮件发送
settings.py #settings 添加如下配置进行邮件发送 #邮件服务器 EMAIL_HOST = "smtp.qq.com" #邮件发送的端口 EMAIL_PORT = ...
- python 项目实战之Django 邮件发送
发送邮件¶ 虽然 Python 借助 smtplib 模块简化了发送邮件的流程,但是 Django 在其基础上提供了更简化的支持.这些封装意在加快邮件发送,方便在开发时测试发送邮件,在不支持 SMTP ...
随机推荐
- 锁对象Lock-同步问题更完美的处理方式
Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我 ...
- docker crontab踩坑记录
环境,docker centos7.4 容器启动时注意两点 入口要设置/usr/sbin/init,并且配置主机完全访问权限(--privileged) (否则执行service的时候会出现Faile ...
- HearthBuddy遇奥秘解决方法
https://tieba.baidu.com/g/5808796816 链接: https://pan.baidu.com/s/1NPQTOfxbN_4alP7J-XWuVw 密码: xfj1
- DeepLearningBook(中文版)书PDF
介绍深度学历基础理论.模型和应用.(738页). 第一部分 应用数学与机器学习基础,包括深度学习需要用到的线性代数.概率与信息论.数值计算.机器学习等内容. 第二部分 深度网络:现代实践,包括深度前馈 ...
- 在Ubuntu 16.04 LTS下编译安装OpenCV 4.1.1
目录 一 安装前的准备 二 编译并安装OpenCV 4.1.1 注:原创不易,转载请务必注明原作者和出处,感谢支持! OpenCV目前(2019-8-1)的最新版本为4.1.1.本文将介绍如何在Ubu ...
- 消息队列 RabbitMQ 入门介绍
来源:http://ityen.com/archives/578 一.什么是RabbitMQ? RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系 ...
- Elasticsearch常见错误与配置简介
一.常见错误 1.1 root用户启动elasticsearch报错 Elasticsearch为了安全考虑,不让使用root启动,解决方法新建一个用户,用此用户进行相关的操作.如果你用root启动, ...
- C# AES的128位、192位、256位加密
C# AES的128位.192位.256位加密 AES加密原理,这里就不解释了,自行百度.这里主要细说AES的CBC加密模式下的128位.192位.256位加密区别,参考 对称加密和分组加密中的四 ...
- Spring Boot开发Web应用之JSP篇
前言 上一篇介绍了Spring Boot中使用Thymeleaf模板引擎,今天来介绍一下如何使用SpringBoot官方不推荐的jsp,虽然难度有点大,但是玩起来还是蛮有意思的. 正文 先来看看整体的 ...
- DRF视图-5个扩展类以及GenericAPIView基类
视图 5个视图扩展类 视图拓展类的作用: 提供了几种后端视图(对数据资源进行曾删改查)处理流程的实现,如果需要编写的视图属于这五种,则视图可以通过继承相应的扩展类来复用代码,减少自己编写的代码量. 这 ...