在 Exchange 服务器上发送、读取和组织邮件
使用 EWS 检索 Exchange 邮箱信息
Aspose.Email 允许您使用以下方式从 Microsoft Exchange 检索邮箱详情 IEWSClient 类。通过调用 GetMailboxInfo() 方法,客户端返回一个 ExchangeMailboxInfo 对象,其中包含诸如 Mailbox、Inbox、Drafts 和 Sent Items 等有用的文件夹 URI。
要使用 Exchange Web Services (EWS) 连接到 Exchange 服务器,请使用 IEWSClient 类。此类使用 EWS 连接并管理 Exchange 服务器上的项目。
以下代码片段演示如何使用 Exchange Web Services 获取邮箱信息。
通过 EWS 发送电子邮件
您可以通过调用以下方法在 Exchange 中发送电子邮件 IEWSClient->Send() 方法。它接受一个 MailMessage 对象,并使用 EWS 直接通过服务器提交。
以下代码示例演示如何使用 Aspose.Email for C++ 通过 Exchange Web Services (EWS) 在 Exchange 服务器上发送 HTML 邮件。它展示了建立与 Exchange 的连接、使用发送者、收件人、主题和 HTML 内容创建邮件信息的完整过程,并通过 EWS 客户端的 Send 方法发送邮件。
读取其他用户邮箱的电子邮件
在 Exchange 服务器上,一些账户拥有访问多个邮箱的权限,另一些用户在同一 Exchange 服务器上拥有多个电子邮件账户。在这两种情况下,用户都可以使用 Aspose.Email 访问其他用户的邮箱。API 提供了一种使用 IEWSClient 类。此功能可以通过重载的 GetMailboxInfo() 方法,并将用户电子邮件地址作为参数提供。
以下代码片段展示了如何使用 IEWSClient 类。
使用 EWS 列出消息
Aspose.Email for C++ 允许您通过 IEWSClient。使用基于 EWS 的 ListMessages 使用 API,您可以列出任何文件夹中的消息,浏览消息元数据,并为大型邮箱实现分页。
列出收件箱中的消息
使用 ListMessages 用于从收件箱或任何文件夹检索基本的消息信息,例如主题、发件人、收件人和消息 ID。
以下代码示例演示如何列出并显示 Exchange 服务器中所有消息的基本信息。
- 创建以下实例: IEWSClient.
- 调用 ListMessages 使用目标文件夹 URI。
- 遍历 ExchangeMessageInfoCollection.
列出任意文件夹中的消息
ListMessages 接受任何有效的文件夹 URI,允许您列出已删除项、草稿、已发送项或自定义文件夹中的项目。使用 IEWSClient->get_MailboxInfo->xxxFolderUri 属性用于获取不同文件夹的 URI。
以下代码示例演示如何访问不同的 Exchange 服务器文件夹 URI 并从指定文件夹检索消息。
邮件列表分页
对于大型邮箱,请使用 ListMessagesByPage 用于分块加载消息。
以下代码示例演示如何实现分页,以从 Exchange 服务器的收件箱检索大量消息。
- 首先,它在服务器上创建多个测试消息。
- 然后,使用 ListMessagesByPage 方法用于以较小批次检索消息(本例中每页 5 条消息),遍历所有页面直至到达最后一页。
- 最后,代码通过统计所有页面的总项目数来验证所有消息是否已成功检索。
获取消息类型信息
使用 ExchangeMessageInfo->MessageInfoType 用于确定底层的 Exchange 消息类型(例如,电子邮件、会议请求等)。
以下代码示例演示如何连接到 Exchange 服务器并从已删除项文件夹检索消息类型信息。
使用 Exchange Web Services (EWS) 保存消息
Aspose.Email 使您能够从 Exchange 服务器邮箱检索消息并以多种格式保存,例如 EML、内存流和 MSG。以下示例演示如何获取消息信息并使用 IEWSClient API。
保存消息为 EML 文件
将邮箱消息保存为 EML 文件:
- 创建一个 IEWSClient 使用有效凭据的实例。
- 调用 ListMessages() 用于检索一个 ExchangeMessagesInfoCollection.
- 遍历集合以访问每条消息的唯一 URI。
- 调用 SaveMessage() 用于以 EML 格式将每条消息存储到磁盘上。
以下代码示例演示如何使用 Aspose.Email for C++ 将 Exchange 服务器收件箱中的电子邮件消息保存为本地的单个 EML 文件。
保存消息到内存流
您可以将消息保存到内存流中而不是写入磁盘——这对于将电子邮件存储在数据库中或在内存中处理非常有用。
以下代码示例演示如何将 Exchange 服务器收件箱中的电子邮件消息保存到内存流中。
以 MSG 格式保存消息
将消息保存为 MSG:
- 使用以下方式检索消息 FetchMessage(),它返回一个 MailMessage.
- 调用 MailMessage::Save() 使用 MSG 保存选项。
以下代码示例演示如何从 Exchange 服务器收件箱获取并保存电子邮件为 Outlook MSG 格式文件。
通过消息 URI 检索消息详情
当仅有消息唯一 URI 时,仍然可以检索完整的 ExchangeMessageInfo 对象。该 IEWSClient::ListMessages() 重载接受消息 ID(URI)列表并返回一个 ExchangeMessageInfoCollection。当您在外部存储或接收消息 URI 并且需要加载元数据(主题、发件人、大小等)而无需获取完整消息时,请使用此功能。
以下代码示例演示如何在 Exchange 服务器上创建多个电子邮件消息,然后使用唯一标识符检索它们的消息信息。
获取完整消息内容
ListMessages() 返回摘要信息(主题、发件人、ID)。若要加载完整消息内容——正文、头部、附件——请使用 FetchMessage().
以下代码示例演示如何从 Exchange 服务器收件箱获取完整消息并提取附件信息:
- 创建一个 IEWSClient 实例。
- 调用 ListMessages() 以获取基本的消息元数据。
- 提取每条消息的 UniqueUri。
- 调用 FetchMessage() 以检索完整的消息详情。
获取消息大小(无需下载完整消息)
Aspose.Email 通过提供消息大小信息,无需获取整个电子邮件, ExchangeMessageInfo::Size 属性。
这对于以下情况很有用:
- 邮箱统计
- 配额计算
- 在下载之前过滤大消息
以下代码示例演示如何列出并显示来自 Exchange 服务器收件箱的消息元数据,包括大小。
从 Exchange 公共文件夹下载电子邮件
Exchange 公共文件夹允许在用户之间存储共享消息。
Aspose.Email IEWSClient 允许您对这些文件夹及其中存储的消息执行以下操作:
- 列出公共文件夹
- 递归浏览子文件夹
- 下载消息并保存(例如,保存为 MSG 文件)
注意: 需要 Microsoft Exchange Server 2007 或更高版本,因为早期版本不支持 EWS。
以下代码示例演示如何递归下载 Exchange 服务器上所有公共文件夹及其子文件夹中的消息,并将它们本地保存为 Outlook MSG 文件。
在 Exchange 文件夹之间移动消息
您可以使用以下方式将消息从一个 Exchange 文件夹移动到另一个文件夹。 IEWSClient::MoveItem 方法。它要求:
- 要移动的消息的唯一 URI。
- 目标文件夹的唯一 URI。
以下代码示例演示如何根据内容条件过滤并将特定电子邮件从 Exchange 服务器收件箱移动到另一个文件夹。
- 使用 EWS 凭据连接到 Exchange 服务器。
- 获取邮箱信息(文件夹 URI)。
- 列出收件箱中的所有消息。
- 遍历每条消息。
- 检查主题是否包含 "process this message"。
- 将匹配的消息移动到已删除项文件夹。
- 为每条移动的消息输出确认。
从 Exchange 文件夹删除消息
您可以借助 IEWSClient->DeleteMessage 方法。它以邮件的唯一 URI 作为参数。
以下代码示例演示如何根据主题条件过滤并删除 Exchange 服务器收件箱中的特定电子邮件。
- 遍历收件箱中的消息。
- 根据某些条件处理邮件(在此示例中,我们在邮件主题中查找关键字)。
- 删除匹配的消息。
将消息复制到另一个 Exchange 文件夹
使用 IEWSClient::CopyItem 用于将消息复制到不同的文件夹。重载版本返回新创建副本的 URI。
以下代码示例演示如何在 Exchange 服务器上创建电子邮件并将其复制到另一个文件夹。