千家信息网

怎么用Python自动化管理邮件

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,本篇内容主要讲解"怎么用Python自动化管理邮件",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用Python自动化管理邮件"吧!如果你来不及看,至少
千家信息网最后更新 2025年01月23日怎么用Python自动化管理邮件

本篇内容主要讲解"怎么用Python自动化管理邮件",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用Python自动化管理邮件"吧!

如果你来不及看,至少需要了解下面几个概念

为了体现通用性,这次我们再换一个邮箱讲解,下面的案例均以 88 完美邮箱 为例示范,本文主要将分为下面两个部分介绍

  • imbox 收取邮件

  • openpyxl 写入 Excel 文件

案例一

"将邮箱里所有邮件的相关信息存到 Excel 中备份

"要解决这个需求,首先我们利用 keyring 库,通过系统密钥环将开启 IMAP/SMTP服务后获得的密码(授权码)预先在本地存储好。首先打开命令行输入python后输入:

import keyring keyring.set_password("88mail", "test@88.com", "password")

这样 password 在本地存储好了,后面只需要 keyring.get_password 获取作为变量即可:

import keyring password = keyring.get_password('88mail', 'test@88.com')

打开 88 邮箱的网页版,进一步确认是否配置是否完成,以及服务器邮箱:

用 imbox 读取邮件的代码如下:

import keyring  from imbox import Imbox password = keyring.get_password('88mail', 'test@88.com')  with Imbox('imap.88.com', 'test@88.com', password, ssl=True) as imbox:      # 获取全部邮件     all_inbox_messages = imbox.messages() # 获取全部邮件     for uid, message in all_inbox_messages:         print(uid) # 邮件编号         print(message.sent_from) # 发件人         print(message.subject)  # 邮件主题         print(message.date) # 日期         print(message.body['plain']) # 邮件文本格式正文         print(message.attachments) # 附件

关于上面的代码有几个地方需要注意一下:

  • Imbox('imap.qq.com', 'xxx@qq.com', password, ssl=True) 这行代码中需要填写服务器、用户名邮箱、密码、SSL加密

  • 循环体中 uid 参数是每封邮件的编号,邮件编号十分重要,可以用于邮件的标记和删除

  • message.sent_from 返回一个包裹字典的列表,这个字典有两个键:name 和 email,name 即用户名(或昵称),email 是发件人的邮箱

  • message.date 获取的字符串内容如 'Tue, 3 Nov 2020 08:08:16 +0800 (GMT+08:00)' ,一个 GMT 格式的时间,我们需要将它转化为正常的日期(年月日)+时间(时分秒),也就是将 GMT 时间格式的字符串转换成datetime 类型,可以通过下面的代码:

import datetime  date = 'Tue, 3 Nov 2020 08:08:16 +0800 (GMT+08:00)' GMT_FORMAT = '%a, %d %b %Y %H:%M:%S +0800 (GMT+08:00)'  print(datetime.datetime.strptime(date, GMT_FORMAT)) # 2020-11-03 08:08:16

同样需要注意的是

message.body['plain'] 正文以字符串列表形式返回

message.attachments 输出结果举例如下:

[{'content-type': 'application/x-zip-compressed', 'size': 1160851, 'content': <_io.BytesIO object at 0x046A7B68>, 'filename': 'xxxx.zip'}]

也是一个字典列表,一个附件为一个字典,包括 content-type size content filename 4 个键,即类型、大小、内容、文件名。若无附件则返回空列表。

有了上面的知识我们就可以重新把邮件的关键信息都解析成字符串形式方便存储:

