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

使用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(定时任务管理)的相关知识,期待你的关注!

  • 7
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
要实现Python自动化发送邮件,首先需要准备工作和设置邮箱的SMTP服务。可以参考《快学Python自动化办公轻松实战》一书中的相关章节\[1\]。在准备工作中,需要了解电子邮件的基础知识,并使用Python邮件来实现自动发送邮件\[2\]。 在Python中,可以使用SMTP()和send()方法来实现邮件的发送。SMTP()方法用于建立与邮件服务器的连接,而send()方法用于发送邮件。具体的实现步骤可以参考书中的实例代码\[2\]。 在实现之前,需要开启自己邮箱的SMTP服务。一般可以在邮箱的设置中找到SMTP服务的开启选项。开启SMTP服务后,可以获取到当前账户的授权码,该授权码在程序实现的过程中会用到\[3\]。 总结起来,要实现Python自动化发送邮件,需要进行以下步骤: 1. 了解电子邮件的基础知识。 2. 使用Python邮件来实现自动发送邮件。 3. 开启自己邮箱的SMTP服务,并获取授权码。 参考资料: \[1\] 《快学Python自动化办公轻松实战》, 黄伟、朱鹏伟, 电子工业出版社, 9787121436345, 2022. \[2\] 参考信息中的《快学Python自动化办公轻松实战》一书中的相关章节。 \[3\] 参考信息中的《快学Python自动化办公轻松实战》一书中的相关章节。 #### 引用[.reference_title] - *1* *2* *3* [python自动发送邮件实现](https://blog.csdn.net/weixin_42521211/article/details/128857411)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值