Django之邮件发送

一.  setting.py 中设置邮箱配置

# 发送邮件配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = 25
# 发送邮件的邮箱
EMAIL_HOST_USER = '************@163.com'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = '**********'
# 收件人看到的发件人
EMAIL_FROM = '<*********.com>'

二. 发送邮件方法

def send_register_active_email(to_email, username, token):
    # 发邮件
    subject = '欢迎信息'
    message = ''
    html_message = '<h1>%s, 欢迎你成为注册会员</h1>请点击下面链接激活你的账户<br>' \
                   '<a href="http://127.0.0.1:8000/user/active/%s">点击确定激活</a>' \
                   % (username, token)
    sender = settings.EMAIL_FROM
    receiver = [to_email]
    send_mail(subject, message, sender, receiver, html_message=html_message)
    time.sleep(0.5)

三. 注册方法

 # 注册路由
    path('register/', RegisterView.as_view(), name='register'),
from itsdangerous import TimedJSONWebSignatureSerializer as TJWSS

class
RegisterView(View): def get(self, request): register_form = RegisterForms() return render(request, 'register.html', {'captcha': register_form}) def post(self, request): register_form = RegisterForms(request.POST) if register_form.is_valid(): email = register_form.cleaned_data.get('email', '') password = register_form.cleaned_data.get('password', '') user = UserProfile.objects.create_user(email, email=email, password=password, is_active = False)
# 使用itsdangerous模块加密信息 tjwss
= TJWSS(settings.SECRET_KEY, 3600) info = {'confirm': user.pk} token = tjwss.dumps(info).decode() send_register_active_email(email, user, token) return render(request, 'login.html') else: return render(request, 'register.html', {'error': register_form.errors})

四. 激活方法

# 激活路由
re_path('^active/(?P<path>.*)', views.ActiveView.as_view(), name='active'),
from itsdangerous import TimedJSONWebSignatureSerializer as TJWSS
from itsdangerous import SignatureExpired
class ActiveView(View):
    def get(self, request, path):
        tjwss = TJWSS(settings.SECRET_KEY)
        try:
            info = tjwss.loads(path)
            user = UserProfile.objects.get(pk=info['confirm'])
            user.is_active = True
            user.save()
            return render(request, 'login.html')
        except SignatureExpired as e:
            return HttpResponse('验证码已过期!')

五. Celery发送邮件

import celery

# 邮件模块
from django.core.mail import send_mail
from django.conf import settings
import time

# 自定义配置信息
from mxonline import config

# django 环境的初始化
import os
import django

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MxShop.settings')
django.setup()

broker = 'redis://127.0.0.1:6379/2'
backend = 'redis://127.0.0.1:6379/1'
app = celery.Celery('tasks', backend=backend, broker=broker)

@app.task
def send_register_active_email(to_email, username, token):
    # 发邮件
    subject = '欢迎信息'
    message = ''
    html_message = '<h1>%s, 欢迎你成为注册会员</h1>请点击下面链接激活你的账户<br>' \
                   '<a href="http://127.0.0.1:8000/user/active/%s">点击确定激活</a>' \
                   % (username, token)
    sender = settings.EMAIL_FROM
    receiver = [to_email]
    send_mail(subject, message, sender, receiver, html_message=html_message)
    time.sleep(0.5)

 

posted @ 2019-08-12 10:36  yyfgrd  阅读(170)  评论(0)    收藏  举报