Django集成邮件发送功能
由于之前的一些情况,为了防止有人用无效邮箱进行注册,所以这次在报名时添加了邮箱发送以及验证功能,用于验证邮箱是否有效,当然了,在强大的Django之下,集成邮件功能并不难,接下来我们看一下如何有效的在Django中集成邮件功能吧
1.创建项目 (这里我就不赘述了,之前专门谢了一篇文章用于记录如何创建一个新的Django项目,传送门)
2.在settings.py中配置与邮件相关的配置
代码如下:1
2
3
4
5EMAIL_HOST = 'smtp.qq.com' #邮箱服务商
EMAIL_PORT = 587 #端口
EMAIL_HOST_USER = 'user'
EMAIL_HOST_PASSWORD = 'password'
DEFAULT_FROM_EMAIL = 'your Email Address'
只需要上面短短几行,就ok了,是不是很简单
3.邮件发送相关函数
models.py中添加邮箱验证相关类1
2
3
4
5
6
7
8
9
10
11
12
class EmailVerifyRecord(models.Model):
# 验证码
code = models.CharField(max_length=20, verbose_name=u"验证码")
email = models.EmailField(max_length=50, verbose_name=u"邮箱")
# 包含注册验证和找回验证
send_time = models.DateTimeField(verbose_name=u"发送时间", default=datetime.now)
class Meta:
verbose_name = u"邮箱验证码"
verbose_name_plural = verbose_name
def __str__(self):
return self.email
验证码随机数生成函数1
2
3
4
5
6
7
8
9# 生成随机字符串用来验证邮箱
def random_str(randomlength=8):
str = ''
chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
length = len(chars) - 1
random = Random()
for i in range(randomlength):
str += chars[random.randint(0, length)]
return str
邮箱发送函数1
2
3
4
5
6
7
8
9
10
11
12
13
14def sendEmail(email):
email_record = EmailVerifyRecord()
# 将给用户发的信息保存在数据库中
code = random_str(16) #这个是生成验证连接的函数
email_record.code = code
email_record.email = email
email_record.save()
# 初始化为空
email_title = ""
email_body = ""
email_title = "注册激活链接"
email_body = " 同学你好,欢迎参加本次计算机基础知识大赛,"+"请点击下面的链接激活你的账号:http://127.0.0.1:8000/users/active/{0}".format(code)
# 发送邮件
send_status = send_mail(email_title, email_body, DEFAULT_FROM_EMAIL, [email])
4.身份验证
身份验证的url1
url(r'^active/(?P<active_code>.*)/$', views.user_active, name="user_active"), # 提取出active后的所有字符赋给active_code
身份验证相关函数(通过url中传输的active_code,来判断是否验证成功)1
2
3
4
5
6
7
8
9
10
11
12
13def user_active(request,active_code):
print("可以1")
all_records = EmailVerifyRecord.objects.filter(code=active_code)
if all_records:
for record in all_records:
email = record.email
# 通过邮箱查找到对应的用户
user = models.User.objects.get(email=email)
# 激活用户
user.is_active = True
user.save()
print("可以")
print("不行")
5.总结
通过上面的四步就可以把邮箱功能加入到Django项目中,为用户注册,密码找回等功能提供了一个验证本人身份的好方式
项目代码链接在这里传送门