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

POP3

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

image

SMTP

SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。

SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。

增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

IMAP

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

image

在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

def**close**(self):

self.server.logout()

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

image

python写邮箱验证工具_python应用POP3、IMAP、SMTP 协议,获取邮箱验证码相关推荐

  1. exchange无法收发邮件_Python使用POP3和SMTP协议收发邮件!

    先来了解一下收/发邮件有哪些协议: SMTP协议 SMTP(Simple Mail Transfer Protocol),即简单邮件传输协议.相当于中转站,将邮件发送到客户端. POP3协议 POP3 ...

  2. 移动邮箱(@139.com):启用IMAP/SMTP服务+获取授权码

    移动邮箱(@139.com)依托于国内三大运营商之一的中国移动(CMCC),可使用手机号直接登录. 与阿里云邮箱(@alimail.com)/电信邮箱等相比,移动邮箱无法直接使用登录密码在第三方邮箱( ...

  3. 可以用python写的etl工具_python ETL工具 pyetl

    pyetl是一个纯python开发的ETL框架, 相比sqoop, datax 之类的ETL工具,pyetl可以对每个字段添加udf函数,使得数据转换过程更加灵活,相比专业ETL工具pyetl更轻量, ...

  4. 怎么看python环境变量配置是否好了验证图片_python 的 tesserocr 模块安装与获取图片验证码...

    OCR,即Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程.对于图形验证码来说,它们都是一些不规则的字符,这些字符确实 ...

  5. python编写测试工具-python 写一个性能测试工具(一)

    国庆重新学习了一下go的gin高性能测试框架. 用JMeter来测试gin与flask接口的性能,差别很大. 为什么我自己不尝试写一个性能工具,性能工具的核心就是 并发 和 请求. 请求可以选择Pyt ...

  6. python运维小工具_Python实现跨平台运维小神器

    (本文已不再同步更新,最新代码请移步github) 这阵子一直在学python,碰巧最近想把线上服务器环境做一些规范化/统一化,于是便萌生了用python写一个小工具的冲动.就功能方面来说,基本上是在 ...

  7. 【python小项目】用python写一个小工具——番茄钟

    用python写一个小工具--番茄钟 最近听到朋友说在用番茄钟,有点兴趣也想下载一个来用用,后面仔细一想这玩意做起来也不难,索性自己顺手写一个算了,在这里也分享给大家了 一.功能简述 番茄钟即番茄工作 ...

  8. 163/qq邮箱设置POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务

    很多邮箱第三方使用POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务登录都是需要授权码的,这个授权码就是第三方登录时候的密码.下面已qq邮箱和163邮箱为例子讲解下. q ...

  9. QQ邮箱第三方POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务授权码

    参考QQ邮箱: 什么是授权码,它又是如何设置? 设置入口: 选择 账户 下拉找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务就好了.我这边已经开通,开通流程挺简单的 ...

  10. c#中邮件收发处理(POP3,IMAP,SMTP)的实现方法

    对于还没用动手写过程序的人来说,动手是必须的,只有自己动手写写程序才能在锻炼中不断提高,今天和大家一起探讨一个程序c#中邮件收发处理(POP3,IMAP,SMTP)的实现方法,程序有点长,希望大家坚持 ...

最新文章

  1. gdb图形化调试工具总结
  2. [bzoj 4869] [六省联考2017] 相逢是问候
  3. 【拔刀吧少年】之sed编辑器
  4. 阅读分析下列html,阅读下列说明和 HTML 文本,分析其中嵌入的 JavaScript. 脚本..._考试资料网...
  5. AI:恐怖谷理论的陷阱
  6. 18.用两个栈实现队列[2StacksToImplementQueue]
  7. ElasticSearch和solr的对比
  8. 学会用Go解析复杂JSON的思路
  9. Cocos Creator JS 获取当前日期与时间
  10. ajax响应码,ajax处理响应(三)(示例代码)
  11. MYSQL中group_concat有长度限制!默认1024(转载)
  12. pytreebank︱情感分析可视化——情感结构树
  13. mysql双节点部署_MariaDB GALERA 集群双节点部署
  14. 点歌机终端服务器停止服务怎么办,服务器版点歌系统常见问题处理
  15. 大型仓库进销存管理系统php源代码,多仓版进销存管理系统PHP源码ERP仓库管理系统php网络版进销存源码...
  16. google浏览器网页背景颜色修改
  17. ajax接收反参时,接收到[object XMLDocument]时的处理方法
  18. CoAP协议的常用开源代码实现
  19. 使用prometheus监控服务器主机
  20. 【实习日记】Linux-VM15-Ubuntu18.04 + 运行selenium实现文件下载

热门文章

  1. 聊聊mac系统的 secoclient和iTerm2
  2. 工业数据存储数据库选型比较
  3. [ATL/WTL]_[Gdiplus]_[关于混用GDI和GDI+(GDIPlus)导致显示不正常的解决方案]
  4. 【交换机在江湖】第十一章 接口配置锦囊妙计之三----端口自协商
  5. 无耗传输线 matlab,基于Matlab模块化的微波工程Smith圆图辅助教学方法
  6. CoDeSys连接触摸屏
  7. cass怎么多级放坡_cass土方计算考虑放坡
  8. 最新信恒第四方支付系统源码+服务器直接打包
  9. 一种基于复制粘贴的cam350邮票孔拼版教程(三) 导出钻孔文件
  10. 运筹说 第41期 | 运输问题硬核知识点梳理—表上作业法求解运输问题