使用 C# .NET 獲取電子郵件

在構建電子郵件處理應用程序時,關鍵步驟之一是設置可靠且快速的功能,以從收件箱中檢索消息。 在本文中,我們將探討如何利用 .NET 庫的強大功能,通過 POP3、IMAP、EWS、Graph API 和各種格式的離線郵箱存儲來獲取 C# 中的電子郵件,以 PST 文件為例。文章附有清晰的代碼示例,您可以使用這些示例來測試庫的功能。

.NET API 獲取消息

要從伺服器或郵箱存儲中提取消息,我們將使用 Aspose.Email for .NET。這是一個強大的 API 庫,允許開發人員在其 .NET 應用程序中操作電子郵件。它提供了一整套功能,用於在各種場景中處理電子郵件。它簡化了創建、操作和轉換電子郵件消息、處理電子郵件附件、日曆、聯繫人等的工作,還支持從郵箱中提取消息,並根據需要管理其內容。您可以在 下載 其 DLL 或使用以下命令從 NuGet 安裝它後,輕鬆將 API 實現到您的項目中:

PM> Install-Package Aspose.Email

通過 POP3 獲取電子郵件

使用 POP3 協議,電子郵件從伺服器下載到本地系統,方便訪問和管理。其功能可以輕鬆集成到您的應用程序中。Aspose.Email for .NET POP3Client 類用於創建 POP3 客戶端對象,以便對消息進行操作。

以下代碼示例和步驟演示了如何使用 POP3 客戶端連接到 POP3 郵件伺服器、檢索消息列表並提取消息內容:

  1. 首先,創建 POP3 客戶端對象的實例。
  2. 由於 POP3 協議缺乏內置加密,導致電子郵件消息的傳輸易受到攔截和未經授權的訪問,因此接下來設置 SecurityOptions 屬性以使用與伺服器的安全機制。
  3. 在 foreach 循環內,代碼迭代郵箱中的每條消息,並使用 FetchMessage 方法提取消息內容。
using Aspose.Email;
using Aspose.Email.Clients.Pop3;
using (var client = new Pop3Client("pop3.server.com", "username", "password"))
{
client.SecurityOptions = SecurityOptions.Auto;
foreach (var messageInfo in pop3Client.ListMessages())
{
var eml = client.FetchMessage(messageInfo.SequenceNumber);
}
}

您可以進一步調整代碼以適應您的具體需求,並利用提取的消息內容與 .NET 庫的其他功能。

使用 IMAP 獲取消息

IMAP 是另一種流行的協議,提供更同步和多功能的電子郵件訪問方式。與 POP3 不同,IMAP 將電子郵件保留在伺服器上,同時允許您從多個設備管理和組織這些電子郵件。在一個設備上所做的更改會反映在所有設備上,提供無縫且一致的電子郵件體驗。

Aspose.Email for .NET 為您提供了 ImapClient 類及其屬性,以連接到 IMAP 郵件伺服器並管理文件夾中的電子郵件。以下代碼示例和步驟將向您展示如何從伺服器獲取消息:

  1. 實例化 IMAPClient 實例。
  2. 通過設置 SecurityOptions 屬性來提供電子郵件通信的安全性。
  3. 循環顯示收件箱消息,逐一提取它們。
using Aspose.Email;
using Aspose.Email.Clients.Imap;
using (var client = new ImapClient("imap.server.com", "username", "password"))
{
client.SecurityOptions = SecurityOptions.Auto;
client.SelectFolder("Inbox");
foreach (var messageInfo in client.ListMessages())
{
var eml = client.FetchMessage(messageInfo.UniqueId);
}
}

通過 EWSClient 從 MS Exchange Server 獲取消息

對於與 Microsoft Exchange 伺服器互動的應用程序,Aspose.Email for .NET 提供對 EWS 的支持。這種協議促進了高級操作,包括電子郵件檢索、日曆管理和聯繫人同步。EWS 對於需要與 Microsoft Exchange 環境集成的應用程序特別有益。

要連接到 Exchange 伺服器並檢索電子郵件消息,我們將使用 .NET API 的 IEWSClient 類。下面提供的代碼示例展示了如何建立與郵箱的連接,列出收件箱文件夾中的消息,然後提取每條電子郵件消息。這一過程使開發人員能夠以編程方式高效地訪問和操作其 .NET 應用程序中的電子郵件數據。

  1. 通過調用 C# 庫的 GetEWSClient 方法初始化 EWS 客戶端。
  2. 使用 ListMessages 方法在 foreach 循環中迭代收件箱消息。
  3. 使用 FetchMessage 方法提取電子郵件消息的內容。
