.NET 幫助

C# Imap(開發人員如何運作)

發佈 2024年4月3日
分享:

在電子郵件伺服器通信領域,網路郵件存取協定 (IMAP)(IMAP)物件在促進無縫存取儲存在郵件伺服器上的電子郵件訊息中扮演著關鍵角色。 將 .NET Framework 支援的新 IMAP 伺服器功能整合到 C# 應用程式中,使開發人員能夠構建強大的電子郵件客戶端、自動化電子郵件處理任務並提高生產力。 這本綜合指南探討了在 C# 中整合 IMAP 協議的基本原理,涵蓋了主要概念、IMAP 實施技術、閒置擴展,以及實用的代碼範例,以幫助開發人員在其應用程式中利用 IMAP 客戶端的功能。 本指南還探討了如何使用建立PDF文件IronPDF - 一個用於 PDF 生成和操作的強大 C# 程式庫C# IMAP 功能來自 Rebex資料。

1. 理解 IMAP 客戶端

IMAP 是一種廣泛使用的協議,用於訪問和管理存儲在遠程郵件伺服器上的電子郵件。 與較舊的 POP3 協議不同,POP3 會將電子郵件下載到本地電子郵件客戶端並隨後將其從電子郵件伺服器上移除,而 IMAP 伺服器允許用戶直接在伺服器上查看第一封郵件,組織和操作電子郵件。 這使得可以在多個設備之間同步電子郵件,並提供了一種更靈活的電子郵件管理方法。

2. IMAP 的主要特點

  1. 郵件同步:IMAP 使客戶端能夠將電子郵件、文件夾和郵箱狀態與伺服器同步,確保從任何設備一致訪問最新的電子郵件數據。

  2. 文件夾管理:IMAP 支援在伺服器上創建、重新命名、刪除和組織電子郵件文件夾,允許使用者將電子郵件整理成邏輯類別。

  3. 訊息檢索和操作:使用 IMAP,客戶端可以直接從伺服器檢索、搜尋、閱讀、移動、複製和刪除個別電子郵件訊息或整個線索。

  4. 電子郵件標記和狀態更新:IMAP允許客戶端標記郵件,將其標記為已讀或未讀,並管理郵件標誌,如「已查看」、「已回覆」或「已標記」,提供對電子郵件狀態的增強控制。

3. 在 C# 中實現 IMAP 伺服器

要將 IMAP 功能整合到 C# 應用程序中,開發人員可以利用第三方庫,例如 MailKit 或 OpenPop.NET,這些庫提供對 IMAP 操作的全面支持。 讓我們來探索一個簡單的例子,說明如何使用MailKit連接用戶到IMAP服務器,檢索電子郵件訊息,並執行基本操作。

在我們進入程式碼範例之前,有幾個步驟需要執行,以獲取使用IMAP伺服器存取電子郵件所需的應用程式密碼。

  1. 前往您的 Gmail 帳戶,然後點擊「設定」。

  2. 在設定中,前往 IMAP 區段並啟用下列核取方塊。

    C# Imap(對開發人員的運作方式): 圖1 - IMAP 設定

  3. 接下來,前往您的 Google 帳戶,找到兩步驟驗證。

    C# Imap(它是如何為開發人員工作的):圖2 - 兩步驟驗證

  4. 在兩步驗證頁面中向下捲動至底部並找到應用程式密碼。

    C# Imap(對開發人員的工作原理):圖 3 - 應用程式密碼

  5. 接下來,輸入您的應用程式名稱,然後點擊建立按鈕。

    C# Imap(為開發人員適用):圖 4 - 創建應用密碼

  6. 應用程式密碼已成功生成。

    C# Imap(開發人員如何使用):圖5 - 生成的應用密碼

    一旦完成配置並創建應用程序密碼後,讓我們深入研究程式碼。

