使用Python读取网易邮箱大师客户端的所有邮件

news2024/11/18 8:27:57

文章目录

  • 1. 前言
  • 2. 效果
  • 3. 探究过程
    • 3.1. 找到本地存储的数据库
    • 3.2. 使用Python读取数据库
      • 3.2.1. 代码
  • 4. 探究结果
    • 4.1. 函数
      • 4.1.1. 找到特定邮~箱的最新一条邮件
      • 4.1.2. 找到特定邮箱的最新一次验证码
      • 4.1.3. 通过命令行调用Python代码找到特定邮箱的最新的验证码

1. 前言

  • 现在绝大多数的网站注册的时候,都需要你提供手机或者邮箱的验证码。如果只是想要注册一两个账号,那么随便接一下验证码就可以了。但如果我们想要注册几十个账号,意味着你需要接受几十个验证码,这可能就是一个不小的灾难了。你首先得从几十个邮箱中找到这个特定的邮箱,点开它上面的收件箱,然后复制验证码…
  • 可能这么说一下,大家不觉得有啥,但实际操作起来真的是太烦人类了。于是我想着能不能解析一下网易邮箱大师上面的API来直接读取邮件内容或者验证码呢?于是便有了下面的项目。

2. 效果

  • 可以直接通过Python代码或者命令行程序直接读取网易邮箱大师的本地客户端邮件数据

3. 探究过程

  • 想要读取网易邮箱上的邮件要么是通过API进行调用,要么是通过客户端本地的数据进行逆向获取
  • 经过一番百度以及一番初步尝试,发现网易邮箱并没有给用户或者开发者提供程序API接口,那这是否就意味着我们想要用程序读取网易邮箱中的邮件呢做不到呢?其实并不然,就算没有上层的API,但我们可以读取底层的保存数据(只要他没有太高难度的加密就行),于是便有了下面的尝试

3.1. 找到本地存储的数据库

  • 那么首先需要找到网易邮箱大师的数据存储位置

  • 系统设置这里可以看到网易邮箱的数据存储位

  • 打开位置之后,是一系列以邮箱名命名的文件夹

  • 但是这里面的数据似乎是加密的数据库文件

  • 自己使用Navicat for sqlite打开发现也看不到里面的具体数据

  • 自己又换了一个db文件进行读取发现里面的数据似乎也并未完全加密,依稀可以看到一些邮件内容之前之所以显示是乱码,可能是转码的问题

  • 自己又查看了一下另外两个mail和search ,没想到邮件内容直接是在search/search_content中明文存储,看来今天的探索应该可以结束了

  • 我们来新发一份邮件,看能否实时更新

可能是自己添加的邮箱数量太多了,这里一直处于发送过程中

重启了一下网易邮箱客户端之后正常了

  • 刷新了一下Navicat for sqlite,然后看到了我们刚才测试的数据


    到这里证明我们的这个原理是行得通的了。那么下面就用程序来实现这个过程

3.2. 使用Python读取数据库

3.2.1. 代码

#导入sqllite3模块 
import sqlite3 
# 1.硬盘上创建连接 
con = sqlite3.connect('D:\MailMasterData\hengzhe19711121@163.com_1414\search.db') 
# 获取cursor对象 
cur = con.cursor() 
# 执行sql创建表 
sql = 'select * from Search_content' 
try: 
    cur.execute(sql) 
    # 获取所有数据 
    person_all = cur.fetchall() 
    # print(person_all) 
    # 遍历 
    for p in person_all: 
        print(p) 
except Exception as e: 
    print(e) 
    print('查询失败') 
finally: 
    # 关闭游标 
    cur.close() 
    # 关闭连接 
    con.close()

4. 探究结果

4.1. 函数

4.1.1. 找到特定邮~箱的最新一条邮件

