一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

python + SendCloud 的邮箱认证的示例

时间:2016-08-24 编辑:简简单单 来源:一聚教程网


一、实验简介

一定有人好奇通过链接进行邮箱认证背后的原理是什么,事实上它的原理非常简。

本门课程将通过使用 SendCloud 提供的 API 来实现一个本地版的邮箱认证流程。

1.1 课程知识点

通过本次课程的学习,我们将接触到以下知识:

使用 SendCloud 的邮件 API 给指定邮箱发送邮件。
使用 MySQLdb 模块对 mysql 数据库进行操作。
使用 Requests 模块发送 HTTP POST 请求。
使用 Flask 框架实现简单的网页后台。
使用 hashlib 模块实现对指定字符串的加密处理。
使用 random 和 string 模块生成指定长度的随机字符串。
注意:本次课程主要使用语言是 Python 2.7,如果没学过 Python 的同学可以先移步到课程《Python快速教程》学习一些基础的 Python 语法,再回来继续进行本课程。

1.2 实验主要流程

介绍邮箱验证原理。
注册 SendCloud。
配置数据库 MySQL。
编写后台程序。
编写前端程序。
1.3 所需安装模块

需要安装 Flask, requests 和 MySQLdb 模块。

$ sudo pip install flask
$ sudo pip install requests
安装 MySQLdb 模块的过程要琐碎一些,流程如下:

首先使用 apt-get 更新软件包:

$ sudo apt-get update
$ sudo apt-get upgrade
温馨提示:软件包更新过程可能会有些慢,请耐心等待。

然后再安装包 libmysqlclient-dev ,否则会出现 'mysql_config not found' 的错误。

$ sudo apt-get install libmysqlclient-dev
之后再安装包 python-dev ,否则会出现 'Python.h not found' 的错误。

$ sudo apt-get install python-dev
以上软件包都安装好之后,就可以顺利安装 MySQLdb 模块包了。

$ sudo pip install mysql-python
注意:以上安装流程仅适用于实验楼虚拟机环境,若在个人电脑上进行配置,请按照个人实际情况选择安装。

1.4 效果截图

最终效果如下图,因为主要是为了学习 SendCloud 的邮件 API ,以效率为先,界面就做的很简单了,大家在学习过程中完全可以按照自己的想法去实现登录界面,然后截图到实验报告里。


填写所需信息之后点击提交。


数据库生成相应记录, verificatin_status 一栏数值为 0 表示还未验证。


在 SendCloud 的管理界面中查看邮件投递状态。


验证邮件一般在一分钟之内能送达邮箱,如果长时间没有收到提示可以查看一下垃圾邮件。


复制链接输入到实验楼虚拟机浏览器中进行访问,完成认证。


此时数据库中 verificaitn_status 的值也变为 1 ,这表明该用户邮件已进行验证。


二、邮箱验证基本原理

邮箱认证的原理其实很简单,基本流程如下:

用户在表单页面上填写了表单,点击提交的时候通过 HTTP POST 方法将这些信息发送给后台程序,后台接受这些信息并将其存储到数据库中。
由第一步我们已经获得了用户的一些基本信息,如用户名和邮箱等,然后就可以调用 SendCloud 的邮件 API 给指定用户邮箱发送验证邮件。验证的链接格式一般为 http://domain.com/verify?token=xxxxxx&authcode=xxxxxx ,其中 token是每个用户的唯一标识, authcode 是后台随机生成的验证码
当用户点击验证链接的时候,浏览器对该链接进行访问,后台程序可以通过 HTTP GET 方法获取到链接中 token 和 authcode 两个参数的值,然后利用这个值对数据库进行查询,如果查询得到结果,则邮件验证成功,将数据库中相应的 verificatin_status 的值进行更新为 True。
当然这只是一个验证的基本思想,验证过程的安全问题以及其多用户情况下数据库操作的互斥等问题都需要更深入进行考虑的,但是我们这门课主要是学习使用 SendCloud 的邮件 API,因此只需要实现一个这样的基本流程就行。

另外综上所述, token 只要满足唯一性就行了,可以是很简单的数字,比如 1,2,3... ,但是出于不希望被用户轻易看破某些规律从而了解到后台当中的某些信息,通常我们可以采用 md5算法 进行加密,将用户ID、用户名和时间戳作为算法输入的明文,把输出所得的密文作为 token ; 而 authcode 则是一串随机的字符串。

热门栏目