上一篇的教程中我向大家介绍了如何识别验证码,向自己的邮箱发送邮件等一系列的车技,在这一次的教程中我将以微信小程序注册的Step2,向大家介绍以下内容:

  • 如何根据IMAP协议轮询读取邮箱账户中的邮件
  • 如何模拟请求激活自己的邮箱账户

根据IMAP协议轮询读取邮箱账户中的邮件

IMAP协议简介

IMAP(Internet Mail Access Protocol,Internet邮件访问协议)以前称作交互邮件访问协议(Interactive Mail Access Protocol)。IMAP是斯坦福大学在1986年开发的一种邮件获取协议。它的主要作用是邮件客户端(例如MS Outlook Express)可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。当前的权威定义是RFC3501。IMAP协议运行在TCP/IP协议之上,使用的端口是143。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。

以上内容节选自百度百科,更多有关IMAP协议的细节请自行查阅相关资料,总之我们需要明确的是:我们可以使用IMAP协议去读取自己的邮箱中的邮件

Python IMAPClient库简介

官方文档传送门!!!

IMAPClient的底层基于Python标准库imaplib,但提供了一组更易用更Pythonic更完整的API

IMAPClient相关概念

声明:以下内容皆为个人于官方IMAPClient库中了解到并结合个人理解,并不保证绝对的权威和正确,如有勘误,请及时指出

  1. Message Identifiers

    【消息标识】

    官方解释如下:
    在IMAP邮件传输协议中,每一封邮件信息被整数来定义,这些消息的数字id对于给定的邮件文件夹而言是一定的

    你可以将这里的消息的标识理解为数据库表中的自增主键ID

  2. Message Flags

    【消息标记】

    解释如下:

    对于收件箱中的邮件总是存在一些状态的变化(最近接受、已读、已删除、草稿、已回复等),这些用于描述邮件的读取或收发状态

  3. Folder Name

    【文件夹名】

    解释如下:

    个人登录邮箱时总是会有一些“容器”用于存放我们的分类邮件,如:收件箱,垃圾箱,已删除等,有图有真相

    文件夹截图

IMAPClient库的使用

关于IMAPClient的库的使用,不是本文的重点,建议阅读官方文档,理清概念,总结要点,查看demo,自己编写demo亲试之~博主会将所有代码上传至github中,有需要的童鞋可以自行查看,下面po一个IMAP协议读取邮件的demo截图吧

IMAPClient使用demo

激活你的小程序邮箱账户

在你的可以成功读取自己的激活邮件内容之后,接下来需要干的自然便是激活邮件内容中的链接。这一过程我们仍然可以使用requests库去完成

需要指出的是邮件内容中激活链接的获取,需要自己去解析html信息中的内容,你可以使用任何解析技术手段(XPath,BeautifulSoup)去处理,想必对于成功获取到邮件内容的你,这一定不是什么难题了~

1. 激活过程分析

当你在浏览器中访问邮件中的链接时,最终会被重定向到一个这样的一个地址

1
https://mp.weixin.qq.com/wxopen/wacontractorpage?action=step3&lang=zh_CN&token=532810804

上述地址中的token参数值非常重要,你可以认为这是微信小程序端serve返回的此次激活标识,并且这个参数的值会在后续的表单请求中使用到,因此需要全局妥善保存~

事实上,当你访问过邮件中的激活链接后,再次访问时,链接便已失效,将无法再得到任何正常响应。因此所谓的邮件激活你可以简单理解为直接向邮件内容中的地址发送请求

2. 代码实战

requests库对于重定向过程有一个默认的策略,如果你希望自己定义请求的过程中的全部行为,可以禁用它

1
2
3
4
5
6
7
8
9
10
11
from urllib.parse import parse_qs
import requests
session = requests.Session()

def get_token(activate_url):
rsp1 = session.get(activate_url, allow_redirects=False)
real_url = rsp1.headers['location']
print('real_url: ', real_url)
pr = parse_qs(real_url)
token = pr['token'][0]
print('token: ', token)

是的,你没看错,只需要简单几行代码就可以实现微信小程序的激活邮件激活并拿到全局请求token值了

结语

好啦,今天的第二部分教程就到此为止啦~其实第三部分教程会依赖第二部分教程中的结果,但考虑到阅读量和学习量,将这部分内容分开来介绍了。

在下一次教程中我将带给大家如下内容:

  • 模拟生成中国大陆居民身份证号(请勿用于非法目的!)
  • 向微信小程序serve申请获取短信验证码(请勿用于刷tencent的短信or短信轰炸他人!)
  • 基于IMAP协议轮询邮件列表
  • 异步通知:确认用户的微信个人信息和小程序申请中的填写的个人信息匹配一致

如果你喜欢我的文章,可以考虑buy me a cup of coffie

赞赏

留言

⬆︎TOP