申请163网易发送邮件权限





在django中settings配置文件

#配置邮件服务器
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' # 指定邮件后端
EMAIL_HOST = 'smtp.163.com' # 发邮件主机
EMAIL_PORT = 25 # 发邮件端口
EMAIL_HOST_USER = '填你自己的邮箱' # 授权的邮箱
EMAIL_HOST_PASSWORD = '授权时候获得的那个密码' # 邮箱授权时获得的密码,非注册登录密码
EMAIL_FROM = '随便填一点<填你的邮箱>' # 发件人抬头
EMAIL_USE_TLS = False # 是否使用安全协议传输

创建celery异步任务

  • 在celery_tasks/main.py主入口
#Celery的入口
from celery import Celery # 把celery和django进行组合,必须让celery能识别和加载django的配置文件以及django的类库
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo.settings.dev') # 对django框架执行初始化
import django
django.setup() #创建Celery实例 生产者
celery_app = Celery('meiduo') #加载配置
celery_app.config_from_object('celery_tasks.config') # 注册任务
celery_app.autodiscover_tasks(['celery_tasks.email']) #有多个任务可写多个
  • 在celery_tasks/config.py配置文件中
# Celery配置文件
# 指定中间人、消息队列、任务队列、容器,使用redis
broker_url = "redis://192.168.204.128/10"
# 结果队列的链接地址
celery_result_backend = 'redis://127.0.0.1:6379/14'
  • 在celery_tasks/email/tasks.py
from django.core.mail import send_mail
from django.conf import settings
from celery_tasks.main import celery_app @celery_app.task(name='send_verify_email', base=Mytask) #name 起别名 #base的值为监听的那个类
def send_verify_email(to_email,verify_url):
"""定义发送邮件的任务"""
# send_mail('标题','普通邮件的正文','发件人','收件人列表','富文本邮件正文')
subject = '填主题'
#message = '普通文本'
#html_message是发送带html样式信息
html_message = '<p>尊敬的用户您好!</p>' \
'<p>感谢您使用xxxx。</p>' \
'<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>' \
'<p><a href="%s">%s<a></p>' % (to_email, verify_url, verify_url)
send_mail(subject,'',settings.EMAIL_FROM,[to_email],html_message=html_message)

celery异步执行任务不全都是成功的,所以我们需要监听任务

  • 在celery_tasks/email/tasks.py 加上下面的代码
from celery.task import Task
# 监听整个任务的钩子
class Mytask(Task):
def on_success(self, retval, task_id, args, kwargs):
print('task success 11111')
return super(Mytask, self).on_success(retval, task_id, args, kwargs) def on_failure(self, exc, task_id, args, kwargs, einfo):
print('task failed')
# 可以记录到程序中或者任务队列中,让celery尝试重新执行
return super(Mytask, self).on_failure(exc, task_id, args, kwargs, einfo) def after_return(self, status, retval, task_id, args, kwargs, einfo):
print('this is after return')
return super(Mytask, self).after_return(status, retval, task_id, args, kwargs, einfo) def on_retry(self, exc, task_id, args, kwargs, einfo):
print('this is retry')
return super(Mytask,self).on_retry(exc, task_id, args, kwargs, einfo)
  • 在django视图views文件中调用
#创建日志输出器
logger = logging.getLogger('django') class EmailView(LoginRequiredJSONMixin,View):
"""添加邮箱"""
def put(self,request):
#接收参数
json_str = request.body.decode()
json_dict = json.loads(json_str)
email = json_dict.get('email')
#校验参数
if not email:
return HttpResponseForbidden('缺少email参数')
if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email):
return HttpResponseForbidden('参数email有误')
# 将用户传入的邮箱保存到用户数据库的email字段中
try:
request.user.email = email
request.user.save()
except Exception as e:
logger.error(e)
return JsonResponse({'code':RETCODE.DBERR,'errmsg':'添加邮箱失败'}) #发送邮箱验证邮件 这里是调用邮件的
verify_url = 'www.baidu.com'
send_verify_email.delay(email,verify_url) #一定要加delay!!!! return JsonResponse({'code':RETCODE.OK,'errmsg':'OK'})
  • 启动
      终端输入命令启动celery:celery -A celery_tasks.main worker -l info -P eventlet
  • 发送邮件
      网页中点击你发送邮件的那个按钮,测试,看后台输出
  • 遇到的问题
      1.仔细看send_mail(subject,'',settings.EMAIL_FROM,[to_email],html_message=html_message)这边的传参位置,原码中send_mail接收的参数html_message在最后一个,如果你这边调用的时候,不是关键字传参的话,发送出去的短信对方接收到将不会展现文本内容!
2.启动celery后可能会报错,这边可以看我博客另外一篇讲celery启动后发送邮件报错的解决办法。目前照上面我的代码调用的话,是可以正常成功的接发收邮件的。
3.视图中调用邮件函数的时候,一定记得要加delay!一定!一定!一定!

