一.环境

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

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

 
图1.2

根据图1.2 选择安装的支持的Erlang,

下载地址 如图1.3  http://www.erlang.org/downloads

 
图1.3

安装直接点下一步------

Rabbmq安装好后,点击图1.3 红色框的内容

 
图1.4

出现黑色框框 图1.5

 
图1.5

可视化插件方式启动rabbitmq

命令:rabbitmq-plugins enable rabbitmq_management

如下图1.6

 
图1.6

启动成功标志:

浏览器打开 http://127.0.0.1:15672

账户密码默认都是guest

如图1.7

 
图1.7

能打开就行

二.Django配置celery

如图2.1

 
图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邮箱测试的,如图

 
图2.3
 
图2.4

赋值授权码后,记录好

在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

 
图2.5
 
图2.6

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

python manage.py runserver

 
图2.7

看下路由

 
图2.8

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

OK,搞起

 
图2.9
 
图2.10

好的,sms的视图搞起

 
图2.11
 
图2.12
 
图2.13

注意对比图2.12 和2.13的时间,表示 劳资没有骗你们 ,成功实现发邮件

参考:https://jingyan.baidu.com/article/f3e34a12a356c9f5ea653545.html

转自:https://www.jianshu.com/p/c1515248e585

Django+celery+rabbitmq实现邮件发送的更多相关文章

  1. django+celery +rabbitmq

    celery是一个python的分布式任务队列框架,支持 分布的 机器/进程/线程的任务调度.采用典型的生产者-消费者模型 包含三部分:1. 队列 broker :可使用redis ,rabbitmq ...

  2. django+celery+ RabbitMQ实现异步任务实例

    背景   django要是针对上传文件等需要异步操作的场景时,celery是一个非常不错的选择.笔者的项目就是使用了这个组合,这里就做一个备忘吧. 安装RabbitMQ   这个安装及使用我已经在前一 ...

  3. 如何使用django+celery+RabbitMQ实现异步执行

    1)安装需要安装RabbitMQ.Celery和Django-celeryCelery和Django-celery的安装直接pip就好 2)修改settings.py在INSTALLED_APPS中加 ...

  4. 使用django+celery+RabbitMQ实现异步执行

    http://www.yu180.com/group/view/259 推荐一个解决框架 https://github.com/maccman/juggernaut Realtime server p ...

  5. 毕业设计——Django邮件发送功能实现及问题记录

    django发送邮件:send_mail()&send_mass_mail() 自强学堂 刘江的博客 HTTPS,TLS和SSL django发送邮件及其相关问题 步骤 : 0. 登录作为发送 ...

  6. Django的邮件发送以及云服务器上遇到的问题

    邮件发送 首先我们的邮箱要开通smtp服务,然后就可以在settings中配置了 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBacken ...

  7. django 配置邮件发送 send_email

    导入 send_email 所用方法导入 from django.core.mail import send_mail 因为使用的需要指明 发送人 所以要把 setting.py 中的 EMAIL_F ...

  8. Django之邮件发送

    settings.py #settings 添加如下配置进行邮件发送 #邮件服务器 EMAIL_HOST = "smtp.qq.com" #邮件发送的端口 EMAIL_PORT = ...

  9. python 项目实战之Django 邮件发送

    发送邮件¶ 虽然 Python 借助 smtplib 模块简化了发送邮件的流程,但是 Django 在其基础上提供了更简化的支持.这些封装意在加快邮件发送,方便在开发时测试发送邮件,在不支持 SMTP ...

随机推荐

  1. scarpy crawl 爬取微信小程序文章(将数据通过异步的方式保存的数据库中)

    import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider ...

  2. solr安装记录

    [root@localhost bin]# ./solr start -force*** [WARN] *** Your open file limit is currently 1024.   It ...

  3. BUUCTF平台-web-边刷边记录-2

    1.one line tool <?php if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $_SERVER['REMOTE_ADDR'] = $_ ...

  4. [Javascript]客户端检测

    客户端检测是一种行之有效的开发策略.但不到万不得已,就不要使用客户端检测.先设计通用的方案,然后根据浏览器之间的差异和各自的怪癖quirky,再使用特定于浏览器的技术增强该方案. 能力检测 Featu ...

  5. word2vec原理与代码

    目录 前言 CBOW模型与Skip-gram模型 基于Hierarchical Softmax框架的CBOW模型 基于Negative Sampling框架的CBOW模型 负采样算法 结巴分词 wor ...

  6. React Native中Navigator的安装与使用

    一.安装Navigator 1.安装react-native-deprecated-custom-components npm install react-native-deprecated-cust ...

  7. dede 友情链接显示不全解决方法

    只需在html页面中调用友情链接的地方修改链接长度即可 titlelen: 链接文字长度(修改此数值即可) row: 友情链接的数量 {dede:flink titlelen="50&quo ...

  8. React Native pod install报错 `Yoga (= 0.44.3.React)` required by `React/Core (0.44.3)`

    使用pod安装,可能会因为Podfile的路径指向错误或者没有路径指向因为报错. 报错截图如下: 这是因为在指定的路径没有寻找到相应的组件.此时就需要修改podfile文件中的路径,由于上方提示没有  ...

  9. 【学习笔记】XPath定位总结

    XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言. 原理:基于html的文档目录结构进行定位元素. 以html代码为例讲解各种定位方法: ...

  10. 李宏毅 Tensorflow解决Fizz Buzz问题

    提出问题 一个网友的博客,记录他在一次面试时,碰到面试官要求他在白板上用TensorFlow写一个简单的网络实现异或(XOR)功能.这个本身并不难,单层感知器不能解决异或问题是学习神经网络中的一个常识 ...