在 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 服务器中所有消息的基本信息。

  1. 创建以下实例: IEWSClient.
  2. 调用 ListMessages 使用目标文件夹 URI。
  3. 遍历 ExchangeMessageInfoCollection.

列出任意文件夹中的消息

ListMessages 接受任何有效的文件夹 URI,允许您列出已删除项、草稿、已发送项或自定义文件夹中的项目。使用 IEWSClient->get_MailboxInfo->xxxFolderUri 属性用于获取不同文件夹的 URI。

以下代码示例演示如何访问不同的 Exchange 服务器文件夹 URI 并从指定文件夹检索消息。

邮件列表分页

对于大型邮箱,请使用 ListMessagesByPage 用于分块加载消息。

以下代码示例演示如何实现分页,以从 Exchange 服务器的收件箱检索大量消息。

  1. 首先,它在服务器上创建多个测试消息。
  2. 然后,使用 ListMessagesByPage 方法用于以较小批次检索消息(本例中每页 5 条消息),遍历所有页面直至到达最后一页。
  3. 最后,代码通过统计所有页面的总项目数来验证所有消息是否已成功检索。

获取消息类型信息

使用 ExchangeMessageInfo->MessageInfoType 用于确定底层的 Exchange 消息类型(例如,电子邮件、会议请求等)。

以下代码示例演示如何连接到 Exchange 服务器并从已删除项文件夹检索消息类型信息。

使用 Exchange Web Services (EWS) 保存消息

Aspose.Email 使您能够从 Exchange 服务器邮箱检索消息以多种格式保存,例如 EML、内存流和 MSG。以下示例演示如何获取消息信息并使用 IEWSClient API。

保存消息为 EML 文件

将邮箱消息保存为 EML 文件:

  1. 创建一个 IEWSClient 使用有效凭据的实例。
  2. 调用 ListMessages() 用于检索一个 ExchangeMessagesInfoCollection.
  3. 遍历集合以访问每条消息的唯一 URI。
  4. 调用 SaveMessage() 用于以 EML 格式将每条消息存储到磁盘上。

以下代码示例演示如何使用 Aspose.Email for C++ 将 Exchange 服务器收件箱中的电子邮件消息保存为本地的单个 EML 文件。

保存消息到内存流

您可以将消息保存到内存流中而不是写入磁盘——这对于将电子邮件存储在数据库中或在内存中处理非常有用。

以下代码示例演示如何将 Exchange 服务器收件箱中的电子邮件消息保存到内存流中。

以 MSG 格式保存消息

将消息保存为 MSG:

  1. 使用以下方式检索消息 FetchMessage(),它返回一个 MailMessage.
  2. 调用 MailMessage::Save() 使用 MSG 保存选项。

以下代码示例演示如何从 Exchange 服务器收件箱获取并保存电子邮件为 Outlook MSG 格式文件。

通过消息 URI 检索消息详情

当仅有消息唯一 URI 时,仍然可以检索完整的 ExchangeMessageInfo 对象。该 IEWSClient::ListMessages() 重载接受消息 ID(URI)列表并返回一个 ExchangeMessageInfoCollection。当您在外部存储或接收消息 URI 并且需要加载元数据(主题、发件人、大小等)而无需获取完整消息时,请使用此功能。

以下代码示例演示如何在 Exchange 服务器上创建多个电子邮件消息,然后使用唯一标识符检索它们的消息信息。

获取完整消息内容

ListMessages() 返回摘要信息(主题、发件人、ID)。若要加载完整消息内容——正文、头部、附件——请使用 FetchMessage().

以下代码示例演示如何从 Exchange 服务器收件箱获取完整消息并提取附件信息:

  1. 创建一个 IEWSClient 实例。
  2. 调用 ListMessages() 以获取基本的消息元数据。
  3. 提取每条消息的 UniqueUri。
  4. 调用 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 服务器收件箱移动到另一个文件夹。

  1. 使用 EWS 凭据连接到 Exchange 服务器。
  2. 获取邮箱信息(文件夹 URI)。
  3. 列出收件箱中的所有消息。
  4. 遍历每条消息。
  5. 检查主题是否包含 "process this message"。
  6. 将匹配的消息移动到已删除项文件夹。
  7. 为每条移动的消息输出确认。

从 Exchange 文件夹删除消息

您可以借助 IEWSClient->DeleteMessage 方法。它以邮件的唯一 URI 作为参数。

以下代码示例演示如何根据主题条件过滤并删除 Exchange 服务器收件箱中的特定电子邮件。

  1. 遍历收件箱中的消息。
  2. 根据某些条件处理邮件(在此示例中,我们在邮件主题中查找关键字)。
  3. 删除匹配的消息。

将消息复制到另一个 Exchange 文件夹

使用 IEWSClient::CopyItem 用于将消息复制到不同的文件夹。重载版本返回新创建副本的 URI。

以下代码示例演示如何在 Exchange 服务器上创建电子邮件并将其复制到另一个文件夹。