django中使用celery异步发送邮件的更多相关文章

  1. celery介绍、架构、快速使用、包结构,celery执行异步、延迟、定时任务,django中使用celery,定时更新首页轮播图效果实现,数据加入redis缓存的坑及解决

    今日内容概要 celery介绍,架构 celery 快速使用 celery包结构 celery执行异步任务 celery执行延迟任务 celery执行定时任务 django中使用celery 定时更新 ...

  2. celery异步发送邮件

    利用Django框架发送邮件的详细过程,在前两天的博客中有所记录,但是单纯的那样发邮件是有非常大的问题的,这就需要celery异步发送来解决 首先我们来看一下邮件发送的过程: Django网站先发送到 ...

  3. Django 中使用 Celery

    起步 在 <分布式任务队列Celery使用说明> 中介绍了在 Python 中使用 Celery 来实验异步任务和定时任务功能.本文介绍如何在 Django 中使用 Celery. 安装 ...

  4. Python—在Django中使用Celery

    一.Django中的请求 Django Web中从一个http请求发起,到获得响应返回html页面的流程大致如下: http请求发起 经过中间件 http handling(request解析) ur ...

  5. Django中使用Celery实现定时任务(用djcelery)

    一.引言 Django是python语言下的一个比较热门的Web框架,越来越多的企业和开发者使用Django实现自己的Web服务器.在Web服务器开发过程中,有时候我们不仅仅是要实现Web服务器端和用 ...

  6. Django中使用Celery

    一.前言 Celery是一个基于python开发的分布式任务队列,如果不了解请阅读笔者上一篇博文Celery入门与进阶,而做python WEB开发最为流行的框架莫属Django,但是Django的请 ...

  7. Django之使用celery异步完成发送验证码

    使用celery的目的:将项目中耗时的操作放入一个新的进程实现 1.安装celery pip install celery 2.在项目的文件夹下创建包celery_tasks用于保存celery异步任 ...

  8. Celery简介以及Django中使用celery

    目录 Celery简介 消息中间件 任务执行单元 任务结果存储 使用场景 Celery的安装和配置 Celery执行异步任务 基本使用 延时任务 定时任务 异步处理Django任务 案例: Celer ...

  9. django中使用celery,模拟商品秒杀。

    Celery是Python开发的简单.灵活可靠的.处理大量消息的分布式任务调度模块 安装: pip install celery # 安装celery库 pip install redis # cel ...

  10. 四、Django中使用celery

    项目跟目录创建celery包,目录结构如下: mycelery/ ├── config.py ├── __init__.py ├── main.py └── sms/ ├── __init__.py ...

随机推荐

  1. Springboot 使用nacos鉴权的简单步骤

    Springboot 使用nacos鉴权的简单步骤 背景 前端时间nacos爆出了漏洞. 因为他的默认token固定,容易被利用. 具体的问题为: QVD-2023-6271 漏洞描述:开源服务管理平 ...

  2. rabbitmq rpm包安装以及简单设置用户的方法

    公司有一台性能比较好的power机器. 同事要求安装rabbitmq 今天尝试进行了一下处理 公司里面有网络有相应的源 性能还不错 第一步安装一下依赖的erlang yum install erlan ...

  3. Nginx被它打败了?

    Nginx被它打败了? 我们经常使用Nginx作为我们系统的代理,通常情况下是完全够用的,但是有时候业务的复杂性,我们也需要使用在网关中去代理中做一些业务,这个时候Nginx也可以使用lua脚本扩展, ...

  4. 跟着文档学Fabric:获取通道配置

    原文在这里. 1. 获取通道配置 peer channel fetch config config_block.pb -o $ORDERER_CONTAINER -c $CH_NAME --tls - ...

  5. # 再次推荐github 6.7k star开源IM项目OpenIM性能测试及消息可靠性测试报告

    本报告主要分为两部分,性能测试和消息可靠性测试.前者主要关注吞吐,延时,同时在线用户等,即通常所说的性能指标.后者主要模拟真实环境(比如离线,在线,弱网)消息通道的可靠性. 先说结论,对于容量和性能: ...

  6. 从Spring源码看Spring如何解决循环引用的问题

    Spring如何解决循环引用的问题 关于循环引用,首先说一个结论: Spring能够解决的情况为:两个对象都是单实例.且通过set方法进行注入. 两个对象都是单实例,通过构造方法进行注入,Spring ...

  7. Unity2019使用Gradle命令行(编译)出安卓包

    在我所经历的项目组中有这几种方法来生成APK 直接在Unity生成APK,可以接入SDK 使用Unity导出Android Studio工程手动生成APK 使用Unity导出Android Studi ...

  8. 从零开始配置vim(30)——DAP的其他配置

    很抱歉这么久才来更新这一系列,主要是来新公司还在试用期,我希望在试用期干出点事来,所以摸鱼的时间就少了.加上前面自己阳了休息了一段时间.在想起来更新就过去一个多月了.废话不多说了,让我们开始进入正题. ...

  9. c++基础之字符串、向量和数组

    上一次整理完了<c++ primer>的第二章的内容.这次整理本书的第3章内容. 这里还是声明一下,我整理的主要是自己不知道的或者需要注意的内容,以我本人的主观意志为准,并不具备普适性. ...

  10. 手撕Vue-构建Vue实例

    前言 要想使用Vue必须先创建Vue的实例, 创建Vue的实例通过new来创建, 所以说明Vue是一个类, 所以我们要想使用自己的Vue, 就必须定义一个名称叫做Vue的类. 只要创建好了Vue的实例 ...