django 使用celery发送邮件(qq邮箱)

以qq邮件为例

  1. 登录https://mail.qq.com/
  2. 修改:登录qq邮箱->设置->账户->开启服务:POP3/SMIP服务
  3. settings.py中配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' # 固定写法
EMAIL_HOST = 'smtp.qq.com' # 腾讯QQ邮箱 SMTP 服务器地址(如果是163邮箱就是:smtp.163.com)
EMAIL_PORT = 25  # SMTP服务的端口号
EMAIL_HOST_USER = 'xxxx@qq.com'  # 发送邮件的QQ邮箱(填写您拥有的邮箱)
EMAIL_HOST_PASSWORD = '******'  # 在QQ邮箱->设置->帐户->“POP3/IMAP......服务” 里得到的在第三方登录QQ邮箱授权码
EMAIL_USE_TLS = True  # 与SMTP服务器通信时,是否启动TLS链接(安全链接)默认false
  1. 在项目目录下新建celery_tasks文件夹(python package),在该文件夹下新建文件tasks.py
  2. 在tasks.py中写celery任务代码
import os
import django
import time
from celery import Celery
from django.conf import settings
from djang.core.mail import send_mail

#以下这段代码只需要当celery任务单独在其他机器上时写上,因为当celery任务独立存在时,环境中没有django服务
#为celery设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tiantianxiansheng.settings')
#设置django本身的一些初始化
django.setup()

#创建celery实例
#broker为配置你想使用的redis消息中间件,格式:broker='redis://ip:port/数据库号)
app = Celery('celery_tasks.tasks',broker='redis://你想使用的redis的ip:redis的端口(一般为6379)/1#定义celery需要执行的发邮件任务函数
@app.task	#为任务函数添加一些功能,如delay()
def send_register_active_email(to_email,username,token):
	'''发送激活邮件'''
	#组织邮件信息
	subject = 'xxx' #邮件标题
	message = '' #发普通格式邮件内容时使用
	html_messge = 'xxx' #发html格式邮件内容时使用
	sender = 'xxx@qq.com'  #邮件发送者
	receiver = 'xxx.com' #邮件接收者
	
	#发邮件,该函数为阻塞函数,只有邮件发出去之后,下面的函数才会继续执行
	send_mail(subject,message,html_message=html_message,sender,receiver)
  1. veiws中
from celery_tasks.tasks import send_register_active_email

#从前端传来的数据中获取用户信息:email
email = request.POST.get('email)

#发邮件,将任务加入任务队列
send_register_active_email.delay(email)
  1. 在项目目录下启动celery
celery -A celery_tasks.tasks worker --loglevel=info
  1. celery执行任务成功时,会在终端显示:Received task 和 succeeded 信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值