imap_easybox package

imap_easybox.server module

class imap_easybox.server.ImapEasyBox(host: str, port=993, user: str | None = None, password: str | None = None, ssl: bool = True, **kwargs)

基类:object

登录imap服务器,对邮箱内的文件夹进行操作

参数:
  • host (str) -- 服务器域名

  • port (int, default 993) -- 服务器端口,默认为993

  • user (str, default None) -- 用户名,也可以稍后在调用 login 方法时指定

  • password (str, default None) -- 密码,也可以稍后在调用 login 方法时指定

  • ssl (bool, default True) -- 为 True, 则内部使用 imaplib.IMAP4,否则使用 imaplib.IMAP4_SSL 创建实例

  • kwargs -- 任意关键字参数,会透传给 imaplib.IMAP4imaplib.IMAP4_SSL 构造函数

示例

可以传入用户名,密码,登录时候无须再次输入

>>> box = ImapEasyBox(host='mail.imap.com', port=993, user='username', password='password')
>>> box.login()

也可以延迟输入用户名密码:

>>> box = ImapEasyBox(host='mail.imap.com', port=993)
>>> box.login(user='username', password='password')

调用 quit 方法退出:

>>> box.quit()

可以使用上下文管理器:

>>> with ImapEasyBox(host='mail.imap.com', port=993, user='username', password='password') as box:
...     pass
create_folder(folder_name: str)

创建文件夹,创建成功更新邮箱所有文件夹

delete_folder(folder_name: str)

删除指定文件夹,删除成功更新邮箱所有文件夹

property folders: FolderList

返回邮箱当前所有文件夹

示例

>>> folders = box.folders
>>> folders
[Folder<inbox>, Folder<垃圾箱>, ...]

返回 FolderList 实例,FolderList 可通过整数或者文件夹名称选择文件夹

Type:

FolderList

login(user: str | None = None, password: str | None = None)

登陆邮箱

参数:
  • user (str, default None) -- 用户名,如果已指定,则可忽略

  • password (str, default None) -- 密码,如果已指定,则可忽略

quit()

退出登录

rename_folder(old_folder_name: str, new_folder_name: str)

修改指定文件夹名称,修改成功更新邮箱所有文件夹

select(folder_name: str) Folder

选择文件夹

登录以后,必须先选择一个文件夹

参数:

folder_name (str) -- 文件夹名称

返回:

返回一个 Folder 实例

返回类型:

Folder

server: IMAP4 | IMAP4_SSL | None
update_folders()

更新文件夹列表

获取当前所有文件夹,更新内部 _folders 属性,_folders 是一个字典,键是解析后的文件夹名称, 值是文件夹的原始名称

imap_easybox.folder module

class imap_easybox.folder.Folder(folder_name: str, box: ImapEasyBox)

基类:object

对应邮箱中的文件夹

delete()

删除当前文件夹

删除以后,实例的 folder_name, box, server 属性都被设置为 None

property mails: list[Mail]

返回当前文件夹中所有邮件

rename(folder_name: str)

更改当前文件夹名称

参数:

folder_name (str) -- 新的文件夹名称

search(query: str = None, *, encoding: str = None, **kwargs) list[Mail]

根据条件搜索邮件,具体例子参考 搜索邮件

参数:
  • query (str, default None) -- 原生搜索字符串,具体查看 按原生字符串搜索

  • encoding (str, default None) -- 注意,如果搜索条件包含中文,需要指定编码。是否支持该编码依赖于服务器支持

  • **kwargs -- 按关键字搜索,支持的关键字参考 RFC3501, 不区分大小写。 条件之间是与的关系,如果是或,否的关系,请使用原生搜索字符串。

返回类型:

返回 Mail 对象组成的列表

class imap_easybox.folder.FolderList(initlist=None)

基类:UserList

覆盖了 collections.UserList__getitem__ 方法,可通过整数或者文件夹名称选择文件夹,在内部会调用 ImapEasyBox.select() 方法选定该文件夹

示例

>>> folders
[Folder<inbox>, Folder<垃圾箱>, ...]
>>> inbox = folders[0]
>>> inbox
Folder<inbox>
>>> inbox = folders['inbox']
>>> inbox
Folder<inbox>

imap_easybox.email module

class imap_easybox.email.Mail(mail_id: int | str, folder: Folder)

基类:object

add_flags(flags: list | str)

添加邮件标识,可用标识有seen, flagged, answered, draft, deleted

参数:

flags (list or str) -- 设置邮件flag标志,可以是标记构成的列表,或者多个标记组成的字符串,标志之间用逗号或空格分隔

property attachments: list

返回一个列表,元素是字典,字典的键是附件名称,值是附件二进制内容

property content: dict

返回邮件所有内容构成的字典,结构如下:

content = {
    "text_body": ...,
    "html_body": ...,
    "html_encoding": ...,
    "attachments": [...],
    "images": [...]
}
property date: str

返回邮件发送日期,日期格式为 %Y-%m-%d %H:%M:%S

property flags: list[str]

返回邮件当前所有flag标志构成的列表

property from_: str

返回邮件发件人相关信息

property headers: dict

返回邮件元信息

property html_body: str

返回邮件html的内容

move_to(folder_name)

将邮件移动到指定文件夹

参数:

folder_name (str) -- 目的文件夹名称

property raw_mail: Message

返回邮件原始的 Message 对象

remove_flags(flags: list | str)

删除邮件标识,可用标识有seen, flagged, answered, draft, deleted

参数:

flags (list or str) -- 设置邮件flag标志,可以是标记构成的列表,或者多个标记组成的字符串,标志之间用逗号或空格分隔

save(filename: str = None)

将邮件保存为eml文件

参数:

filename (str, default None) -- 邮件名称

save_attachments(save_path: str = '.')

保存所有附件,返回附件路径组成的列表

参数:

save_path (str, default '.') -- 附件保存目录,默认为当前目录

save_html(save_path: str = '.')

将邮件保存为html文件,图片编码成base64格式嵌入

参数:

save_path (str) -- 邮件保存目录

property sender: str

返回邮件的发件人

set_flags(flags: list | str)

设置邮件标识,可用标识有seen, flagged, answered, draft, deleted

参数:

flags (list or str) -- 设置邮件flag标志,可以是标记构成的列表,或者多个标记组成的字符串,标志之间用逗号或空格分隔

property subject: str

返回邮件的主题

property text_body: str

返回邮件的文本内容

property to: str

返回邮件收件人

imap_easybox.utils module

imap_easybox.utils.decode_mail_header(header)

解析邮件元数据

imap_easybox.utils.image_to_base64(image: str | bytes, encoding) str

将图片转换成base64编码

参数:
  • image (str or bytes) -- 字节码或者字符串,如果是字符串,表示图片的路径

  • encoding (str) -- 字符串编码

返回类型:

base64编码的字符串

imap_easybox.utils.imap_utf7_decode(bytes_: bytes) str

将imap的字节编码转换成字符串,imap是utf7格式,并将+号替换成&号

imap_easybox.utils.imap_utf7_encode(text: str) bytes

将字符串转换成imap支持的utf7编码,并将+号替换成&号

imap_easybox.utils.parse_raw_mail(raw_mail: Message) dict

递归解析原始邮件,返回邮件内容组成的字典:

content = {
    "text_body": ...,
    "html_body": ...,
    "html_encoding": ...,
    "attachments": [...],
    "images": [...]
}