import keyring  from imbox import Imbox import datetime  password = keyring.get_password('88mail', 'test@88.com')  with Imbox('imap.88.com', 'test@88.com', password, ssl=True) as imbox:      all_inbox_messages = imbox.messages() # 获取全部邮件     for uid, message in all_inbox_messages:         name = message.sent_from[0]['name'] # 发件人姓名         email = message.sent_from[0]['email'] # 发件人邮箱         title = message.subject          GMT_FORMAT = '%a, %d %b %Y %H:%M:%S +0800 (GMT+08:00)'         email_datetime = str(datetime.datetime.strptime(message.date, GMT_FORMAT))         email_date = email_datetime.strip()[0] # 发送日期         email_time = email_datetime.strip()[1] # 发送时间          text = message.body['plain'] # 文本格式正文         attachment_lst = []         attachments = ''         if message.attachments:             for attachment in message.attachments:                 attachment_lst.append(attachment['filename'])             attachments = ', '.join(attachment_lst)         print(uid, name, email, title, email_date, email_time)         print(text, attachments if attachments else '无')

接着利用 openpyxl 写入上述信息即可,首先在程序开头创建好表头,明确存储的信息:

from openpyxl import Workbook  workbook = Workbook() # 创建新工作簿 sheet = workbook.active heading = ['邮件名', '发件人姓名', '发件人邮箱', '发送日期', '发送时间', '邮件正文', '附件'] sheet.append(heading)

后面随着邮件的遍历将内容写入表格即可。案例一的完整代码如下:

import keyring from imbox import Imbox import datetime from openpyxl import Workbook  workbook = Workbook() # 创建新工作簿 sheet = workbook.active heading = ['邮件名', '发件人姓名', '发件人邮箱', '发送日期', '发送时间', '邮件正文', '附件'] sheet.append(heading)  password = keyring.get_password('88mail', 'test@88.com')  with Imbox('imap.88.com', 'test@88.com', password, ssl=True) as imbox:      all_inbox_messages = imbox.messages() # 获取全部邮件     for uid, message in all_inbox_messages:         name = message.sent_from[0]['name'] # 发件人姓名         email = message.sent_from[0]['email'] # 发件人邮箱         title = message.subject          GMT_FORMAT = '%a, %d %b %Y %H:%M:%S +0800 (GMT+08:00)'         email_datetime = str(datetime.datetime.strptime(message.date, GMT_FORMAT))         email_date = email_datetime.strip()[0] # 发送日期         email_time = email_datetime.strip()[1] # 发送时间          text = message.body['plain'] # 文本格式正文         attachment_lst = []         attachments = ''         if message.attachments:             for attachment in message.attachments:                 attachment_lst.append(attachment['filename'])             attachments = ', '.join(attachment_lst)         sheet.append([title, name, email, email_date, email_time, text, attachments])  workbook.save('xxxxx.xlsx')

案例二

"备份收件箱中所有小明(xiaoming@qq.com)发来的邮件至 Excel,然后删除这些邮件

"其实如果顺利理解了案例一,那么这个案例就特别简单了 从上面的案例中我们知道,通过下面的代码就可以获取发件人邮箱:

with Imbox('imap.88.com', 'test@88.com', password, ssl=True) as imbox:      all_inbox_messages = imbox.messages()      for uid, message in all_inbox_messages:         email = message.sent_from[0]['email'] # 发件人邮箱

那么只需要在这个基础上判断 if email == 'xiaoming@qq.com' 就可以往后执行相应代码了。另外,删除邮件是基于邮箱编号 uid 的,代码为 imbox.delete(uid) ,具体代码举例:

for uid, message in all_inbox_messages:      if 满足某种条件的邮件:          imbox.delete(uid)

那么,我们综合上述两个知识点以及案例一的知识延伸,就很好写出案例二的代码了:

