.NET 幫助

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

發佈 2024年4月3日
分享:

在電子郵件伺服器通信領域,網路郵件存取協定 (IMAP) (IMAP) 物件在促進無縫存取存儲在郵件伺服器上的電子郵件訊息中扮演著至關重要的角色。整合 .NET Framework 支援新的 IMAP 伺服器功能到 C# 應用程式中,使開發人員能夠構建穩健的電子郵件客戶端,自動化電子郵件處理任務,並提高生產力。本全面指南探討 C# 中 IMAP 協議整合的基本原則,涵蓋關鍵概念、IMAP 實現技術、閒置擴展和實用代碼示例,幫助開發人員在其應用程式中充分利用 IMAP 客戶端的功能。本指南還探討如何使用 IronPDFC# IMAP 資料。

1. 認識 IMAP 客戶端

IMAP是一種廣泛使用的協議,用於訪問和管理存儲在遠端郵件伺服器上的電子郵件訊息。與較早的POP3協議不同,POP3協議下載電子郵件到本地電子郵件客戶端並隨後從郵件伺服器刪除,而IMAP伺服器允許用戶直接在伺服器上瀏覽、組織和操作電子郵件。這使得電子郵件能夠在多個設備間同步,並提供更靈活的電子郵件管理方式。

2. IMAP 的主要功能

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

  2. 資料夾管理:IMAP 支持在伺服器上創建、重命名、刪除和組織電子郵件資料夾,允許用戶將郵件組織成邏輯分類。

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

  4. 電子郵件標記和狀態更新:IMAP 允許客戶端標記訊息、將其標記為已讀或未讀,以及管理消息標記,如 "seen"(已讀)、"answered"(已回覆)或 "flagged"(已標記),提供對郵件狀態的增強控制。

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

IronPDF 可以透過運行以下命令使用 NuGet 套件管理器安裝。

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文件。

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

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

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

免費 NuGet 下載 總下載次數: 10,993,239 查看許可證 >