1.注册网易邮箱网易免费邮箱 - 你的专业电子邮局 (163.com)
2.点击右上角的”回到旧版“
3.点击 设置中 ”POP3/SMTP/IMAP“配置
4. 开启两个服务,并添加授权码,需要验证短信,一步一步添加
5..打开django根目录Setting.py配置文件:
填写自己的邮箱账号和授权码
EMAIL_HOST = 'smtp.163.com' EMAIL_PORT = 25 EMAIL_USE_TLS = True # 这里替换自己的邮箱授权码和账号 EMAIL_HOST_USER = '182******51@163.com' EMAIL_HOST_PASSWORD = 'FYXJ******ZKH' EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
6.写视图函数
源码:
from django.core.mail import send_mail from django.shortcuts import render from django.template import loader from User.models import User # 我用163邮箱做了一个密码找回 def find_password(request): if request.method == 'POST': # 这是由html表单提交过来需要查找密码的邮箱。 email = request.POST.get('email') # 我利用对数据库的条件查找,查找存在该邮箱的User 对象,返回的是一个列表,所以默认选第一条.frist users = User.objects.filter(email=email).first() user = users.user # 取这个对象的user,这边是账号 password = users.userpw # 取这个对象的userpw,这边是密码 # 邮件的大标题 subject = '项目名:某项目平台' # 渲染模板需要的数据, data = { 'username': user, 'active_url': password, } # 准备一个模板(html,邮件的样式/格式),渲染准备的数据,比如:每份邮件不同的收件人等 html_mes = loader.get_template('index_find_password.html').render(data) # 自己发邮件的账号 from_mail = '182*******51@163.com' # 发送的邮箱账号 re_mail_list = [email] send_mail(subject=subject, message='wei', html_message=html_mes, from_email=from_mail, recipient_list=re_mail_list) error_msg = '已发送您的邮箱,请注意查收' return render(request, "index_user_login.html", { 'error_msg': error_msg, })
7.html邮件模板:
html模板源码:
<h2 style="color: black;font-weight: bold;">尊敬的:{{ username }},您好!</h2> <br> 您的密码已找回:<br> <br> <p>您的密码在这里: <b style="color: #00aced">{{ active_url }}</b></p> <p> 请勿直接回复该邮件</p> <p> 请勿直接回复该邮件</p> <p> 请勿直接回复该邮件</p> <p align="right"> 21软件 吴** <br> 此为系统邮件请勿回复 </p>
8.密码找回表单提交
9.实验:
9.1输入邮箱账号
9.2 点击发送
9.3登录该qq邮箱验证
对比数据库:
!!!!!!!!!!!
本次实验未做数据库邮箱不存在的情况,如果输入不存在的邮箱,会报错不存在Users.user
!!!!!!如果需要做不存在的情况就加个判断就好了:
非常简单
完整源码:
from django.core.mail import send_mail from django.shortcuts import render from django.template import loader from User.models import User # 我用163邮箱做了一个密码找回 def find_password(request): if request.method == 'POST': # 这是由html表单提交过来需要查找密码的邮箱。 email = request.POST.get('email') # 我利用对数据库的条件查找,查找存在该邮箱的User 对象,返回的是一个列表,所以默认选第一条.frist users = User.objects.filter(email=email).first() if users: # 存在的情况 # 就将后面的所有代码考进来即可。 user = users.user # 取这个对象的user,这边是账号 password = users.userpw # 取这个对象的userpw,这边是密码 # 邮件的大标题 subject = '项目名:某项目平台' # 渲染模板需要的数据, data = { 'username': user, 'active_url': password, } # 准备一个模板(html,邮件的样式/格式),渲染准备的数据,比如:每份邮件不同的收件人等 html_mes = loader.get_template('index_find_password.html').render(data) # 自己发邮件的账号 from_mail = '182*******151@163.com' # 发送的邮箱账号 re_mail_list = [email] send_mail(subject=subject, message='wei', html_message=html_mes, from_email=from_mail, recipient_list=re_mail_list) error_msg = '已发送您的邮箱,请注意查收' return render(request, "index_user_login.html", { 'error_msg': error_msg, }) else: # 不存在的情况 error_msg = '该邮箱不存在,请重试!' return render(request, "index_user_login.html", { 'error_msg': error_msg, })