python应用POP3、IMAP、SMTP 协议,获取邮箱验证码

POP3和IMAP是邮件相关的协议,IMAP是比POP3更高级一点的协议,实现了了客户端和服务端的交互;邮件协议在实际工作中的应用较为广泛。

POP3
它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上

v2-78083983667898d47dfe4e1e599addc8_hd.j



SMTP
SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。 
SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。 
增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

IMAP
IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。

v2-b96ae558ea9280fb6f200d755f97059e_hd.j


在python中支持POP3协议,也支持IMAP协议,但是IMAP因为其交互性逐渐取代了POP3成为了邮件服务器与客户端的交互,下面主要使用IMAP协议来获取邮件正文、附件、移动或删除邮件。
import re
import email
from imapclient import IMAPClient
import traceback


class EmailRead(object):
"""实现读取邮件正文、读取附件功能、移动邮件、删除邮件"""

def __init__(self, user, passwd, index_file, re_list, server_adderss, port, move_file=None):
"""

:param user: 登陆用户名
:param passwd: 登陆密码
:param index_file: 需要查询的邮件文件夹
:param re_list: 需要查找的邮件主题满足的正则表达式
:param move_file: 将邮件移动到该文件夹
:param server_adderss: 邮件服务器地址
:param port: 邮件服务器IMAP协议端口
"""
self.server_address = server_adderss
self.user = user
self.password = passwd
self.index_file = index_file
self.move_file = move_file
self.re_list = re_list
self.server = None
self.port = port
self.item = None
self.file_type_list = ['image/jpeg', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']

def reade_email(self):
"""
查找邮件并根据附件类型下载附件
:return: 
"""
self.server = IMAPClient(self.server_address, port=993, ssl=True)
self.server.login(self.user, self.password)
self.server.select_folder(self.index_file, readonly=False)
result = self.server.search(['all']) # 获取所有邮件

if result:
self.messages = self.server.fetch(result, ['BODY.PEEK[]'])
for message_id, message in self.messages.items():
e = email.message_from_string(message[b'BODY[]'].decode())
# 生成Message类型 e
try:
subject = str(email.header.make_header(
email.header.decode_header(e['SUBJECT']))) # 解码subject
except:
subject = e['SUBJECT']

"""正则匹配标题中的 MSO """
if self.subject_re(subject):
"""获取附件和正文"""
for part in e.walk():
filename = part.get_filename()
content_type = part.get_content_type()
con = part.get_payload(decode=False)
if not filename and content_type == 'text/html':
if isinstance(con, bytes):
con = part.get_payload(decode=True).decode()
elif filename and content_type in self.file_type_list:
con = part.get_payload(decode=True)
with open(filename, 'wb') as f:
f.write(con)
f.close()
else:
# list返回附件对象作用类似于e
pass

def move_email(self, *id):
"""邮件移动和删除功能:传入的move_file是None则不移动只删除"""
messages = self.server.fetch(list(id), ['BODY.PEEK[]'])
if None!= self.move_file:
self.server.copy(messages, self.move_file) # move
self.server.delete_messages(messages) # delete
self.server.expunge() # save delete

def subject_re(self, subject):
"""用于匹配主题正则表达式"""
for i in self.re_list:
mso_re = re.search(i, subject)
if mso_re:
return True
else:
pass
return False

defclose(self):

self.server.logout()

该系统也可以用于解决部分邮件验证的,可以直接从邮件获取到验证码的正文,并进一步提取。

v2-7660a7ef312c282e70bc1aae6919624a_hd.j

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

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

相关文章

固件中启用的虚拟化否_哪些固件或硬件机制可启用强制关机?

固件中启用的虚拟化否At one time or another, all of us have had to force our computers to shut down by pushing and holding the power button down until they powered off. Is this mechanism hardware-based, firmware-based, or both? Today’s SuperUser Q&A p…

.NET 云原生架构师训练营(基于 OP Storming 和 Actor 的大型分布式架构二)--学习笔记...

▲ 点击上方“DotNet NB”关注公众号回复“1”获取开发者路线图学习分享 丨作者 / 郑 子 铭 这是DotNet NB 公众号的第202篇原创文章目录为什么我们用 OrleansDapr VS OrleansActor 模型Orleans 的核心概念结合 OP Storming 的实践结合 OP Storming 的实践业务模型设计模型代…

PHP 多维数组转json对象

PHP 多维数组转json对象 php 数组转json对象&#xff0c;可能大家都知道要用json_encode,但是转换出来的格式多有不同&#xff0c;此处做个小小的记录&#xff01; 1. 一维数组转json对象 <?php $arr_1 [one, two, three]; var_dump(json_encode($arr_1)); $arr_2 [0 >…

微软文本检索_如何在Microsoft Word中引用其他文档中的文本

微软文本检索You probably have some text that you type often in your Word documents, such as addresses. Instead of retyping this text every time you need it, you can put this common text into one Word document and reference it in other documents–it’ll eve…

Hadoop-Flume-类比吸尘器图解

2019独角兽企业重金招聘Python工程师标准>>> 这是我自己理解Hadoop-Flume的方式 转载于:https://my.oschina.net/u/3697442/blog/1560613

ChatGPT 之后,再玩玩 Stable-Diffusion

前些天体验的 ChatGPT 主要用来进行文本方面的处理&#xff0c;那么图片生成有没有这样的 AI 工具 呢&#xff1f;答案是肯定的。例如&#xff1a;和菜头公众号的题图和文章中的插图大多都是使用 Stable-Diffusion 的 AI 图形生成工具创作的。顺着 Stable-Diffusion 搜索了下相…

渗透测试入门DVWA 教程1:环境搭建

首先欢迎新萌入坑。哈哈。你可能抱着好奇心或者疑问。DVWA 是个啥&#xff1f; DVWA是一款渗透测试的演练系统&#xff0c;在圈子里是很出名的。如果你需要入门&#xff0c;并且找不到合适的靶机&#xff0c;那我就推荐你用DVWA。 我们通常将演练系统称为靶机&#xff0c;下面请…

移动硬盘改台式机硬盘_如何在台式机或移动设备上离线使用Google云端硬盘

移动硬盘改台式机硬盘If there’s any drawback to using cloud-based services for all your productivity and organization needs, it’s that if you can’t get an Internet connection, you’re basically out of luck. 如果使用基于云的服务来满足您的所有生产力和组织需…

你可能不知道的容器镜像安全实践

大家好&#xff0c;我是Edison。最近在公司搭建CI流水线&#xff0c;涉及到容器镜像安全的话题&#xff0c;形成了一个笔记&#xff0c;分享与你&#xff0c;也希望我们都能够提高对安全的重视。时代背景近年来应用程序逐步广泛运行在容器内&#xff0c;容器的采用率也是逐年上…

【Win 10 应用开发】UI Composition 札记(二):基本构件

在上一篇中&#xff0c;老周用一个示例&#xff0c;演示了框架视图的创建过程&#xff0c;在本篇中&#xff0c;老周将给大伙伴们说一下 Composition 构建 UI 的一些“零件”。 UI Composition 有一个核心类——对&#xff0c;就是 Compositor 类&#xff0c;它是总生产车间&am…

禁用内置键盘_如何禁用Windows 10的所有内置广告

禁用内置键盘Windows 10 has a lot of built-in advertising. This isn’t just about the free upgrade offer: Even if you purchase a new PC that comes with a Windows 10 license or spend $200 for a copy of Windows 10 Professional, you’ll see ads in your operati…

震惊!顶着 39.5℃高烧 ,我和这哥俩都聊了些啥?

这是头哥侃码的第271篇原创上周三&#xff0c;我邀请了两位嘉宾进入直播间&#xff0c;即便自己顶着 39.5 度的高烧&#xff0c;还是强打精神与这哥俩聊了俩小时。相信关注我的朋友们都知道&#xff0c;我是头哥侃码的主理人&#xff0c;同时也是上海TGO上海分会董事会成员。赵…

在Windows Mobile模拟器(Emulator)建立网络连接

因为想使用Windows Mobile Emulator进行网络通信程序的测试&#xff0c;所以找方法配置Emulator的网络连接。在网上找了一些文章&#xff0c;很多都说需要安装Virtual PC 2007. 例如下面的文章Enable Network Connection Windows Mobile 6 Emulator 如果需要 Virtual PC 2007 可…

api游戏编程鼠标选择拖动_如何选择合适的游戏鼠标

api游戏编程鼠标选择拖动You don’t need a gaming mouse to play PC games—just about any mouse with two buttons and a wheel will play anything you want it to. But that’s no reason to deny yourself the wonderful variety of gaming mouse designs on the market.…

iOS - 上架的APP 生成二维码下载

1.首先打开苹果App Store商店进入到里面&#xff0c;找到需要打开链接地址的应用程序&#xff0c;例如&#xff1a;百度。2. 在App Store商店里面先点击一下应用程序图标&#xff0c;再按一下…分享按钮。 3. 接着选择分享APP&#xff0c;再点击拷贝链接地址&#xff0c;将应用…

Rsa2加密报错java.security.spec.InvalidKeySpecException的解决办法

最近在和支付宝支付做个对接&#xff0c;Java项目中用到了RSA2进行加解密&#xff0c;在加密过程中遇到了错误&#xff1a; java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid parse error, not a sequence 代码执行到这句…

浅析领域驱动设计

1.概要DDD&#xff08;Domain-driven design&#xff0c;模型驱动设计&#xff09;是一种软件设计的指导思想&#xff0c;而非固定的一套公式化开发模板&#xff08;这样就会导致网络上出现各种基于自己或业务上的理解而产出的DDD落地的实现&#xff0c;会让很想学习的开发者迷…

Delphi实现的透明阴影以及蒙版效果菜单

QQ2010的皮肤控件目前实现了一部分&#xff0c;看到有些软件的菜单&#xff0c;都有阴影&#xff0c;透明等效果&#xff0c;于是开始重新实现菜单控件&#xff0c;QQ2009版的菜单控件&#xff0c;是自己从TComponent继承了完全模拟实现的一个菜单&#xff0c;虽然实现了菜单控…

cortana搜索框_如何在Windows 10任务栏上隐藏Cortana搜索框

cortana搜索框One of the most talked about features in the latest version of Windows 10 was the Cortana personal assistant that is integrated directly into the taskbar. But what if you don’t want to waste all that taskbar space? 最新版本的Windows 10中最受…

Kotlin 基础 - 数据类型

一、Boolean 类型 Boolean 值有两个值&#xff0c;分别为 true 或 false。多数情况下&#xff0c;Kotlin 中的 Boolean 相当于 Java 中的基本类型 boolean&#xff0c;只有在必要的情况下才会装箱成为 Java 中的装箱类型 Boolean。这一切都是交由编译器来完成&#xff0c;我们无…