python自动化操作邮箱

简介: python自动化操作邮箱

POP3、IMAP、SMTP,CardDAV、CalDAV协议特点

POP3

POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

SMTP

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

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

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

IMAP

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

POP3、IMAP、SMTP可以分为两类:

从服务器邮件获取协议:POP3、IMAP

从客户端发送邮件协议:SMTP

SSL(Secure Sockets Layer)

安全套接层,及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密,客户与服务器应用之间的通信不被攻击者窃听。

CardDAV、CalDAV

一种通讯录同步的开放协议。使用 CardDAV 同步的通讯录可以编辑、修改或者删除,并且你在手机上的这些操作也同样会和服务器同步,并同时同步到你的其他设备上。

CalDAV 是一种用于存取网络行事历及行程或会议排程的client/server 协议。

IMAP和POP3两个邮件接收协议的区别:

POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。

而IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。

同时,IMAP像POP3那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。此外,IMAP 更好地支持了从多个不同设备中随时访问新邮件。

授权码申请

以qq邮箱为例

例子

import imaplib
import email
from email.header import decode_header
'''第一部分:收件IMAP4********************************************'''
'''登录邮箱IMAP4=========================================================='''
from_addr = ''  # 发件邮箱
password = ''  # 邮箱密码(或者客户端授权码)
imap_server = 'imap.qq.com'
try:
    email_server = imaplib.IMAP4_SSL(imap_server, 993)  #邮箱服务器及SSL端口
    print("imap4 服务器连接成功")
except:
    print("imap4 服务器连接失败")
    exit(1)
try:
    email_server.login(from_addr, password)
    print("imap4 账号密码正确,登录成功")
except:
    print("imap4 账号密码不正确,登录失败")
    exit(1)
''' 邮箱中收到的未读邮件的数量=========================================================='''\
# 选择收件箱
email_server.select()
# search方法返回状态和查找得到的含有邮箱编号的字节数组
email_unseen_id_byte= email_server.search(None, 'UNSEEN')[1][0].split() #所有未读邮件的id 格式email_unseen_id_byte [b'5255', b'5256', b'5257']
print('未读邮件一共有:',len(email_unseen_id_byte),'封')
# #得到所有未读邮件标号将byte格式转为为str email_unseen_id ['5255', '5256', '5257', '5258']
email_unseen_id = []
count_byte = 0
for row in email_unseen_id_byte:
    email_unseen_id.append(row.decode('utf-8'))
# '''读取邮件标题,地址========================================================='''
# 通过fetch(index)读取第index封邮件的内容
sub_list = []
addr_list = []
# #对每一封邮件进行处理
for a in email_unseen_id:
    # 获取邮件主题和地址信息,byte格式
    typ, email_content = email_server.fetch(f'{a}'.encode(), '(RFC822)')
    mail_text = email_content[0][1]
    # 编码转化
    msg = email.message_from_bytes(mail_text)
    subject = msg['Subject']
    email_from = msg['from']
    subdecode = decode_header(subject)   #[(b'\xc9\xed\xdd\xc8\xcf\xd6\xbb\xd8\xcc\xc2\xeb', 'gb18030')]
    from_decode = decode_header(email_from)  # [(b'"', None), (b'\xd0\xa1\xe3', 'gb18030'), (b'" <3825@qq.com>', None)]
    print(from_decode)


相关文章
|
1天前
|
运维 监控 应用服务中间件
自动化运维:如何利用Python脚本提升工作效率
【10月更文挑战第30天】在快节奏的IT行业中,自动化运维已成为提升工作效率和减少人为错误的关键技术。本文将介绍如何使用Python编写简单的自动化脚本,以实现日常运维任务的自动化。通过实际案例,我们将展示如何用Python脚本简化服务器管理、批量配置更新以及监控系统性能等任务。文章不仅提供代码示例,还将深入探讨自动化运维背后的理念,帮助读者理解并应用这一技术来优化他们的工作流程。
|
2天前
|
数据管理 程序员 数据处理
利用Python自动化办公:从基础到实践####
本文深入探讨了如何运用Python脚本实现办公自动化,通过具体案例展示了从数据处理、文件管理到邮件发送等常见办公任务的自动化流程。旨在为非程序员提供一份简明扼要的实践指南,帮助他们理解并应用Python在提高工作效率方面的潜力。 ####
|
2天前
|
数据采集 Web App开发 JavaScript
爬虫策略规避:Python爬虫的浏览器自动化
爬虫策略规避:Python爬虫的浏览器自动化
|
2天前
|
数据采集 存储 XML
Python实现网络爬虫自动化:从基础到实践
本文将介绍如何使用Python编写网络爬虫,从最基础的请求与解析,到自动化爬取并处理复杂数据。我们将通过实例展示如何抓取网页内容、解析数据、处理图片文件等常用爬虫任务。
|
2天前
|
运维 监控 Linux
自动化运维:如何利用Python脚本优化日常任务##
【10月更文挑战第29天】在现代IT运维中,自动化已成为提升效率、减少人为错误的关键技术。本文将介绍如何通过Python脚本来简化和自动化日常的运维任务,从而让运维人员能够专注于更高层次的工作。从备份管理到系统监控,再到日志分析,我们将一步步展示如何编写实用的Python脚本来处理这些任务。 ##
|
8天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
自动化测试与脚本编写:Python实践指南
13 1
|
5月前
|
存储 NoSQL Redis
Python—操作redis的一些心得
Python—操作redis的一些心得
25 0
|
存储 NoSQL 数据库
|
存储 NoSQL Redis
|
缓存 NoSQL Linux
python3操作redis
redis也被称为缓存 1.redis是一个key-value存储系统,没有ForeignKey和ManyToMany的字段. 2.在redis中创建的数据彼此之间是没有关系的,所以也被称为是非关系型数据库 3.它支持存储包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)等数据类型。
1185 0