using Aspose.Email;
using Aspose.Email.Clients.Exchange.WebService;
using (var client = EWSClient.GetEWSClient("https://outlook.office365.com/ews/exchange.asmx", "UserName", "Password"))
{
foreach(var msgInfo in client.ListMessages(client.MailboxInfo.InboxUri)
{
var eml = client.FetchMessage(msgInfo.UniqueUri);
}
}

根據應用程序的需求,您可以對提取的 eml 變量執行其他處理。這可能包括解析電子郵件標頭、提取附件、分析電子郵件正文或使用我們功能豐富的 API 執行任何其他相關操作。

Microsoft Graph 從伺服器提取消息

Aspose.Email for .NET 使開發人員能夠利用 Microsoft Graph API 的力量來檢索電子郵件。通過集成 Graph API,您的應用程序可以訪問統一的端點來檢索電子郵件、日曆和聯繫人。當您希望創建全面的多功能應用程序時,這種集成是非常有價值的。

以下代碼示例和步驟演示了如何使用 Microsoft Graph API 操作電子郵件文件夾和消息。它創建了一個 Graph 客戶端,檢索 “收件箱” 文件夾,並迭代該文件夾中的消息以提取每條消息。

  1. 通過調用 GraphClient 類的 GetClient 方法,創建 Graph 客戶端實例,並將 tokenProvider 和 “tenant ID” 作為參數傳遞。
  2. 使用客戶端的 ListFolders 方法檢索所有文件夾的集合。
  3. 通過在文件夾集合上使用 FirstOrDefault LINQ 方法來獲取 “收件箱” 文件夾。lambda 表達式檢查文件夾的 DisplayName 屬性是否與 “收件箱” 匹配。
  4. 通過在客戶端上調用 ListMessages 迭代檢索到的文件夾.ItemId 中的消息。
  5. 對於每條消息,通過調用 FetchMessage 在客戶端上提取消息詳細信息,並傳遞 msgInfo.ItemId 作為參數。
using Aspose.Email;
using Aspose.Email.Clients.Graph;
// Create a Graph client
using (var client = GraphClient.GetClient(tokenProvider, "tenant ID"))
{
var folder = client.ListFolders().FirstOrDefault(folder => folder.DisplayName.Equals("Inbox"));
foreach (var msgInfo in client.ListMessages(folder.ItemId))
{
var msg = client.FetchMessage(msgInfo.ItemId);
}
}

從離線郵箱存儲提取消息

我們全面的 C# 庫使您能夠創建具有離線郵箱存儲功能的應用程序。通過利用此功能,您可以下載並本地存儲電子郵件,確保即使在沒有互聯網連接的情況下也能訪問。這對於需要在移動中無縫訪問電子郵件的用戶尤其有用。

該庫可以很好地處理不同格式的獨立存儲,例如 PST、MBOX、OLM、TGZ,但在本文中,我們將考慮從 PST 獲取電子郵件的示例。

要實現這一功能以離線訪問郵箱信息,我們將使用庫的 PersonalStorage 類。以下是從 PST 文件獲取消息的代碼示例和步驟:

  1. 通過調用 PersonalStorage 類的 FromFile 方法並將 PST 文件的路徑作為參數傳遞來創建一個新的個人存儲對象。

  2. 通過在個人存儲對象的 RootFolder 屬性上調用 GetSubfolder 方法來初始化名為 “folder” 的變量。傳遞字符串 “收件箱” 作為參數以指定要檢索的文件夾名稱。

  3. 使用 foreach 循環迭代在 “folder” 對象的 EnumerateMessages 方法返回的集合中的每個 “msgInfo” 對象。

  4. 在循環內,通過在個人存儲對象上調用 ExtractMessage 方法創建一個名為 “msg” 的新變量。傳遞當前 “msgInfo” 對象的 EntryIdString 屬性作為參數,以指定要提取的消息。

該代碼將對文件夾中的每條消息執行第 3 和第 4 步中指定的操作。

using Aspose.Email.Mapi;
using Aspose.Email.Storage.Pst;
using (var pst = PersonalStorage.FromFile("storage.pst"))
{
var folder = pst.RootFolder.GetSubfolder("Inbox");
foreach(var msgInfo in folder.EnumerateMessages())
{
var msg = pst.ExtractMessage(msgInfo.EntryIdString);
}
}

結論

在本文中,我們學習了如何利用 Aspose.Email for .NET 的強大功能來獲取電子郵件。該庫支持 POP3、IMAP、EWS、Graph API 和離線郵箱存儲,使您能夠自定義應用程序的功能以滿足特定需求。無論您是開發客戶端應用程序、集成工具還是自定義解決方案,我們的 .NET API 為您提供了創建無縫高效消息處理體驗的工具。 您可以使用 文檔 探索 Aspose.Email 的其他功能。此外,您可以將您的查詢發帖到 我們的論壇

參見