Easier use of imap mailboxes based on imaplib
Project description
Imap Easy Box
简单介绍
imapbox是基于python内置imaplib,方便收取邮件, 读取邮件内容。 类似的三方包有redbox, imap_tools,redbox对中文支持不太好, imap_tools感觉稍微有点复杂。因为工作需要,顺便完整学习编写一个python包,因此写了 这样一个小工具。
安装
pip install imap_easybox
如何使用
基本例子
from imap_easybox import ImapEasyBox
box = ImapEasyBox('imap.mail.com', port=993) # 端口默认993
# 登录邮箱
box.login('username', 'password')
# 列出邮箱当前所有文件夹,返回[folder<'inbox'>, folder<'发件箱'>, ...]
folders = box.folders
# 首先要通过box的select方法选择一个文件夹,返回的是Folder实例
inbox_folder = box.select('inbox')
# 也可以通过整数或者字符串索引返回文件夹,会自动select该文件夹
inbox_folder = box[0]
inbox_folder = box['inbox']
# 查看文件夹所有邮件,返回[mail<1>, mail<2>...]
mails = inbox_folder.mails
# 获取第一封邮件, 返回Mail对象实例
mail = mails[0]
# 获取邮件的相关属性
mail.subject # 邮件主题
mail.from_ # 邮件来源
mail.sender # 发件人
mail.to # 收件人
mail.text_body # 邮件文本内容
mail.html_body # 邮件html内容
mail.save_attachments() # 保存邮件附件到本地
mail.move_to('垃圾箱') # 将邮件移动到垃圾箱
box.quit() # 退出邮箱
也可以在创建实例的时候传入用户名密码,登录的时候就不用再输入了:
box = ImapBox('imap.mail.com', port=993, username='username', password='password')
box.login()
也支持上下文管理器:
with ImapBox('imap.mail.com', username='username', password='password') as box:
...
文件夹操作
可以对文件夹进行新建,改名,删除的操作:
box.create_folder('folder_name') # 创建文件夹
box.rename_folder('old_folder_name', 'new_folder_name') # 重命名文件夹
box.delete_folder('folder_name') # 删除文件夹
除了可以在box实例上调用方法对文件夹进行操作,文件夹实例也提供了rename
,delete
方法,
不过没有create
方法,因为个人感觉这有点违和,😂:
inbox_folder.rename('new_folder_name') # 重命名文件夹
inbox_folder.delete() # 删除该文件夹
操作邮件标签
可以对邮件标签进行操作,根据RFC2060,
目前支持6个标签的设置,分别是Seen
, Flagged
, Answered
, Draft
, Deleted
, Recent
,
所有标签操作不区分大小写:
# 操作邮件标签
flags = mail.flags # 查看邮件当前标签,返回['Seen', 'Flagged', 'Answered', 'Draft', 'Deleted']
mail.add_flags('Seen') # 设置邮件为已读,可以是用逗号或者空格分隔的多个标签组成的字符串,也可以是列表
mail.set_flags('Flagged, Answered') # 添加Flagged, Answered标签
mail.remove_flags(['Flagged', 'Answered']) # 删除邮件标签
搜索邮件
folder.mails
会返回文件夹内的所有邮件,但有时候我们想要搜索满足条件的某些邮件,
可以调用folder.search
方法,folder.search
支持通过关键字参数传递搜索条件,
也可以直接传入原生的(即内置库imaplib
)搜索语句:
# 使用关键字参数进行搜索
inbox_folder.search(subject='test') # 按主题搜索
inbox_folder.search(from_='imap.mail.com', seen=True) # 按发件人和邮件标志搜索,from条件比较特殊,因为和python关键字冲突,所以后面要加一个下划线
inbox_folder.search(on='13-Aug-2023') # 按日期搜索,注意日期需要按照%d-%b-%Y的格式
可使用的所有条件可参考RFC3501, 不过是否生效还要看服务器是否支持。
所有flag标志和接收单个参数的条件都可以做为关键字参数,flag标志设置为bool
值。所
有的关键字参数都是与(AND)的关系。如果需要是或(OR),或者否(NOT)的关系,则只能使用
原生的搜索语句。redbox和
imap_tools都提供了特别
的搜索语句,但是实际上原生的搜索语句也不是很复杂,所以就偷个懒,没有再
费脑子了。
原生搜索语句规则基本上就是,参数用双引号包含起来,整个搜索条件 用圆括号包含起来,如果没有参数,则直接上圆括号,下面是几个例子:
mails = inbox_folder.search('(SUBJECT "test")')
mails = inbox_folder.search('((FROM "imap.mail.com") (SEEN))') # 条件之间是与的关系
mails = inbox_folder.search('(FROM "imap.mail.com") (SEEN)') # 最外层的圆括号可要可不要
mails = inbox_folder.search('OR (FROM "imap.mail.com") (SEEN)') # 按或的关系进行搜索
mails = inbox_folder.search('NOT (FROM "imap.mail.com") (SEEN)') # 按否的关系进行搜索
作者
- telecomshy - telcomshy - telecomshy@126.com
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for imap_easybox-0.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 80f8603624cb15e9085f29bde5f25a6a5362dfc79cce8f7fa218651f46393d71 |
|
MD5 | 4ececa23cf00ecb9a606f3b3a30d9753 |
|
BLAKE2b-256 | 4670c6359a6efc0b0794d5ebdc79236f137c4b9c3e91711db43f65a459f5f87d |