业务场景
- 当用户在自己的用户中心,填写自己的邮箱的时候。 后台保存起来是很简单的。 但是为了防止恶意的操作,比如 填写的不是自己的邮箱? 填写的根本不是一个邮箱? 填写的邮箱根本不可用?
- 针对这些问题,当用户填写邮箱后, 我们会向用户邮箱发送一封 激活邮件,只有用户点击 激活邮件的链接,才能激活邮件。
怎么发送邮件?
-
有两种常用的发送邮件的函数。send_mail(),send_mass_mail()用于处理大批量的邮件任务,我们选择使用 send_mail()
-
可以看到主要参数很明显。
- subject :邮件标题
- message:普通文本,邮件内容
- from_email : 发件人
- recipient_list : 收件人列表
- html_message : 多媒体邮件正文(可以使html字符串,样式更好看)
谁来最终发送邮件?
- smtp服務器,像 QQ邮箱,163邮箱,我们需要使用他们帮助发送邮件
- 我们还是以QQ邮箱为例,都是一样的。为什么说 还是以 呢? 因为我不想重复去写了,请看之前的笔记:django如何发送邮件
- 补充一些
- pop3 : 发邮件的协议
- smtp : 收邮件的协议
- 163邮箱的也是一样的。,我们进入163邮箱,点击 设置,点击协议
之后同样的验证方法,开启 pop3和 smtp服务协议即可。
怎么django怎么使用它?(补充上面链接中的)
- 再次查看关于django发送文件的文档
在这里就可以进行配置了! 看到这样是不是对 上面链接中的字段由来更加深刻了。
开始发送邮件:
邮件的内容?
- 邮件的内容,就是用来验证用户邮箱激活的链接。用户点击它,即可激活邮箱。
- 激活链接的构造
- 激活链接很简单,我们可以随意自定义。 关键是 他后面需要携带的参数 token,里面应该包含一些信息,让我们知道是哪个用户的邮箱激活: 可以是用户id。不过是需要加密的,要不然别人可以随意构造链接,去修改,激活 其他人的邮箱
token = dumps({'user_id':user.id}, constants.EMAIL_ACTIVE_EXPIRES) # 显示的是 b'' 类型数据, 也就是 bytes类型数据,我们把它转换为字符串
# token = token.decode() # 默认按照utf-8进行解码,变成字符串
token_url = settings.EMAIL_VERIFY_URL + '?token=' + token
# 使用前面讲过的 异步celery发送邮件。这里不再讲解
send_active_email.delay(email, username, token_url )
下面我们还需要再 写一个邮箱激活的视图吗,去处理这个 激活链接即可~
- 另外注意授权码是会过期的,提示你这个错误
smtplib.SMTPAuthenticationError: (535, b'Login Fail. Please enter your authorization code to login. More information in http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256')
点击它给的链接,就是教你如何进行 授权码验证
over!