def sqlite3_get_last_data(db_path,sql): 	 找到特定邮箱最后一次的数据
    # 导入sqllite3模块 
    import sqlite3 
    # 1.硬盘上创建连接 
    con = sqlite3.connect(db_path) 
    # 获取cursor对象 
    cur = con.cursor() 
    # 执行sql创建表 
 
    try: 
        cur.execute(sql) 
        # 获取所有数据 
 
        person_all = cur.fetchall() 
        last_data = person_all[-1] 
        # print(last_data) 
        # print("type(last_data):", type(last_data)) 
        # print("last_data:", ) 
        last_text = last_data[6] 
        return last_text 
    except Exception as e: 
        print(e) 
        print('查询失败') 
    finally: 
        # 关闭游标 
        cur.close() 
        # 关闭连接 
        con.close() 
 
 
email_path = 'hengzhe19711121@163.com' 
db_path = 'D:\MailMasterData\{}_1414\search.db'.format(email_path) 
sql = 'select * from Search_content'

4.1.2. 找到特定邮箱的最新一次验证码


代码

def find_spacial_email_last_Verification_Code(email):        #找到特定邮箱最后一次的验证码 
    def sqlite3_get_last_data(db_path, sql): 
        # 导入sqllite3模块 
        import sqlite3 
        # 1.硬盘上创建连接 
        con = sqlite3.connect(db_path) 
        # 获取cursor对象 
        cur = con.cursor() 
        # 执行sql创建表 
 
        try: 
            cur.execute(sql) 
            # 获取所有数据 
 
            person_all = cur.fetchall() 
            last_data = person_all[-1] 
            # print(last_data) 
            # print("type(last_data):", type(last_data)) 
            # print("last_data:", ) 
            last_text = last_data[6] 
            return last_text 
        except Exception as e: 
            print(e) 
            print('查询失败') 
        finally: 
            # 关闭游标 
            cur.close() 
            # 关闭连接 
            con.close() 
 
    def find_continuous_data(string):  # 查找字符串中连续的数字 
        import re 
        result = re.findall(r"\d{4,6}", string) 
        return result 
    def find_str_in_list_full_string(list_str, find_str):  # 查找字符串列表中包含某一个字符的完整字符 
        for index, str in enumerate(list_str): 
            if find_str in str: 
                break 
        return str 
    import os 
    mailbox_rootpath = 'D:\MailMasterData' 
    email_name_list = os.listdir(mailbox_rootpath) 
    email_dir_name = find_str_in_list_full_string(email_name_list, email) 
 
    db_path = '{}\{}\search.db'.format(mailbox_rootpath,email_dir_name) 
    sql = 'select * from Search_content' 
 
    last_text = sqlite3_get_last_data(db_path, sql) 
    print("last_text:", last_text) 
 
    result = find_continuous_data(last_text) 
    if (len(result) == 1): 
        print('找到了验证码') 
        print(result[0]) 
        pass 
 
    else: 
        from winsound import Beep 
        Beep(600, 1000) 
 
 
email = 'zaluanwu92iek@163.com' 
find_spacial_email_last_Verification_Code(email)

4.1.3. 通过命令行调用Python代码找到特定邮箱的最新的验证码

代码

def find_spacial_email_last_Verification_Code(email):        #找到特定邮箱最后一次的验证码 
    def sqlite3_get_last_data(db_path, sql):        #找到特定邮箱最后一次的数据 
        # 导入sqllite3模块 
        import sqlite3 
        # 1.硬盘上创建连接 
        con = sqlite3.connect(db_path) 
        # 获取cursor对象 
        cur = con.cursor() 
        # 执行sql创建表 
 
        try: 
            cur.execute(sql) 
            # 获取所有数据 
 
            person_all = cur.fetchall() 
            last_data = person_all[-1] 
            # print(last_data) 
            # print("type(last_data):", type(last_data)) 
            # print("last_data:", ) 
            last_text = last_data[6] 
            return last_text 
        except Exception as e: 
            print(e) 
            print('查询失败') 
        finally: 
            # 关闭游标 
            cur.close() 
            # 关闭连接 
            con.close() 
 
    def find_continuous_data(string):  # 查找字符串中连续的数字 
        import re 
        result = re.findall(r"\d{4,6}", string) 
        return result 
    def find_str_in_list_full_string(list_str, find_str):  # 查找字符串列表中包含某一个字符的完整字符 
        for index, str in enumerate(list_str): 
            if find_str in str: 
                break 
        return str 
    import os 
    mailbox_rootpath = 'D:\MailMasterData' 
    email_name_list = os.listdir(mailbox_rootpath) 
    email_dir_name = find_str_in_list_full_string(email_name_list, email) 
 
    db_path = '{}\{}\search.db'.format(mailbox_rootpath,email_dir_name) 
    sql = 'select * from Search_content' 
 
    last_text = sqlite3_get_last_data(db_path, sql) 
    # print("last_text:", last_text) 
 
    result = find_continuous_data(last_text) 
    if (len(result) == 1): 
        print('找到了验证码') 
        print(result[0]) 
        pass 
 
    else: 
        from winsound import Beep 
        Beep(600, 1000) 
 
 
 
 
 
