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)

浙公网安备 33010602011771号