django中发送邮件

1.开启服务,获取授权码:

 2.在settings.py文件中配置

# qq发送邮件
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'  # 确保你使用的是smtp
EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = '123456789@qq.com'  # 你的 QQ 账号
EMAIL_HOST_PASSWORD = 'qlhevwlfvngmbehe' # 刚刚复制的授权码(不是你的 QQ 密码!!!)
EMAIL_USE_TLS = True  # 这里必须是 True,否则发送不成功
EMAIL_FROM = '博客<123456789@qq.com>' # 收件人看到的发件人(<必须与上面的qq邮箱一致>)

3.views文件中的代码

from django.core.mail import send_mail
from app01 import models
from django.conf import settings
from itsdangerous import SignatureExpired   # 超时异常处理
from itsdangerous import TimedJSONWebSignatureSerializer 

def reg(request):
    user = models.User.objects.filter(username=user_name).first()
    # 加密用户的身份信息,生成激活token
    # 记得先安装itsdangerous
    serializer = Serializer(settings.SECRET_KEY,300)    # 加密的秘钥,过期时间300秒
    info = {'confirm':user.nid}
    token = serializer.dumps(info).decode('utf8')
    # 发邮件
    subject = '博客欢迎信息'
    message = ''
    send = settings.EMAIL_FROM
    recipient = [user.email]    # 收件人邮箱,一次可以发送给多个邮箱
    html_message = "<h2>%s,欢迎注册本博客,恭喜您成为本博客用户</h2>,请点击以下链接激活账号<a         href='http://127.0.0.1:8000/user/active/%s'>http://127.0.0.1:8000/user/active/%s</a>"%(user.username,token,token)
    # send_mail阻塞执行,等到邮件成功发送了,才能执行return,可以使用celery异步执行,
    send_mail(subject, message, send, recipient_list=recipient,html_message=html_message)

    ret["msg"] = "/article/index/"
    return JsonResponse(ret)

若要使用celery发送邮件,如下所示

 4.使用celery发送邮件

在项目目录下创建celery_tasks包,在celery_tasks包目录下创建tasks.py文件,即 项目目录/celery_tasks/tasks.py ,tasks.py中的代码如下

# !/user/bin/env python
# -*- coding:utf-8 -*-
from django.conf import settings
from django.core.mail import send_mail
import time
# 使用celery
from celery import Celery
# 在任务处理者一端加这几句(django初始化)
# import os
# import django
# os.environ.setdefault("DJANGO_SETTINGS_MODULE", "blogtwo.settings")
# django.setup()

# broker系统里面启动redis 执行 ps aux | grep redis
app = Celery('celery_tasks.tasks',broker='redis://127.0.0.1:6379/8')  # 使用功能redis作为中间人 8代表使用8号数据库

# 定义任务函数
@app.task
def send_register_active_email(user,token):
    """发送激活邮件"""
    # 发邮件
    subject = '博客欢迎信息'
    message = ''
    send = settings.EMAIL_FROM
    recipient = [user.email]  # 收件人邮箱,一次可以发送给多个邮箱
    html_message = "<h2>%s,欢迎注册本博客,恭喜您成为本博客用户</h2>请点击以下链接激活账号<a href='http://127.0.0.1:8000/user/active/%s'>http://127.0.0.1:8000/user/active/%s</a>" % (
    user.username, token, token)
    # send_mail阻塞执行,等到邮件发送了,页面才能跳转到index,可以使用celery异步执行,
    send_mail(subject, message, send, recipient_list=recipient, html_message=html_message)
    time.sleep(1)

celery 分为任务发出者 、中间人、 任务处理者

任务发出者一端的代码如下

from celery_tasks.tasks import send_register_active_email
from django.conf import settings
from itsdangerous import TimedJSONWebSignatureSerializer 
from django.shortcuts import redirects
from itsdangerous import SignatureExpired   # 超时异常处理
def reg(request):
    user = models.User.objects.filter(username=user_name).first()
    # 加密用户的身份信息,生成激活token
    # 记得先安装itsdangerous
    serializer = Serializer(settings.SECRET_KEY,300)    # 加密的秘钥,过期时间300秒
    info = {'confirm':user.nid}
    token = serializer.dumps(info).decode('utf8')
    send_register_active_email(user,token)
    return redirect("/index/")

 tasks.py文件中的redis设置的哪个ip地址,就得把相应ip地址下的redis服务启动

任务处理者一端:

   把整个项目复制一份到任务处理者服务器,把项目目录下的celery_tasks/tasks.py文件中的修改如下

# !/user/bin/env python
# -*- coding:utf-8 -*-
from django.conf import settings
from django.core.mail import send_mail
import time
# 使用celery
from celery import Celery

# 在任务处理者一端加这几句(django初始化)
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "blogtwo.settings")
django.setup()

# broker系统里面启动redis 执行 ps aux | grep redis
app = Celery('celery_tasks.tasks',broker='redis://127.0.0.1:6379/8')  # 使用功能redis作为中间人 8代表使用8号数据库

# 定义任务函数
@app.task
def send_register_active_email(user,token):
    """发送激活邮件"""
    # 发邮件
    subject = '博客欢迎信息'
    message = ''
    send = settings.EMAIL_FROM
    recipient = [user.email]  # 收件人邮箱,一次可以发送给多个邮箱
    html_message = "<h2>%s,欢迎注册本博客,恭喜您成为本博客用户</h2>请点击以下链接激活账号<a href='http://127.0.0.1:8000/user/active/%s'>http://127.0.0.1:8000/user/active/%s</a>" % (
    user.username, token, token)
    # send_mail阻塞执行,等到邮件发送了,页面才能跳转到index,可以使用celery异步执行,
    send_mail(subject, message, send, recipient_list=recipient, html_message=html_message)
    time.sleep(1)

即相比较任务发出者一端,tasks.py文件中增加了10-13行之间的代码,接着创建虚拟环境,mkvirtualenv django_01,进入虚拟环境 workon django_01,在虚拟环境中切换到项目目录下,执行 pip install -r requirements.txt 安装依赖,执行celery -A celery_tasks.tasks worker -l info

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值