import keyring from imbox import Imbox import datetime from openpyxl import Workbook  workbook = Workbook()  sheet = workbook.active heading = ['邮件名', '发件人姓名', '发件人邮箱', '发送日期', '发送时间', '邮件正文', '附件'] sheet.append(heading)  password = keyring.get_password('88mail', 'test@88.com')  with Imbox('imap.88.com', 'test@88.com', password, ssl=True) as imbox:      all_inbox_messages = imbox.messages()      for uid, message in all_inbox_messages:         email = message.sent_from[0]['email']          if email == 'xiaoming@qq.com': # 在此处判断发件人             name = message.sent_from[0]['name']             title = message.subject             GMT_FORMAT = '%a, %d %b %Y %H:%M:%S +0800 (GMT+08:00)'             email_datetime = str(datetime.datetime.strptime(message.date, GMT_FORMAT))             email_date = email_datetime.strip()[0]             email_time = email_datetime.strip()[1]             text = message.body['plain']             attachment_lst = []             attachments = ''             if message.attachments:                 for attachment in message.attachments:                     attachment_lst.append(attachment['filename'])                 attachments = ', '.join(attachment_lst)             sheet.append([title, name, email, email_date, email_time, text, attachments])             imbox.delete(uid) # 在此处删除符合要求的邮件               workbook.save('xxxxx.xlsx')

案例三

"备份收件箱中标题含有 "奖金" 的邮件至 Excel,然后红旗标记这些邮件

"基本思路跟案例二类似,不过多展开讲,只复习两个知识点。要判断标题是否有"奖金"二字:

with Imbox('imap.88.com', 'test@88.com', password, ssl=True) as imbox:      all_inbox_messages = imbox.messages()      for uid, message in all_inbox_messages:         title = message.subject         if '奖金' in title:             pass

红旗标记邮件也删除邮件一样,也是基于邮箱编号 uid 的,具体代码举例:

for uid, message in all_inbox_messages:      if 满足某种条件的邮件:          imbox.mark_flag(uid)

故案例三的完整代码如下:

import keyring from imbox import Imbox import datetime from openpyxl import Workbook  workbook = Workbook()  sheet = workbook.active heading = ['邮件名', '发件人姓名', '发件人邮箱', '发送日期', '发送时间', '邮件正文', '附件'] sheet.append(heading)  password = keyring.get_password('88mail', 'test@88.com')  with Imbox('imap.88.com', 'test@88.com', password, ssl=True) as imbox:      all_inbox_messages = imbox.messages()      for uid, message in all_inbox_messages:         title = message.subject           if '奖金' in title: # 判断标题是否含指定内容             name = message.sent_from[0]['name']             email = message.sent_from[0]['email']              GMT_FORMAT = '%a, %d %b %Y %H:%M:%S +0800 (GMT+08:00)'             email_datetime = str(datetime.datetime.strptime(message.date, GMT_FORMAT))             email_date = email_datetime.strip()[0]             email_time = email_datetime.strip()[1]             text = message.body['plain']             attachment_lst = []             attachments = ''             if message.attachments:                 for attachment in message.attachments:                     attachment_lst.append(attachment['filename'])                 attachments = ', '.join(attachment_lst)             sheet.append([title, name, email, email_date, email_time, text, attachments])             imbox.mark_flag(uid) # 在此处标记符合要求的邮件               workbook.save('xxxxx.xlsx')

到此,相信大家对"怎么用Python自动化管理邮件"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

邮件 发件人 邮箱 代码 案例 时间 日期 正文 附件 内容 姓名 面的 格式 两个 信息 奖金 字典 字符 字符串 标记 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 通过疫情谈网络安全问题 聚力互联网金融科技有限公司 数据库控制的基本原则 郑州手机应用软件开发 计算机网络安全导论第三版 12123选车牌服务器异常 apache服务器的根目录在哪 xp进文件服务器过慢 网络安全属于科技方向吗 泰安手机app软件开发哪家好 数据库指令时间段导出命令 论文在哪个数据库查询 沈阳新华互联网科技学校在哪 生态环境规划软件开发 数据库应用系统技术课后答案 网络安全讲座如何开展 天猫精灵服务器出错什么意思 本机ip数据库 郑州程序软件开发如何收费 济南云畅网络技术有限公司 杭州蛮牛网络技术有限公司官网 网络安全等级保护标准2.0解读 中国现阶段互联网科技发展 绍兴app软件开发项目 查xrd谱图的数据库 数据库参数错误是什么意思 服务器测试类工装 平安人寿软件开发怎么样 国网网络安全竞赛 安装新疆好地方app服务器中断
0