python 自动化操作邮箱

举报
未来日记 发表于 2023/10/08 10:41:21 2023/10/08
【摘要】 POP3、IMAP、SMTP,CardDAV、CalDAV协议特点 POP3POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而PO...

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 更好地支持了从多个不同设备中随时访问新邮件。
image.png

以qq邮箱为例
image.png

例子

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)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。