Python实战技巧(1)Python字典类型数据如何递归地通过点‘.’的方式访问
Python实战技巧(2)Python的pdb调试代码方法详解
Python实战技巧(3)多版本兼容安装部署(py27,py34,py35,py36,py37,py38,py39)
Python实战技巧(4)正式在pypi网站发布包的流程详解
Python实战技巧(5)Python版本兼容性测试工具tox实战详解
Python实战技巧(6)Miniconda+Pipenv安装部署开发环境实战详解
Python实战技巧(7)Pycharm如何远程调试远程执行
Python实战技巧(8)Python调用C语言
Python实战技巧(9)Python发送邮件
Python实战技巧(10)Python解析邮件
Python实战技巧(11)使用python收发邮件时需要的邮箱授权码如何获取
Python实战技巧(12)一个非常好用收发邮件、解析邮件的库caterpillar_mail
一、安装
pip install -U caterpillar_mail
caterpillar_mail 的源码地址
二、发送邮件
2.1、最简单的方式(已实现163,126,qq,yeah.net类型的邮箱)
如下,除了导入语句,两行代码即可发送邮件,邮箱授权码获取参考 Python实战技巧(11)使用python收发邮件时需要的邮箱授权码如何获取
from caterpillar_mail import Email
# 初始化对象,初始化参数为发件箱及授权码
email=Email("[email protected]","LRRDUxxxxEMLK")
# 发送邮件,第一个参数为收件人地址,第二个邮件标题,第三个标题为邮件内容
email.send("[email protected]","发送邮件测试标题","你好啊\n哈哈哈\n我是用来测试邮件的!")
如果收件人为多个时,只需要使用逗号分隔即可,如下:
from caterpillar_mail import Email
# 初始化对象,初始化参数为发件箱及授权码
email=Email("[email protected]","LRRDUxxxxEMLK")
# 发送邮件,第一个参数为收件人地址,第二个邮件标题,第三个标题为邮件内容
email.send("[email protected],[email protected]","发送邮件测试标题","你好啊\n哈哈哈\n我是用来测试邮件的!")
2.2 指定邮件服务器地址的方式(通用方式)
from caterpillar_mail import SendEmail
send_email = SendEmail("smtp.163.com") # 指定服务器地址,比如这里指定163的服务器
send_email.From = "[email protected]"
send_email.To = ["[email protected]"] # 收件人为列表的格式
send_email.password = "LRRDUVxxxNYHEMLK" # 授权码
send_email.subject = "测试邮件标题" # 邮件标题
send_email.context = "测试邮件内容\n你好啊,哈哈哈\n邮件结束" # 邮件内容
send_email.send()
三、解析邮件
3.1、最简单的方式(查看一封邮件)
(1)获取最新的邮件并解析
from caterpillar_mail import Email
email=Email("[email protected]","XTSDDNHNDTVDZBIO")
obj = email.get_latest_email()
print(obj.from_name) # 发件人名字
print(obj.from_addr) # 发件人邮箱
print(obj.to_name) # 收件人名字
print(obj.to_addr) # 收件人邮箱
print(obj.date) # 邮件时间
print(obj.subject) # 邮件标题
print(obj.context) # 邮件内容
打印结果如下:
(2)通过邮件标题过滤,查询符合过滤条件的最新的邮件
from caterpillar_mail import Email
email=Email("[email protected]","XTSDDNHNDTVDZBIO")
obj = email.get_latest_email(subject="测试邮件收发")
print(obj.from_name) # 发件人名字
print(obj.from_addr) # 发件人邮箱
print(obj.to_name) # 收件人名字
print(obj.to_addr) # 收件人邮箱
print(obj.date) # 邮件时间
print(obj.subject) # 邮件标题
print(obj.context) # 邮件内容
打印结果如下:
(3)通过发件人过滤,查询复核过滤条件的最新的邮件
from caterpillar_mail import Email
email=Email("[email protected]","XTSDDNHNDTVDZBIO")
obj = email.get_latest_email(from_addr="[email protected]")
print(obj.from_name) # 发件人名字
print(obj.from_addr) # 发件人邮箱
print(obj.to_name) # 收件人名字
print(obj.to_addr) # 收件人邮箱
print(obj.date) # 邮件时间
print(obj.subject) # 邮件标题
print(obj.context) # 邮件内容
打印结果如下:
(4)通过一个收件人过滤,查询符合条件的最新的邮件
from caterpillar_mail import Email
email=Email("[email protected]","XTSDDNHNDTVDZBIO")
obj = email.get_latest_email(to_addr="[email protected]")
print(obj.from_name) # 发件人名字
print(obj.from_addr) # 发件人邮箱
print(obj.to_name) # 收件人名字
print(obj.to_addr) # 收件人邮箱
print(obj.date) # 邮件时间
print(obj.subject) # 邮件标题
print(obj.context) # 邮件内容
打印结果如下:
(5)subject,from_addr,to_addr 三个参数均支持正则表达式,比如发件人使用正则过滤
from caterpillar_mail import Email
email=Email("[email protected]","XTSDDNHNDTVDZBIO")
obj = email.get_latest_email(from_addr="\d{9}")
print(obj.from_name) # 发件人名字
print(obj.from_addr) # 发件人邮箱
print(obj.to_name) # 收件人名字
print(obj.to_addr) # 收件人邮箱
print(obj.date) # 邮件时间
print(obj.subject) # 邮件标题
print(obj.context) # 邮件内容
打印结果如下:
上述几种方法未实现所有类型的邮箱,目前只实现了部分邮箱,如果发送邮件类型未在上述之列,则一种解决方式是到 caterpillar_mail源码 提交issue,然后等待,另外一种解决方案就是使用下述方式自行指定邮箱服务器的方式
3.3、自指定邮箱服务器接收邮件并解析(通用方式)
from caterpillar_mail import ReadEmail
read_email = ReadEmail("pop.163.com") # 163邮箱收件箱服务器地址
read_email.login("[email protected]", "LRRDUxxxxxYHEMLK")
emails = read_email.get_latest_n_email(n=1) # emails是一个列表,返回最新的n封邮件,每个元素即为一个邮件对象
for obj in emails:
print(obj.from_name) # 发件人名字
print(obj.from_addr) # 发件人邮箱
print(obj.to_name) # 收件人名字
print(obj.to_addr) # 收件人邮箱
print(obj.date) # 邮件时间
print(obj.subject) # 邮件标题
print(obj.context) # 邮件内容
打印结果如下:
caterpillar_mail 发布记录
1.0.11 发布日期:2021-11-19
- 增加对yeah.net邮箱的支持
1.0.10 发布日期:2021-11-19
- 接收解析邮件提供更高层封装,两行代码即可接收解析邮件,同时发件人支持多人
1.0.9 发布日期:2021-11-18
- 发送邮件提供更高层封装,两行代码即可发送邮件,同时收件人支持多人
1.0.8 发布日期:2021-11-18
- 增加QQ邮箱的发送和收取及解析操作
1.0.7 发布日期:2021-11-18
- 格式化发布文档
1.0.6 发布日期:2021-11-18
- 格式化发布文档
1.0.5 发布日期:2021-11-18
- 增加126邮箱的读取和发送
1.0.4 发布日期:2021-11-18
- 增加解析邮件内容
1.0.3 发布日期:2021-11-17
- 更新说明文档格式
1.0.2 发布日期:2021-11-17
- 更新说明文档为.rst格式
1.0.1 发布日期:2021-11-17
- 发送邮件功能