0%

Django集成邮件发送功能

Django集成邮件发送功能

由于之前的一些情况,为了防止有人用无效邮箱进行注册,所以这次在报名时添加了邮箱发送以及验证功能,用于验证邮箱是否有效,当然了,在强大的Django之下,集成邮件功能并不难,接下来我们看一下如何有效的在Django中集成邮件功能吧


1.创建项目 (这里我就不赘述了,之前专门谢了一篇文章用于记录如何创建一个新的Django项目,传送门


2.在settings.py中配置与邮件相关的配置

代码如下:

1
2
3
4
5
EMAIL_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
14
def 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.身份验证

身份验证的url

1
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
13
def 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项目中,为用户注册,密码找回等功能提供了一个验证本人身份的好方式
项目代码链接在这里传送门