Python自动化读取邮件基础代码讲解

Python自动化办公实战:包含Word、Excel、Pdf和Email邮件案例_python发送doc附件邮件 一个段落中可能有多个不同样式的文本,这些不同的样式被称为run,一个段落中包含多个run,用para.runs获取,一个run中的具体文本用run.text获取。了解了这些,再看上述代码,是不是清晰很多呢?上面的代码,理解起来应该并不难,读取Excel中的姓名和邮箱,之后传到get_invitation()生成邀请函,之后传给send_email()函数中自动发送邮件。实际上,这两部是分开进行的,这里是先执行get_invitation()函数,先生成邀请函,之后再将该函数注释掉,再执行发送邮件函数, 阅读详情

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料、代码以及交流解答点击即可加入


大家好,在之前的文章中我们已经了解如何对自己的邮箱做一些代码操作前的基础配置,也学会了通过 yagmail 发送邮件。这篇文章将分别介绍两个很实用的收取及读取邮件的库:imbox 和 poplib,主要将讲解:
1.imbox 收取邮件
2.poplib 收取邮件
3.keyring 存储密码

之前的文章中我们也提到了,基础配置需要打开 POP3/SMTP/IMAP,针对不同邮箱有不同的操作,并以网易 163 邮箱和 QQ 邮箱 举例说明


确定配置好了之后就可以继续阅读今天的文章!

 

一、poplib库

poplib 模块提供了 poplib.POP3 和 poplib.POP3_SSL 两个类,分别用于连接普通的 POP 服务器和基于 SSL 的 POP 服务器。连接到服务器后,按照 POP3 协议与服务器交互。

注意:虽然 POP3 得到了广泛支持,但已过时。POP3 服务器的实现质量差异很大,而且太多的服务器都很差。后面会介绍基于 IMAP 服务器的 imbox 库

下面以 QQ 邮箱为例示范如何完整 poplib 库的使用

1、创建连接

使用poplib.POP3_SSL创建连接

import poplib
import email.parser, email.policy
conn = poplib.POP3_SSL('pop.qq.com', 995) 

2、登录服务器

注意输入的是邮箱授权码而不是真实 QQ 密码

conn.user('xxxx@qq.com')   
conn.pass_('xxxx') # 注意输入的是邮箱授权码而不是真实 QQ 密码

3、获取邮件列表

response, maillist, r = conn.list()
print('响应:', response)
print('邮件列表:', maillist) 

4、遍历邮件

multipart 代表邮件内容的容器,无需处理

msg = email.parser.BytesParser(policy=email.policy.default).parsebytes(data)
for part in msg.walk():
    # multipart 代表邮件内容的容器,无需处理
    if part.get_content_type().split("/", 1)[0] == 'multipart':
        continue
    elif part.get_content_type().split("/", 1)[0] == 'text':
        print(part.get_content())
    else:    
        filename = part.get_filename()   
        print(filename)
        with open(filename, 'wb') as f:
            f.write(part.get_payload(decode=True))

多级判断的目的主要是跳过容器、输出正文、下载附件的本地

5、退出服务器

conn.quit()  

常用的代码中有部分稍微繁琐,但整体还是比较好理解的

二 、imbox库

在正式介绍 imbox 库之前,再分享一个技巧。从上面 poplib 的代码中也可以看到,当输入密码(授权码)的时候是在代码中明文显示,这就带来了风险:

假如你不小心把这个代码没有处理就发给别人,或者上传的 github,那么所有拿到这段代码的人都可以对你的邮箱大肆操作,这是很可怕的事情

这里读取邮件用的模块 imbox 也和 poplib 一样需要密码这个参数,但不希望在代码中明文呈现密码,怎么办?

解决办法是利用 keyring 库,通过系统密钥环将密码(授权码),预先在本地存储好,后面在代码中调用 keyring 库的方法,通过账号把密码取出来作为变量就可以。

这样即使别人拿到了全部代码,但他的本地中没有预先配置好密码,就不会有泄露信息的风险了。具体使用方法为,首先打开命令行输入:

import keyring
keyring.set_password("qqmail", "username", "password")

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

import keyring
password = keyring.get_password('qqmail', 'username')

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

import keyring 
from imbox import Imbox
password = keyring.get_password('qqmail', 'username')

with Imbox('imap.qq.com', 'xxx@qq.com', password, ssl=True) as imbox: 
    # 获取全部邮件
    all_inbox_messages = imbox.messages() 
    for uid, message in all_inbox_messages: 
        print(message.subject)  # 邮件主题
        print(message.body['plain']) # 邮件文本格式正文