import os 
import argparse 
parser = argparse.ArgumentParser(description='命令行传入参数') 
#type是要传入的参数的数据类型  help是该参数的提示信息 
parser.add_argument('--email', type=str, help='传入的邮箱') 
args = parser.parse_args() 
#获得传入的参数 
print(args.email) 
 
 
email = args.email 
find_spacial_email_last_Verification_Code(email)
  • python .\读取特定邮箱的数据库.py --email “hengzhe19711121@163.com”
    help是该参数的提示信息
    parser.add_argument(‘–email’, type=str, help=‘传入的邮箱’)
    args = parser.parse_args()
    #获得传入的参数
    print(args.email)

email = args.email
find_spacial_email_last_Verification_Code(email)


 - python .\读取特定邮箱的数据库.py --email "hengzhe19711121@163.com"
   ![](https://img-blog.csdnimg.cn/img_convert/e8f955000645d66aa6bf920a5738c8ae.png)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中科大FPGAOL使用方法

1.中科大的FPGA在线平台提供了一个非常好用的功能,将bit文件上传到远程FPGA开发板上加以功能验证,而且可以游客的身份访问。 Login - FPGA Onlinehttp://fpgaol.ustc.edu.cn/ 2.系统采用的硬件平台是赛灵思的Nexys4 DDR开发板(xc7a100t-csg324)&#x…

RocketMQ学习(五):分布式事务

一、分布式事务 事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C或Java)…

『Java课设』JavaSwing+MySQL实现医院智慧点餐系统

👨‍🎓作者简介:一位喜欢写作,计科专业大三菜鸟 🏡个人主页:starry陆离 如果文章有帮到你的话记得点赞👍收藏💗支持一下哦 『Java课设』JavaSwingMySQL实现医院智慧点餐系统1.功能介…

设计模式:责任链模式的应用场景及源码应用

一、概述 责任链模式(Chain of Responsibility Pattern)是将链中每一个节点看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个…

AI代码实时生成工具teleportHQ

来源:投稿 作者:ΔU 编辑:学姐 今天给大家分享一款AI代码实时生成工具teleportHQ,teleportHQ本质上是一个低代码开发平台,但是首次将计算机视觉应用到低代码开发上,teleportHQ允许用户通过熟悉的设计工具界…

JSX的基本使用

JSX的基本使用1.JSX简介1.1 JSX是react的核心内容1.2 createElement的问题1.3 createElement的问题1.4 JSX注意点2 使用prettier插件格式化react代码3 JSX中嵌入JavaScript表达式4 条件渲染5 列表渲染6 样式处理1.JSX简介 JSX是JavaScript XML的简写,表示了在Javas…

Linux 下 rpm管理包

一、 .rpm的文件格式 以.rpm格式发布的软件里面封装的都是经过编译过的二进制形式的软件,可以直接安装。.rpm格式的文件又称为rpm软件包,简称rpm包。 二、 rpm文件名的格式 三、 rpm命令的使用与软件的安装 Linux中安装rpm软件包有3种方法&#xff1…

新手小白入门之泛型

