3. Exchangelib3.2官方文档 —— 访问文件夹

本文详细介绍使用ExchangeLib库进行邮件账户文件夹管理的方法,包括浏览、搜索、创建、编辑、删除文件夹,以及计数器更新和文件夹内容的清空与递归删除。通过具体代码示例,读者可以学习如何高效地操作文件夹结构。

众所周知,各种文件夹都是Account类的属性,例如account.root,account.calendar,account.trash,account.inbox,account.outbox,account.sent,account.junk,account.tasks和account.contacts等。

# 浏览文件夹树、搜索文件夹有多种方法。如果文件夹名称包含斜杠,那么使用通配符查找可能会产生意外结果。

# 在第一次访问文件夹层次结构后,将会缓存整个结构。这意味着在清除缓存之前,外部程序更改文件夹结构将不会显示出来。以下是如何清除各层文件夹结构的缓存:
from exchangelib import Account, Folder

a = Account(...)
a.root.refresh()
a.public_folders_root.refresh()
a.archive_root.refresh()

some_folder = a.root / 'Some Folder'
some_folder.parent
some_folder.parent.parent.parent
some_folder.root  # 返回账户根目录,和Account.root一样
some_folder.children  # 子文件夹生成器
some_folder.absolute  # 以字符串形式返回绝对路径
some_folder.walk()  # 返回当前文件夹的所有子文件夹
# 使用UNIX语法通配符,但大小写不敏感
some_folder.glob('foo*')  # 返回匹配的子文件夹
some_folder.glob('*/foo')  # 返回所有的名为'foo'的子文件夹
some_folder.glob('**/foo')  # 返回所有的名为'foo'的文件夹
some_folder / 'sub_folder' / 'even_deeper' / 'leaf'  # 和pathlib.Path类似,返回路径
# 您也可以在不使用缓存的情况下进入到指定文件夹。这类似于单斜杠语法,但不是从创建文件夹结构缓存开始。如果您的帐户包含大量文件夹,并且您已经知道准确路径,那么这将非常有用。 
some_folder // 'sub_folder' // 'even_deeper' // 'leaf'
some_folder.parts  # 以'Folder'实例返回当前文件夹及父文件夹
# tree() 以字符串形式返回给定路径下的子文件夹结构树
print(a.root.tree())
'''
root
├── inbox
│   └── todos
└── archive
    ├── Last Job
    ├── exchangelib issues
    └── Mom
'''

# Folders对象有很多有用的计数器:
a.inbox.total_count
a.inbox.child_folder_count
a.inbox.unread_count
# 更新计数器
a.inbox.refresh()

# 可以创建、编辑、删除文件夹
f = Folder(parent=a.inbox, name='My New Folder')
f.save()

f.name = 'My New Subfolder'
f.save()
f.delete()

# 清空文件夹
f.empty()
# 清空并删除子文件夹
f.empty(delete_sub_folders=True)
# 递归删除所有的内容及子文件夹. 和`empty(delete_sub_folders=True)`累死,但是可以防止一些文件夹不被删除. 请小心使用!
f.wipe()

### 使用 Python3Exchangelib 库发送电子邮件 为了通过 Python3 发送电子邮件到 Microsoft Exchange 服务器,`exchangelib` 是一个非常有用的库。此库允许连接至 Exchange Web Services (EWS),从而可以执行多种操作,包括但不限于收件箱管理、日历事件创建以及邮件处理。 #### 安装依赖项 首先需要安装 `exchangelib` 库。可以通过 pip 工具轻松完成这一过程: ```bash pip install exchangelib ``` #### 准备认证信息 要与 Exchange 进行通信,必须提供有效的用户名和密码组合。这些凭证用于建立同 Exchange 的安全会话。对于某些环境而言,可能还需要额外配置 OAuth 或其他形式的身份验证机制[^1]。 #### 创建账户对象并设置凭据 下面是一个简单的例子展示怎样利用 `Credentials` 类来定义访问权限,并实例化代表目标邮箱用户的 `Account` 对象: ```python from exchangelib import DELEGATE, Account, Credentials credentials = Credentials(username='your_username', password='your_password') account = Account(primary_smtp_address='you@example.com', credentials=credentials, autodiscover=True, access_type=DELEGATE) ``` 这段代码设置了基本的登录参数,并尝试自动发现对应的 Exchange 配置服务地址。如果已知确切的服务 URL,则可以直接指定而不是依靠自动查找功能[^2]。 #### 构建消息体并向特定接收者发送邮件 一旦成功建立了账户链接之后,就可以构建一封新邮件并通过调用 `.send()` 方法将其发出给指定的目标地址列表。这里展示了如何构造一条简单的内容字符串作为邮件主体的一部分: ```python from exchangelib import Message, Mailbox msg = Message( account=account, subject="Test Email", body="This is a test email sent using the exchangelib library.", to_recipients=[Mailbox(email_address='recipient@example.com')] ) msg.send() ``` 上述脚本片段说明了向单一收件人发送纯文本格式的消息的过程。当然也可以扩展该方法以支持 HTML 格式的富媒体内容或是附加文件等更复杂的需求[^3]。 #### 添加附件到邮件中 当希望附带文档或其他类型的二进制资源时,可借助于 `FileAttachment` 类型的对象来进行封装。以下是有关如何将本地磁盘上的图像文件加入到外发信函中的示范代码: ```python from exchangelib import FileAttachment attachment_path = 'path/to/image.jpg' with open(attachment_path, "rb") as f: file_content = f.read() file_attachment = FileAttachment(name='image.jpg', content=file_content) msg.attach(file_attachment) msg.send() # Remember to call send after attaching files. ``` 以上就是关于使用 Python3 结合 exchangelib 实现基础电邮传输功能的主要步骤概述。实际应用过程中可能会遇到更多细节问题,比如错误处理、性能优化等方面的工作,在具体项目实施前建议深入研究官方文档获取最新指导和支持材料[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值