python+imaplib+email实现邮箱数据读取、附件下载、条件删除
目录
创建服务并登录邮箱
获取邮箱中的文件夹
获取邮件列表
解析邮件信息和获取邮件的UID
获取标题
获取发件人信息
获取收件人和抄送人信息
获取收件时间
获取主题内容
获取并下载附件
删除邮件
关闭邮箱服务
完整代码
创建服务并登录邮箱
import imaplib, email, getpass
from email.header import decode_header
from email.utils import parseaddr, getaddresses
from datetime import datetime
# IMAP服务器的地址、端口和使用的SSL
HOST = "imap.gmail.com"
PORT = 993
USE_SSL = True
# 登录凭证
username = "[email protected]"
password = "xxxxxxxxx"
# 创建IMAP4_SSL对象并登录
server = imaplib.IMAP4_SSL('imap.qq.com')
server.login(username, password)
获取邮箱中的文件夹
status, folders = server.list()
if status == 'OK':
for folder in folders:
print(folder.decode(('utf-8')))
获取邮件列表
# 选择收件箱
server.select('INBOX') # 选择收件箱-INBOX(选择邮件的文件夹,通常是'INBOX')
# 获取邮件列表
status, messages = server.search(None, "ALL") # 获取所有邮件,(ALL表示所有邮件,UNSEEN表示未读邮件,SEEN表示已读邮件)
可指定邮件时间获取对应范围内容的邮件
# 可指定时间范围(例如:2024年1月1日到2025年1月1日)
since_date = datetime(2024, 12, 1).strftime("%d-%b-%Y")
before_date = datetime(2024, 12, 30).strftime("%d-%b-%Y")
status, messages = server.search(None, "ALL", f"SINCE {since_date}", f"BEFORE {before_date}")
解析邮件信息和获取邮件的UID
if messages:
for msgId in messages[0].split(): # 获取邮件的UID
status, data = server.fetch(msgId, '(RFC822)')
if status == 'OK':
msg = email.message_from_bytes(data[0][1]) # 解析邮件
获取标题
# 邮件标题获取
subject, email_encoding = decode_header(msg['subject'])[0]
if isinstance(subject, bytes):
subject = subject.decode(email_encoding if email_encoding else 'utf-8')
获取发件人信息
# 获取发送人信息
from_ = msg['From']
if from_ is None: # 防止from_为空报错
from_ = ''
sender_name, sender_email = parseaddr(from_) # 使用 parseaddr 解析发件人信息,名称和邮箱,注意获取到的名称是没有解析的
from_name, encoding = decode_header(msg['From'])[0] # 获取发件人名称
if isinstance(from_name, bytes):
from_name = from_name.decode(encoding if encoding e
作者:觅远