一、背景 JAVA推出泛型以前,程序员可以构建一个元素类型为Object的集合,该集合能够存储任意的数据类型对象,而在使用该集合的过程中,需要程序员明确知道存储每个元素的数据类型,否则很容易引发ClassCastException异常…

嵌入式书籍推荐

现在嵌入式软件工程师的数量需求方面是越来越旺盛,但是在人才供给方面却出现了缺口,个大公司对于嵌入式开发工程师职位出现供不应求的局面,正是有很多人看到这了大好的环境,纷纷选择开始学习嵌入式开发,学习的方式也是…

第十六讲:神州交换机访问控制列表的配置

访问控制列表ACL(Access Control Lists)数据定义工具,基于用户自行定义的数据的参数区分不同的数据流,是在交换机和路由器上经常采用的一种防火墙技术,它可以对经过网络设备的数据包根据一定规则进行过滤。它有以下一些…

CloudFlare 的路由拦截

因为腾讯需要对网站进行校验。 校验的方法是使用一个 tencent18250331897192314951.txt 文件,在这个文件中放入腾讯指定的内容。 我们使用的是 Discourse 这个社区系统,这个社区系统对这种问题的响应比较头痛。 解决方案 解决方案就是从域名服务商哪…

NX 系统环境 python3.6 部署 PPOCR 报错记录

NX 系统环境 python3.6 部署 PPOCR 报错记录 前言(这环境,就硬配) 问:为什么要用系统环境,不用 conda?答:因为 conda 的 ARM 端 python 最低只支持 3.7,而 paddlepaddle 提供的 Je…

c#入门-系统特性

特性 特性可以给成员添加元数据。这有两个作用: 这是一个元数据,可以利用反射获取到如果编译器认识这个特性,那么可以与特性进行交互。 第一点涉及到反射的内容,先略过。 而第二点要求的编译器认实这个特性,就仅限于…

在Linux上安装和使用ZFS

真正的文件系统终极者 ZFS 文件系统的英文名称为 ZettabyteFileSystem,也叫动态文件系统,是第一个 128 位文件系统。最初是由 Sun 公司为 Solaris10 操作系统开发的文件系统。作为 OpenSolaris 开源计划的一部分,ZFS 于 2005 年 11 月发布&a…

《MySQL 8从零开始学(视频教学版)》简介

#好书推荐##好书奇遇季#《MySQL 8从零开始学(视频教学版)》,定价89元,京东当当天猫都有发售。本书面向MySQL 8数据库初学者,是MySQL数据库畅销入门书。 配套资源 本书配套400个实例和14个综合案例的源码、PPT课件、近2…

/etc/passwd详解

目录 一、统一性和标准化 二、功能和权限 三、内容详解 1、/etc/passwd为按行记录的文本文件,每行记录一个用户的信息 2、每行信息内容 四、参考文献 一、统一性和标准化 各版本的Linux操作系统的/etc/passwd功能和内容格式基本相同。 (1&#xf…

Spark环境搭建(Stand alone模式)

Sand alone 架构 Standalone模式是Spark自带的一种集群模式,不同于前面本地模式启动多个进程来模拟集群的环境,Standalone模式是真实地在多个机器之间搭建Spark集群的环境,完全可以利用该模式搭建多机器集群,用于实际的大数据处理…

红黑树的迭代器红黑树与AVL树的比较

🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸 文章目录一、红黑树泛型实现map,set对多出来的模板参数的解释二、map和set对红黑树迭代器的封装①迭代器operator②operator--三、红黑树…

Web3中文|全球首个中华武术收藏级卡牌系列发布,传武文化的未来在元宇宙?

谈及中华武术的传承与发展,大家首先能想到什么?小说、电影、动画、游戏……等等,都是曾经的载体。作为中华文化极其重要的一部分,武术是国人独有的标签,太多经典作品珠玉在前,如今武术的传承,需…

【JavaScript】跟着pink学习第二天部分案例

1.猜数字游戏 三次机会&#xff0c;猜1~50之间的一个整数 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"vi…