django自带邮件模块实现用户注册激活邮件发送

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lzw2016/article/details/82086224

最近在看慕课网的利用Django搭建教学网站的视频,其中碰到了给注册用户发送激活邮件的问题。期间也遇到了一些小问题,在此记录一下。

实现邮件发送流程

利用django.core.mail模块下的send_email函数

from django.core.mail import send_email

配置settings.py实现邮件功能

QQ邮箱

# email配置
# IMAP/SMTP服务
EMAIL_HOST = "smtp.qq.com"
EMAIL_PORT = 25 # 大多都是25;若使用SSL,端口号465或587
EMAIL_HOST_USER = "" #发送邮箱
EMAIL_HOST_PASSWORD = "" # 使用的是QQ的授权码,不是你的密码
EMAILE_USE_TLS = True #一定要是True,否则发不了
EMAIL_FROM = "" #邮件发送人(邮件中所显示的发送人,和EMAIL_HOST_USER同)

这里之前你需要在邮箱设置中开启服务,例如QQ邮箱有两个服务:IMAP/SMTP服务、POP3/SMTP服务,随便开起一个就行。
关于这两个服务你可以查看下QQ邮箱的帮助,点击 IMAP、POP3介绍、区别及如何使用

EMAIL_HOST_PASSWORD 注意了是第三方登录的授权码,不是你的邮箱密码。服务设置下方有授权码获取方式,如图
这里写图片描述

如果是 POP3/SMTP服务

# qq POP3/SMTP 配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 110  # 或者 995是设置了 SSL 加密方式
EMAIL_HOST_USER = '' # 同上
EMAIL_HOST_PASSWORD = ''  # 同上
EMAIL_USE_TLS = True  # 同上
EMAIL_FROM = ‘’ # 同上

新浪邮箱
同样是开启服务,获取授权码

EMAIL_HOST = 'smtp.163.com'  # 新浪 smtp 服务器地址
EMAIL_PORT = 25  
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_FROM = ''
发送邮件函数send_email使用

send_email必填四个参数 Parameter 有 :subject 标题, message 主体, from_email 发送邮箱, recipient_list 邮件列表。recipient_list 是列表


# django自带的邮件发送模块
from django.core.mail import send_mail

from LMooc.settings import EMAIL_FROM

def send_register_email(email,send_type='register'):
    # 实例化EmailVerifyRecord对象,将邮件内容保存到数据库,便于查询激活链接是否存在
    # email_record = EmailVerifyRecord()
    # email_record.email = email
    # email_record.send_type = send_type
    # email_record.code = random_str(20) #生成长20的随机字符串用以构成激活链接(域名/active/随机code/)
    # 只要编写逻辑判断激活链接中的code是否有,就可以对应user的is_active=true
    # email_record.save()

    # 发送邮件功能如下
    # email_title = ""邮件标题
    # email_body = ""主体

    if send_type == "register":
        email_title = "你想写的内容"
        email_body = "你想写的内容"
        # Parameter:subject标题, message主体, from_email发送邮箱, recipient_list邮件列表,
        send_status = send_mail(email_title,email_body,EMAIL_FROM,[email,]) #返回真值,判断是否发送OK
        if send_status:
            # 你想怎样
            pass

另外发送邮件时遇到了个bug

django.db.utils.IntegrityError: UNIQUE constraint failed: user_userprofile.username

经过分析应该是在测试注册时,验证码多次输错,但是user对象已经保存过了(username是主键吧),再次输入保存该user时报错

增加判断存在逻辑

user = UserProfile()
...
user_exist = UserProfile.objects.filter(username=request.POST.get('email',''))
if user_exist:
    return render(request, 'register.html', {'msg': "用户已存在"})
 user.save()

猜你喜欢

转载自blog.csdn.net/lzw2016/article/details/82086224