概述
使用imbox(收邮件)、yagmail(发邮件)、schedule(定时任务管理)三个库来实现
imbox的语法
with Imbox('imap.qq.com', 邮箱地址, 授权码, ssl=True) as imbox:
授权码就是邮箱的一个公第三方工具使用的授权码,有了这个授权码,在使用Python控制的时候就不需要使用,密码来登陆了。具体详见如何获取邮箱的授权码。
在上面我们已经获得一个imbox对象,我们来介绍一下它的属性和方法
all_imbox_msg = imbox.messages(unread=True)
我们可以通过messages方法来得到关于邮箱中的邮件的列表,其中我们可以通过对邮箱的状态来获取指定的邮件信息
- unread=True 表示只列出未读信息
- flagged=True 表示获取红旗邮件
- send_to=xxx@qq.com 表示只获取某个邮件地址的信息
我们还可以通过邮件的时间来进行过滤,同样的,在messages方法内。
- 获取某一天前:date__lt
- 获取某一天后:date__gt
- 获取指定某一天:date__on
这些通过时间来获取的需要使用datetime.date(年,月,日),这里需要注意,我们需要引用 import datetime 才可以使用datetime对象的date方法
all_imbox_msg = imbox.messages(date__on=datetime.date(2022, 3, 2), unread=False)
其他的获取某一天前,获取某一天后,获取指定某一天也同理。由于all_imbox_msg是一个列表所以我们需要使用for循环为他遍历。
for uid, msg in all_imbox_msg:
msg.subject # 邮箱的主题
msg.body # 邮箱的正文部分,邮箱的正文是一个字典类型所以需要索引的方式使用
msg.body['html'] # 获取邮件的正文部分,这通常是html格式的
msg.body['plain'] # 获取邮件的正文部分,这通常是文本格式内容
msg.sent_from # 发件人
msg.sent_to #收件人
msg.date #时间
msg.body['html'] # HTML格式内容附件
msg.attachments # 邮件中的附件,这需要特殊的方式来下载
- uid: 每一个邮件对应的编号
- msg:邮箱内容的对象
我们到此还有一个问题:如果我们告诉Python解释器“嘿,伙计!我只需要未读邮件” 此时,我们已经处理了一个未读邮件了,但是这由于是程序控制的,我们无法将它变为已读,python解释器会在下次运行的时候重新处理这个 “未读邮件”
将一个邮件标记为已读
msg.mark_seen(uid)
看见了吗?这需要一个uid作为参数,这标志着你将哪一个邮件标识为已读。同样的我们可以也可以将这个邮件删除,这意味我们不需要它了或者我们已经处理过它了。
删除一个邮件
msg.delete(uid)
现在我们将我们所知道的连贯起来,这就是我们的全部代码
from imbox import Imbox
with Imbox('imap.qq.com', 邮箱地址, 授权码, ssl=True) as imbox:
all_imbox_msg = imbox.messages(unread=True)
for uid, msg in all_imbox_msg:
msg.subject # 邮箱的主题
msg.body # 邮箱的正文部分,邮箱的正文是一个字典类型所以需要索引的方式使用
msg.body['html'] # 获取邮件的正文部分,这通常是html格式的
msg.body['plain'] # 获取邮件的正文部分,这通常是文本格式内容
msg.sent_from # 发件人
msg.sent_to #收件人
msg.date #时间
msg.body['html'] # HTML格式内容附件
msg.attachments # 邮件中的附件,这需要特殊的方式来下载
msg.mark_seen(uid) # 标为已读,英文意思其实是,标记为已经看过啦
msg.delete(uid) # 标志为删除
哦对!不好意思伙计,还有一个没有说明!msg.attachments 附件如何下载,我指的需要特殊的方式下载指的是不像我们传统的方法通过 file.write(file.content) 就可以了。如下所示
for attachment in msg.attachments:
with open(file_name, 'wb') as f: # 获取附件文件名称作为文件名
f.write(attachment['content'].getvalue())
f.close()
瞧见不一样了吗?它需要使用对象名['content'].getvalue()方法来写入到相应的文件,因为是网页中的文件所以使用的是 wb 写入形式
最后,感谢你选择Kauom,在接下来的其他文章里我将陆续发出关于yagmail(发邮件)、schedule(定时任务管理)的相关知识,期待你的关注!
最后
以上就是孝顺毛巾为你收集整理的Python 自动化控制收发邮件——Imbox库的全部内容,希望文章能够帮你解决Python 自动化控制收发邮件——Imbox库所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复