天天看点

django邮件发送验证码

在我们使用网站注册账号时,使用邮箱发送验证码是很普遍的事。那么下面就介绍使用Django项目发送邮箱验证码来进行验证注册。

django项目的创建,及app的创建这里就不说了。

现在说一下在settings.py中的配置。

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = 25
#发送邮箱的邮件
EMAIL_HOST_USER = '[email protected]'
#密码或授权码
EMAIL_HOST_PASSWORD = 'jin'
#收件人看到的发件人
EMAIL_FROM = '[email protected]'
           

注意:有可能这里不是要你邮箱的密码,还有可能是授权码。

views.py配置

# 导入django内置发送邮件包
from django.core.mail import send_mail
from django.conf import settings
#随机数函数
def random_str():
    _str = '1234567890abcdefghijklmnopqrstuvwxyz'
    return ''.join(random.choice(_str) for i in range(4))

def email_send(request):

    return render(request,'email_send.html')


def send_email(request):
    """
    邮件发送函数。ajax发送get请求,调用随机字符串函数,生成四位随机数,保存到session中,
    并发送邮件到验证邮箱。
    post请求中判断得到的随机字符串是否与session中所保存的字符串相同,若相同则重定向到主页面。
    :param request:
    :return:
    """
    if request.method == 'GET':
        try:
            email = request.GET['email']
        except:
            email = ''
        email_code = random_str()
        msg = '验证码:'+email_code
        send_mail('邮箱验证',msg,settings.EMAIL_FROM,
                  [email])
        print(email_code)
        # 将验证码保存到session中在接下来的操作中进行验证
        request.session['email_code'] = email_code
        return HttpResponse('ok')
    else:
        # 验证验证码是否输入正确
        if request.POST.get('email_code') == request.session['email_code']:
            return redirect('/info/')
        else:
            return HttpResponse('验证码错误')
           

前端页面

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
{% load static %}
<body>
<input type="email" id="email">
<button id="verify">验证</button>
<form action="/user/send_email/" method="post">
<input type="text" placeholder="验证码" name="email_code">
<input type="submit" value="提交">
    {% csrf_token %}
</form>
<script type="text/javascript" src="{% static 'js/jquery-3.3.1.min.js' %}"></script>
<script type="text/javascript">
    $('#verify').click(function () {
        $.ajax({
            type:'GET',
            url:'/user/send_email/',
            data:{'email':$('#email').val()},
            success:function (result) {
                alert('发送成功!');
            }
        });
    });
</script>
</body>
</html>
           

此处使用ajax发送验证码,发送成功前端弹出提示框提示发送成功。