一.环境

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. BigDecimal常用的加减乘除算法、比较大小、不展示多余的零、保存两位小数点

    项目中涉及到了BigDecimal的加.减.乘.比较大小.精确度的问题.所以在此总结一下,方便以后复习. //加法 BigDecimal coins = new BigDecimal("0& ...

  2. HearthBuddy 突袭 rush

    https://hearthstone.gamepedia.com/Rush Rush is an ability allowing a minion to attack other minions ...

  3. JVM调优小结

    JVM调优浅谈 https://www.cnblogs.com/andy-zhou/p/5327288.html   1.数据类型 java虚拟机中,数据类型可以分为两类:基本类型和引用类型. 基本类 ...

  4. 从源码学习使用 node-delegates

    node-delegates 是 TJ 大神所写的一个简单的小工具,源码只有 157 行,作用在于将外部对象接受到的操作委托到内部属性进行处理,也可以理解为讲对象的内部属性暴露到外部,简化我们所需要书 ...

  5. Ubuntu vmware补丁

    获取补丁文件 curl http://pastie.org/pastes/9934018/download -o /tmp/vmnet-3.19.patch 如果无法下载,云盘上取,网址为:http: ...

  6. Webupload+PHP上传大文件

    1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc) APC实现方法: 安装APC,参照官方文档安装,可以使 ...

  7. jenkins密码忘记解决

    1.停止jenkins sh /usr/local/tomcat/bin/shutdown.sh 2.找到config.xml [root@test3 hello]# find / -name con ...

  8. 安装php的sphinx扩展模块

    转自 http://blog.csdn.net/fenglailea/article/details/38115821 首先你必须已经安装过了sphinx 如何安装sphinx请看:http://bl ...

  9. 增强for循环的简单总结

    整体来说:增强型for循环使用起来比较方便,代码也比较简单,如果只是操作集合中元素的而不使用索引的话,建议用此方法.对于普通for循环,如果需要使用索引进行其它操作的话,建议用这个. 详细来说:1,区 ...

  10. SpringBoot: 5.访问静态资源(转)

    springboot默认从项目的resources里面的static目录下或者webapp目录下访问静态资源 方式一:在resources下新建static文件(文件名必须是static) 在浏览器中 ...