从 IMAP 服务器检索并列出电子邮件

检索和列出消息

如何获取邮箱中消息的标识信息

在检索和处理电子邮件时,您可以使用 Aspose.Email for .NET 最新版本提供的以下功能获取详细的标识信息,如序列号和唯一 ID:

Aspose.Email.ImapMessageInfo 类:表示 IMAP 邮箱中消息的标识信息。

ImapMessageInfo.SequenceNumber 属性:检索消息的序列号。

ImapMessageInfo.UniqueId 属性:检索消息的唯一标识符。

Aspose.Email.MailMessage.ItemId 属性:表示邮箱中消息的附加标识信息。

以下代码片段演示了如何获取 IMAP 邮箱中消息的标识信息:

  1. 创建该类的实例 ImapClient 类,通过提供必要的参数,如 IMAP 服务器主机、端口、电子邮件地址、密码和安全选项。
  2. 使用 ListMessages 方法,从 "INBOX" 文件夹检索消息列表。使用 Take(5) 方法将列表限制为前五条消息。
  3. 使用以下方式提取列出消息的序列号: SequenceNumber 每条消息的属性。
  4. 使用 FetchMessages 方法,使用前一步获取的序列号从服务器检索消息的完整详情。
  5. 遍历获取的消息,对每条消息检索并显示以下信息:
  • 消息的序列号。
  • ItemId.SequenceNumber 属性。
  • 消息的主题。
using (var client = new ImapClient(imapHost, port, emailAddress, password, securityOption))
{
    // List the first 5 messages from the inbox
    var msgs = client.ListMessages("INBOX").Take(5);
    
    // Get sequence numbers of the messages
    var seqIds = msgs.Select(t => t.SequenceNumber);
    
    // Fetch messages based on sequence numbers
    var msgsViaFetch = client.FetchMessages(seqIds);
    
    for (var i = 0; i < 5; i++)
    {
        var thisMsg = msgsViaFetch[i];
        Console.WriteLine($"Message ID: {seqIds.ElementAt(i)} SequenceNumber: {thisMsg.ItemId.SequenceNumber} Subject: {thisMsg.Subject}");
    }
}

列出来自服务器的 MIME 消息 ID

ImapMessageInfo 提供 MIME MessageId 用于在不提取完整邮件的情况下识别邮件。以下代码片段展示了如何列出 MIME messageId。

从服务器列出消息

Aspose.Email 提供了一个含 2 个成员的重载变体 ListMessages() 根据查询检索指定数量的消息。以下代码片段展示了如何列出消息。

递归列出邮件

IMAP 协议支持递归列出邮箱文件夹中的邮件。这也有助于列出文件夹的子文件夹中的邮件。以下代码片段展示了如何递归列出邮件。

使用多连接列出邮件

ImapClient 提供了一个 UseMultiConnection 属性可用于在繁重操作时创建多个连接。您也可以通过使用 ImapClient.ConnectionsQuantity。以下代码片段演示了使用多连接模式列出邮件,并将其性能与单连接模式进行比较。

使用分页列出邮件

在电子邮件服务器的邮箱中包含大量邮件的情况下,通常希望使用分页支持列出或检索邮件。Aspose.Email API的 ImapClient 让您能够使用分页支持从服务器检索消息。

列出消息附件

要获取附件的名称、大小等信息而不下载附件数据,请尝试以下 API:

  • Aspose.Email.Clients.Imap.ImapAttachmentInfo - 表示附件信息。
  • Aspose.Email.Clients.Imap.ImapAttachmentInfoCollection - 表示一个集合。 ImapAttachmentInfo 类。
  • Aspose.Email.Clients.Imap.ListAttachments(int sequenceNumber) - 获取消息中每个附件的信息。

下面的代码示例及步骤将向您展示如何使用这些 API:

  1. 调用 ListMessages() 在 imapClient 对象上调用此方法。此方法将返回一个 ImapMessageInfoCollection,其中包含邮箱中消息的信息。
  2. 使用 foreach 循环遍历 messageInfoCollection 中的每条消息。
  3. 调用 ListAttachments() 在 imapClient 对象上调用此方法,传入消息对象的 SequenceNumber 属性作为参数。此方法将返回一个 ImapAttachmentInfoCollection,其中包含关于该消息附件的信息。
  4. 使用 foreach 循环遍历 attachmentInfoCollection 中的每个附件。
  5. 在内部循环中,您可以使用 attachmentInfo 对象的属性访问每个附件的信息。
var messageInfoCollection = imapClient.ListMessages();
    
foreach (var message in messageInfoCollection)
{
    var attachmentInfoCollection = imapClient.ListAttachments(message.SequenceNumber);

    foreach (var attachmentInfo in attachmentInfoCollection)
    {
        Console.WriteLine("Attachment: {0} (size: {1})", attachmentInfo.Name, attachmentInfo.Size);
    }
}

获取并保存消息

从服务器获取消息

ImapClient 类可以从 IMAP 服务器获取消息,并将消息以 EML 格式保存到本地磁盘。以下步骤用于将消息保存到磁盘:

  1. 创建该类的实例 ImapClient 类。
  2. 在 ImapClient 中指定主机名、端口、用户名和密码 构造函数.
  3. 使用以下方式选择文件夹 SelectFolder() 方法。
  4. 调用 ListMessages 方法以获取 ImapMessageInfoCollection 对象。
  5. 遍历 ImapMessageInfoCollection 集合,调用 SaveMessage() 方法,并提供输出路径和文件名。

以下代码片段展示了如何从服务器获取电子邮件并保存。

按降序获取消息

Aspose.Email 提供 ImapClient.ListMessagesByPage 方法,列出支持分页的消息。该方法的某些重载 ImapClient.ListMessagesByPage 接受 PageSettings 作为参数。 PageSettings 提供一个 AscendingSorting 属性,如果设置为 false,则返回按降序排列的电子邮件。

以下示例代码演示了 AscendingSorting 属性的 PageSettings 类用于更改电子邮件的顺序。

以 MSG 格式保存消息

要将电子邮件保存为 MSG 格式, ImapClient.FetchMessage() 需要调用该方法。它返回一个实例化的 MailMessage 类。该 MailMessage.Save() 随后可以调用该方法将消息保存为 MSG。以下代码片段展示了如何将消息保存为 MSG 格式。

分组获取的消息

ImapClient 提供了一个 FetchMessages 接受序列号或唯一标识的可迭代对象并返回列表的方法 MailMessage。下面的代码片段演示了 FetchMessages 根据序列号和唯一标识获取邮件的方法。

递归获取文件夹并读取消息

在本文中,大多数 ImapClient 这些功能用于创建一个应用程序,递归列出 IMAP 服务器上的所有文件夹和子文件夹。它还将每个文件夹和子文件夹中的消息以 MSG 格式保存到本地磁盘。磁盘上的文件夹和消息按照与 IMAP 服务器相同的层次结构创建和保存。下面的代码片段展示了如何递归获取消息和子文件夹信息。

处理特殊消息信息

检索额外参数作为摘要信息

获取 List-Unsubscribe 头信息

List-Unsubscribe 标头包含用于取消订阅电子邮件列表(例如广告、新闻稿等)的 URL。要获取 List-Unsubscribe 标头,请使用 ListUnsubscribe 属性的 ImapMessageInfo 类。以下示例展示了该类的使用 ListUnsubscribe 获取 List-Unsubscribe 标头的属性。