Imbox('imap.qq.com', 'xxx@qq.com', password, ssl=True) 这行代码中需要填写服务器、用户名邮箱、密码、SSL加密循环体中 uid 参数是每封邮件的编号,邮件编号十分重要,可以用于邮件的标记和删除。除了邮件主题及文本格式正文外,我们主要常用获取以下内容:


除了获取全部邮件用 all_inbox_messages = imbox.messages() 外,我们常常会有选择性获取已读、未读和红旗标记邮件:

 

unread_inbox_messages = imbox.messages(unread=True) # 未读邮件
read_inbox_messages = imbox.messages(unread=False) # 已读邮件
flagged_inbox_messages = imbox.messages(flagged=True) # 红旗标记邮件

也可以通过邮件的收件时间获取邮件:

 

inbox_message_before = imbox.messages(date__lt=datetime.date(2021, 1, 18)) 
inbox_message_after = imbox.messages(date__gt=datetime.date(2021, 1, 18)) 
inbox_message_on_date = imbox.messages(date__on=datetime.date(2021, 1, 18))

那么如何筛选指定发件人发送的邮件呢?答案就在于对 message.sent_from 的理解了。message.sent_from 是一个字典元组,在遍历的过程中只需要简单通过 message.sent_from[0]['email'] 就能够将发件人邮箱提取出来,接着做判断就能够达到目的:

with Imbox('imap.qq.com', 'xxx@qq.com', password, ssl=True) as imbox: 
all_inbox_messages = imbox.messages() 
for uid, message in all_inbox_messages: 
    print(message.subject) 
    print(message.sent_from) 
    print(message.body['plain']) 
    # 把邮箱提取出来 
    email = message.sent_from[0]['email'] 
    if email == 某个特定的邮箱: 
        pass

上文还提到了邮件编号 uid 的重要性。基于编号的两个重要方法:
1.标记已读 imbox.mark_seen(uid)
2.删除邮件 imbox.delete(uid)

使用以删除邮件为例:

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

以上就是基于 POP3 的 poplib 和基于 IMAP 的 imbox 针对收取邮件的常用操作!

利用Python实现定时发送邮件,实现一款营销工具 说起自动化绝对算是茶余饭后最有显B格的谈资,毕竟解放双手是从老祖先那里就流传下来的基因,都2020了,你每天上班还要登录各个邮箱账号查收邮件?快来解锁本章内容 很多人学习python,不知道从何学起。 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多已经做案例的人,却不知道如何去学习更加高深的知识。 那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码! QQ群:1097524789 整体思路 通过Python zemail库实现邮件 阅读详情

相关推荐

接口测试 — 7.接口自动化测试发送邮件

如果要完整实现自动化测试,需要把项目测试的结果数据等,通过发送电子邮件的方式,通知需要看到测试报告的用户。

m0_73409141的博客 1354

进阶的阿牛哥之用python向多人发送邮件(带附件)、遍历邮件获取内容(两种方法:imbox、imaplib)

一、使用的库 这个程序涉及两个库:smtplib 和 email 这两个库都是Python自带的,所以不需要额外的下载安装。 二、思路和步骤 总体思路很简单,就像我们平常上网是通过HTTP协议一样,我们发送邮件是通过SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)来传输的,而现在我们需要做的就是: (1)开启邮箱 SMTP 服务: 以 QQ 邮箱为例,开启 SMTP 的路径是:邮箱首页 → 设置 → 账户 → POP3/IMAP/SMTP/Exchange/CardD

微信公众号进阶的阿牛哥的博客 1万+

100天精通Python丨办公效率篇 —— 11、Python自动化操作 Email(发送邮件、收邮件、邮箱客户端)