//Install-Package MailKit
using System;
using MailKit.Net.Imap;
using MailKit.Search;
using MimeKit;
class Program
{
    static void Main(string [] args)
    {
        // IMAP server settings
        string imapServer = "imap.gmail.com";
        int imapPort = 993;
        bool useSsl = true;
        // IMAP credentials
        string username = "buttwaleed121@gmail.com";//email Address
        string password = "wiie scqg qxpr gqoz";// App Password
        try
        {
            using (var client = new ImapClient())
            {
                // Connect to the IMAP server
                client.Connect(imapServer, imapPort, useSsl);
                // Authenticate with the server
                client.Authenticate(username, password);
                // Select the INBOX folder or any special folder
                client.Inbox.Open(FolderAccess.ReadOnly);
                // Search for unread messages
                var searchQuery = SearchQuery.NotSeen;
                var uids = client.Inbox.Search(searchQuery);
                foreach (var uid in uids)
                {
                    // Retrieve the message by UID
                    var message = client.Inbox.GetMessage(uid);
                    // Display message details
                    Console.WriteLine($"From: {message.From}");
                    Console.WriteLine($"Subject: {message.Subject}");
                    Console.WriteLine($"Date: {message.Date}");
                    Console.WriteLine($"Body: {message.TextBody}");
                    Console.WriteLine();
                }
                // Disconnect from the server
                client.Disconnect(true);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
//Install-Package MailKit
using System;
using MailKit.Net.Imap;
using MailKit.Search;
using MimeKit;
class Program
{
    static void Main(string [] args)
    {
        // IMAP server settings
        string imapServer = "imap.gmail.com";
        int imapPort = 993;
        bool useSsl = true;
        // IMAP credentials
        string username = "buttwaleed121@gmail.com";//email Address
        string password = "wiie scqg qxpr gqoz";// App Password
        try
        {
            using (var client = new ImapClient())
            {
                // Connect to the IMAP server
                client.Connect(imapServer, imapPort, useSsl);
                // Authenticate with the server
                client.Authenticate(username, password);
                // Select the INBOX folder or any special folder
                client.Inbox.Open(FolderAccess.ReadOnly);
                // Search for unread messages
                var searchQuery = SearchQuery.NotSeen;
                var uids = client.Inbox.Search(searchQuery);
                foreach (var uid in uids)
                {
                    // Retrieve the message by UID
                    var message = client.Inbox.GetMessage(uid);
                    // Display message details
                    Console.WriteLine($"From: {message.From}");
                    Console.WriteLine($"Subject: {message.Subject}");
                    Console.WriteLine($"Date: {message.Date}");
                    Console.WriteLine($"Body: {message.TextBody}");
                    Console.WriteLine();
                }
                // Disconnect from the server
                client.Disconnect(true);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
'Install-Package MailKit
Imports System
Imports MailKit.Net.Imap
Imports MailKit.Search
Imports MimeKit
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' IMAP server settings
		Dim imapServer As String = "imap.gmail.com"
		Dim imapPort As Integer = 993
		Dim useSsl As Boolean = True
		' IMAP credentials
		Dim username As String = "buttwaleed121@gmail.com" 'email Address
		Dim password As String = "wiie scqg qxpr gqoz" ' App Password
		Try
			Using client = New ImapClient()
				' Connect to the IMAP server
				client.Connect(imapServer, imapPort, useSsl)
				' Authenticate with the server
				client.Authenticate(username, password)
				' Select the INBOX folder or any special folder
				client.Inbox.Open(FolderAccess.ReadOnly)
				' Search for unread messages
				Dim searchQuery = SearchQuery.NotSeen
				Dim uids = client.Inbox.Search(searchQuery)
				For Each uid In uids
					' Retrieve the message by UID
					Dim message = client.Inbox.GetMessage(uid)
					' Display message details
					Console.WriteLine($"From: {message.From}")
					Console.WriteLine($"Subject: {message.Subject}")
					Console.WriteLine($"Date: {message.Date}")
					Console.WriteLine($"Body: {message.TextBody}")
					Console.WriteLine()
				Next uid
				' Disconnect from the server
				client.Disconnect(True)
			End Using
		Catch ex As Exception
			Console.WriteLine($"Error: {ex.Message}")
		End Try
	End Sub
End Class
VB   C#

在此程式碼範例中,我們使用 MailKit 連接至 IMAP 伺服器,使用提供的憑證進行驗證,並從 INBOX 資料夾中獲取未讀的電子郵件。 接著,我們遍歷未讀郵件的UID列表,根據UID檢索每封郵件,並顯示其詳細資訊,包括發件人、主題、日期和正文。

輸出

C# Imap(開發人員操作指南):圖 6 - 控制台輸出

4. IronPDF

IronPDF 是一個強大的 C# 函式庫,旨在簡化在 .NET 應用程式中創建、操作和渲染 PDF 文件的過程。 憑藉其直觀的 API 和豐富的功能集,IronPDF 讓開發者能夠程式化地無縫生成、編輯和處理 PDF 檔案,增強他們應用程式的多樣性和功能性。 無論您是需要生成動態報告、將HTML內容轉換為PDF、從現有PDF中提取文本和圖像,還是要數位簽署文件,IronPDF 提供了一個全面的工具包來滿足您的PDF處理需求。 通過利用IronPDF,開發人員可以簡化與PDF相關的任務,輕鬆提供高品質的文件解決方案。

4.1. 安裝 IronPDF

可以使用 NuGet 套件管理器安裝 IronPDF,只需執行以下命令。

Install-Package IronPdf

4.2. 使用 IMAP 伺服器的電子郵件創建 PDF

using System;
using System.Collections.Generic;
using System.IO;
using MailKit.Net.Imap;
using MailKit.Search;
using MimeKit;
using IronPdf;
using MailKit;
class Program
{
    static void Main(string [] args)
    {
        // IMAP server settings
        string imapServer = "imap.gmail.com";
        int imapPort = 993;
        bool useSsl = true;
        // IMAP credentials
        string username = "buttwaleed121@gmail.com";
        string password = "wiie scqg qxpr gqoz";
        try
        {
            using (var client = new ImapClient())
            {
                // Connect to the IMAP server
                client.Connect(imapServer, imapPort, useSsl);
                // Authenticate with the server
                client.Authenticate(username, password);
                // Select the INBOX folder
                client.Inbox.Open(FolderAccess.ReadOnly);
                // Search for unread messages
                var searchQuery = SearchQuery.NotSeen;
                var uids = client.Inbox.Search(searchQuery);
                // Create a list to store message details
                var messages = new List<string>();
                // Retrieve details for the first 100 unread messages
                for (int i = 0; i < Math.Min(uids.Count, 100); i++)
                {
                    var uid = uids[i];
                    var message = client.Inbox.GetMessage(uid);
                    // Add message details to the list
                    messages.Add($"From: {message.From}");
                    messages.Add($"Subject: {message.Subject}");
                    messages.Add($"Date: {message.Date}");
                    messages.Add($"Body: {message.TextBody}");
                    messages.Add(""); // Add an empty line for separation
                }
                // Generate PDF report
                GeneratePdfReport(messages);
                // Disconnect from the server
                client.Disconnect(true);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
    static void GeneratePdfReport(List<string> messages)
    {
        try
        {
            var pdf = new ChromePdfRenderer();
            // Convert message details to HTML format
            string htmlContent = "<h1>Not Seen Emails</h1><hr/>";
            foreach (var message in messages)
            {
                htmlContent += $"<p style='padding-top:30px;'>{message}</p>";
            }
            // Render HTML content to PDF
            var pdfOutput = pdf.RenderHtmlAsPdf(htmlContent);
            // Save PDF to file
            var outputPath = "Email_Report.pdf";
            pdfOutput.SaveAs(outputPath);
            Console.WriteLine($"PDF report generated successfully: {outputPath}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error generating PDF report: {ex.Message}");
        }
    }
}
using System;
using System.Collections.Generic;
using System.IO;
using MailKit.Net.Imap;
using MailKit.Search;
using MimeKit;
using IronPdf;
using MailKit;
class Program
{
    static void Main(string [] args)
    {
        // IMAP server settings
        string imapServer = "imap.gmail.com";
        int imapPort = 993;
        bool useSsl = true;
        // IMAP credentials
        string username = "buttwaleed121@gmail.com";
        string password = "wiie scqg qxpr gqoz";
        try
        {
            using (var client = new ImapClient())
            {
                // Connect to the IMAP server
                client.Connect(imapServer, imapPort, useSsl);
                // Authenticate with the server
                client.Authenticate(username, password);
                // Select the INBOX folder
                client.Inbox.Open(FolderAccess.ReadOnly);
                // Search for unread messages
                var searchQuery = SearchQuery.NotSeen;
                var uids = client.Inbox.Search(searchQuery);
                // Create a list to store message details
                var messages = new List<string>();
                // Retrieve details for the first 100 unread messages
                for (int i = 0; i < Math.Min(uids.Count, 100); i++)
                {
                    var uid = uids[i];
                    var message = client.Inbox.GetMessage(uid);
                    // Add message details to the list
                    messages.Add($"From: {message.From}");
                    messages.Add($"Subject: {message.Subject}");
                    messages.Add($"Date: {message.Date}");
                    messages.Add($"Body: {message.TextBody}");
                    messages.Add(""); // Add an empty line for separation
                }
                // Generate PDF report
                GeneratePdfReport(messages);
                // Disconnect from the server
                client.Disconnect(true);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
    static void GeneratePdfReport(List<string> messages)
    {
        try
        {
            var pdf = new ChromePdfRenderer();
            // Convert message details to HTML format
            string htmlContent = "<h1>Not Seen Emails</h1><hr/>";
            foreach (var message in messages)
            {
                htmlContent += $"<p style='padding-top:30px;'>{message}</p>";
            }
            // Render HTML content to PDF
            var pdfOutput = pdf.RenderHtmlAsPdf(htmlContent);
            // Save PDF to file
            var outputPath = "Email_Report.pdf";
            pdfOutput.SaveAs(outputPath);
            Console.WriteLine($"PDF report generated successfully: {outputPath}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error generating PDF report: {ex.Message}");
        }
    }
}
Imports System
Imports System.Collections.Generic
Imports System.IO
Imports MailKit.Net.Imap
Imports MailKit.Search
Imports MimeKit
Imports IronPdf
Imports MailKit
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' IMAP server settings
		Dim imapServer As String = "imap.gmail.com"
		Dim imapPort As Integer = 993
		Dim useSsl As Boolean = True
		' IMAP credentials
		Dim username As String = "buttwaleed121@gmail.com"
		Dim password As String = "wiie scqg qxpr gqoz"
		Try
			Using client = New ImapClient()
				' Connect to the IMAP server
				client.Connect(imapServer, imapPort, useSsl)
				' Authenticate with the server
				client.Authenticate(username, password)
				' Select the INBOX folder
				client.Inbox.Open(FolderAccess.ReadOnly)
				' Search for unread messages
				Dim searchQuery = SearchQuery.NotSeen
				Dim uids = client.Inbox.Search(searchQuery)
				' Create a list to store message details
				Dim messages = New List(Of String)()
				' Retrieve details for the first 100 unread messages
				For i As Integer = 0 To Math.Min(uids.Count, 100) - 1
					Dim uid = uids(i)
					Dim message = client.Inbox.GetMessage(uid)
					' Add message details to the list
					messages.Add($"From: {message.From}")
					messages.Add($"Subject: {message.Subject}")
					messages.Add($"Date: {message.Date}")
					messages.Add($"Body: {message.TextBody}")
					messages.Add("") ' Add an empty line for separation
				Next i
				' Generate PDF report
				GeneratePdfReport(messages)
				' Disconnect from the server
				client.Disconnect(True)
			End Using
		Catch ex As Exception
			Console.WriteLine($"Error: {ex.Message}")
		End Try
	End Sub
	Private Shared Sub GeneratePdfReport(ByVal messages As List(Of String))
		Try
			Dim pdf = New ChromePdfRenderer()
			' Convert message details to HTML format
			Dim htmlContent As String = "<h1>Not Seen Emails</h1><hr/>"
			For Each message In messages
				htmlContent &= $"<p style='padding-top:30px;'>{message}</p>"
			Next message
			' Render HTML content to PDF
			Dim pdfOutput = pdf.RenderHtmlAsPdf(htmlContent)
			' Save PDF to file
			Dim outputPath = "Email_Report.pdf"
			pdfOutput.SaveAs(outputPath)
			Console.WriteLine($"PDF report generated successfully: {outputPath}")
		Catch ex As Exception
			Console.WriteLine($"Error generating PDF report: {ex.Message}")
		End Try
	End Sub
End Class
VB   C#
  1. 我們創建一個messages清單來存儲前100封未讀電子郵件的詳細資訊。

  2. 在檢索電子郵件詳細信息的迴圈中,我們將每個郵件的詳細信息添加到 messages 列表中。

  3. 在獲取所有未讀電子郵件或前100封電子郵件的詳細信息後,我們調用 GeneratePdfReport 方法來創建包含這些詳細信息的PDF報告。

  4. GeneratePdfReport 方法中,我們將消息詳情轉換為 HTML 格式,並使用 IronPDF 將此 HTML 內容渲染為 PDF 文件。

  5. PDF 報告保存為名為 "Email_Report.pdf" 的檔案。

    您可以透過用實際的伺服器資訊替換 IMAP 伺服器預設設置和憑證並運行程式來測試此代碼。 它將連接到 IMAP 伺服器,檢索前 100 封未讀電子郵件的詳細資訊,生成包含這些詳細資訊的 PDF 報告,並將其保存到檔案中。

    C# Imap(開發人員工作原理):圖 7 - 電子郵件報告輸出

5. 結論

將 IMAP 功能整合到 C# 應用程式中,為電子郵件通訊、自動化和生產力提升開啟了新的可能性。 通過理解IMAP的基礎知識並利用強大的庫如MailKit .NET,開發人員可以輕鬆構建功能豐富的電子郵件客戶端、自動化電子郵件處理任務,以及簡化通信工作流程。

透過本指南提供的實用知識和代碼範例,開發人員可以在其 C# 應用程式中利用 IMAP 整合的強大功能,從而開拓電子郵件通訊創新和效率的新機會。 藉助於 IronPDF 這個多功能的 PDF 處理庫,您可以將附件保存為 PDF,或將電子郵件匯入為 PDF 文件,或將電子郵件存儲為 PDF 文檔。

欲了解更多關於 IronPDF 及其功能,請訪問官方網站。IronPDF 文件頁面.

< 上一頁
C# 分組(適用於開發者的工作原理)
下一個 >
C# 日誌(開發人員的運作方式)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >