Django中内置了邮件发送功能,被定义在django.core.mail模块中。发送邮件需要使用SMTP服务器,常用的免费服务器有:163、126、QQ,下面以163邮件为例。
1)注册163邮箱,登录后设置。
2)在新页面中点击“客户端授权密码”,勾选“开启”,弹出新窗口填写手机验证码。
3)填写授权码。
4)提示开启成功。
5)打开项目目录中的settings.py文件,点击下图配置。
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = 25
#发送邮件的邮箱
EMAIL_HOST_USER = '邮箱账号' # 需要修改这里
#在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = '授权密码' # 需要设置
#收件人看到的发件人
EMAIL_FROM = '发件人<%s>' % EMAIL_HOST_USER # 需要填写,发件人自定义
6)在响应的应用的views.py文件中新建视图send。
# 发邮件
subject = "天天生鲜欢迎信息"
message = ''
html_message = '<h1>%s, 欢迎您成为天天生鲜注册会员</h1> \
请点击下面的链接激活您的账号<br/> \
<a href="http:127.0.0.1:8000/user/active/%s"> \
http:127.0.0.1:8000/user/active/%s</a>' % (username, token, token)
send = settings.EMAIL_FROM
receiver = [email]
send_mail(subject, message, send, receiver, html_message=html_message)
7)在响应的应用的urls.py文件中配置
url(r"^active/(?P<token>.*)$", ActiveView.as_view(), name="active"),
8)设置响应的点击发送后的链接对应的视图来处理事务:
class ActiveView(View):
"""用户激活"""
def get(self, request, token):
# 用户激活
# 进行解密, 获取激活信息
serializer = Serializer(settings.SECRET_KEY, 3600)
try:
info = serializer.loads(token)
user_id = info["confirm"]
# 根据id获取用户信息
user = User.objects.get(id=user_id)
user.is_active = 1
user.save()
# 跳转到登录页面
return redirect(reverse("user:login"))
except SignatureExpired as e:
# 激活链接已经过期
return HttpResponse("激活链接已过期")