填写收件人:小伙伴们;发件人为:西红柿;message = MIMEText('Python 邮件发送测试...'

独木不成林,单弦不成音。 3万+

IMAP协议与imbox第三方库读取所有邮件

IMAP协议全称Internet Mail Access Protocol,即交互式邮件存取协议,邮件客户端通过该协议从邮件服务器上获取邮件信息,下载邮件等。开启方式与POP3/SMTP一样。 imbox第三方库安装:pip install imbox 读取所有邮件示例: from imbox import Imbox import keyring pwd = keyring.get_password("yagmail","284036658@qq.com") with Imbox("imap.qq.co

Tang一橙的博客 2654

从MIPS汇编到C语言:手把手教你用Mars模拟器理解指令集(附实战代码)

本文详细介绍了如何使用Mars模拟器从MIPS汇编过渡到C语言编程,通过实战代码解析ADD、LW、BEQ等指令集与C语言结构的对应关系。内容涵盖环境搭建、算术运算、内存访问、条件分支及函数调用等核心概念,帮助读者深入理解MIPS指令分类和计算机底层运行机制。

weixin_26821003的博客 357

将Apollo高精地图中的车道线叠加在多种导航地图上

本文介绍了将Apollo高精地图车道线叠加到普通导航地图的技术方案。高精地图具备厘米级车道精度和丰富的语义信息,叠加可实现可视化验证、调试分析和数据对比等功能。核心技术包括坐标系统转换(UTM/WGS84/BD09/GCJ02)和数据处理流程,通过Python脚本完成Apollo地图解析、坐标批量转换和多格式输出。文章详细提供了环境准备、工作目录创建和坐标转换脚本等操作步骤,实现了高精地图数据在OpenStreetMap、百度地图和高德地图上的可视化展示。

Hi20240217的博客 1333

python读取邮件(SMTP)总结2~以QQ邮箱为例

首先,读取邮件要用keyring模块。 读取邮件的内容: import keyring pw=keyring.get_password('yagmail','2950896114@qq.com') #获取注册码 from imbox import Imbox #导入imbox with Imbox('smtp.qq.com','2950896114@qq.com',pw) as imbox: all_messages=imbox.messages() for uid,message in

weixin_46098676的博客 4936

Nexus7二代刷机教程(新手向)

该教程将使用lineageos(Android 11),同时借鉴了lineage官方的教程和songelf的教程。

2403_84391487的博客 5215

python实现解析json告警邮件转换成文本,并转发告警邮件

平台自带的告警平台发送的邮件,往往不能够分得清我们所需要的告警内容,需要人为的解析区分出来。

m0_49027804的博客 551

【计算机视觉】语义分割实战:FCN、U-Net与DeepLab系列详解

语义分割实战:FCN、U-Net与DeepLab系列详解,人工智能、大模型、AI深度学习在计算机视觉领域取得了令人瞩目的进展,语义分割作为计算机视觉领域的关键任务,旨在将图像中的每个像素都分配到特定的类别中,实现对图像内容的精细理解。与目标检测关注物体的类别与位置不同,语义分割能够对场景中的所有元素进行像素级别的分类,这在自动驾驶、医学图像分析、遥感图像解译等众多领域都有着至关重要的应用。例如,在自动驾驶中,准确的语义分割可以帮助车辆识别道路、行人、交通标志等,为安全行驶提供决策依据;在医学图像分析中……

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 9万+

R语言机器学习算法实战系列(十三)随机森林生存分析构建预后模型 (Random Survival Forest)

本教程运用随机森林生存分析筛选与患者生存状态显著相关特征。该方法借随机森林这一强大机器学习算法,构建多棵决策树并集成结果,以提高生存分析准确性,识别关键生物标志物。接着,利用选定特征构建风险得分,将多个特征转化为单一数值,量化患者风险水平。之后,依据风险得分将患者分为高、低风险亚型,为临床治疗提供个性化指导。最后,通过分析时间依赖的 ROC 曲线评估模型长期预测能力。此曲线计算不同阈值下的真正例率与假正例率,在多个时间点评估,全面展现模型长期稳定性与准确性。

专注生信领域 2022

Python 自动化控制收发邮件——Imbox库

使用imbox(收邮件)、yagmail(发邮件)、schedule(定时任务管理)三个库来实现 imbox的语法 with Imbox('imap.qq.com', 邮箱地址, 授权码, ssl=True) as imbox: 授权码就是邮箱的一个共第三方工具使用的授权码,有了这个授权码,在使用Python控制的时候就不需要使用,密码来登陆了。具体详见如何获取邮箱的授权码。 在上面我们已经获得一个imbox对象,我们来介绍一下它的属性和方法 all_imbox_msg = imbox.mes

m0_55328858的博客 1万+

ICC2: pin shape不在track上引起的drc如何解决?

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 434

python自动读取邮件_Python自动化读取邮件基础代码讲解

大家好,在之前的文章中我们已经了解如何对自己的邮箱做一些代码操作前的基础配置,也学会了通过 yagmail 发送邮件。这篇文章将分别介绍两个很实用的收取及读取邮件的库:imbox 和 poplib,主要将讲解:“imbox收取邮件poplib收取邮件keyring存储密码之前的文章中我们也提到了,基础配置需要打开 POP3/SMTP/IMAP,针对不同邮箱有不同的操作,并以网易 163 邮箱...

weixin_34355360的博客 2706

Linux ARM平台开发系列讲解(网络篇)1.3 MDIO总线设备device和设备driver匹配

在设备和驱动都载入内核后,设备和驱动是如何匹配起来的呢?其实他们就是通过的唯一标识phyID进行匹配phy_dev和phy_drv是通过phy_bus_match函数进行匹配,匹配成功后会建立链表链接,具体流程如下图: 返回总目录......

DSMGUOGUO的博客 1098

大模型技术全景与核心概念解析:从基础原理到AI智能体架构(实时更新中)

本文系统解析了大模型技术的核心概念与架构。首先介绍了LLM(大语言模型)、LLMOps(模型运维)、AIGC(生成内容)、AGI(通用AI)等基础概念,重点阐述了大模型的工作原理,包括预处理、推理和后处理三个阶段。深入讲解了Token分词、FLOPs计算、Embedding向量表示等关键技术,并分析了LoRA微调、MoE架构等前沿方法。文章还探讨了AI智能体的发展前景,为理解大模型技术提供了全景视角。

算法工程师 1236

Python基础—自动化办公的3个核心技能

最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。Python在自动化办公中扮演着重要角色,通过编写脚本,可以大大简化重复性工作。以下是Python自动化办公的三个核心技能,并附上详细代码讲解。这三个核心技能只是Python自动化办公的冰山一角,但掌握它们将为你开启自动化办公的大门,大大提高工作效率。

2301_78096295的博客 386

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

乐趣Python——自动化邮件:告别手动发送的日子

使用POP3,邮件会被下载到本地机器,并在服务器上删除(尽管有些邮件客户端有保留服务器副本的选项),这意味着只有在使用POP3接收邮件的同一设备上,才能看到之前的邮件记录。当你想给朋友发信,你会递给邮递员,也就是 SMTP,它负责将你的信从你的电脑(也就是你的邮件客户端)通过网络将信送到你的朋友的信箱(也就是服务器)。好的,朋友们,让我们继续我们的魔法之旅,深入探索自动化邮件的另一个神奇角落——邮件里的小秘密:附件和内容处理。"想象一下,你的邮件就像是自动寻找收件人的小精灵,不再需要你手动一封封发送。

JackWu1024 1742

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

用Python自动化管理邮件简直太方便了,三个实用小例子带你体会!

大家好,我是早起。在之前的文章中我们已经了解如何对自己的邮箱做一些代码操作前的基础配置,以及通过 Python 代码收发、读取邮件。本文将简单复习之前的部分重点内容,并通过 3 个小案例进...

早起Python 1869

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Python自动化办公全攻略:Excel/Word/PDF/邮件批量处理

在工程师的日常工作中,80%的办公时间都耗费在重复的Excel数据整理、Word文档生成、PDF格式转换和邮件批量发送上。Python凭借其丰富的第三方库生态,成为自动化办公的首选工具——它就像一把“瑞士军刀”,能精准解决各类重复办公场景的痛点。本文适用读者:Python开发者、需要落地办公自动化的工程师、希望通过技术减少重复工作的职场人。

这里是数字化与人工智能的 “实验场” 与 “瞭望台” 1731

Python 从无到有搭建WebUI自动化测试框架

目录 前言 1、Python库选择 2、分层设计 3、基础类 浏览器 页面 4、公共类 读取excel用例 读取config配置 获取相对路径 中央处理工厂 打印Log 发送邮件 处理参数化 前言 一个迭代频繁的项目,少不了自动化测试,冒烟与回归全部使用自动化测试来实现,释放我们的人工来测试一些重要的,复杂的工作。节省成本是自动化测试最终目标 Python搭建自动化测试框架是高级测试的人设之一 1、Python库选择 这套框架主要的Pyt.......

weixin_40331132的博客 3万+

接口测试 — 接口自动化框架的发送邮件实现

如果要完整实现自动化测试,需要把项目测试的结果数据等,通过发送电子邮件的方式,通知需要看到测试报告的用户。

qaqqqqqaq_的博客 2692
上一篇: 忘掉sklearn,用Python徒手写线性回归
下一篇: 区区几行Python代码,一分钟搞定一天工作量
酸菜鱼编程
博客等级 码龄6年 155粉丝 63原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值