.NET 帮助

C# Imap(针对开发者的工作原理)

发布 2024年四月3日
分享:

在电子邮件服务器通信领域,互联网消息访问协议(IMAP)对象在促进无缝访问存储在邮件服务器上的电子邮件信息方面起着至关重要的作用。 将 .NET Framework 支持的新 IMAP 服务器功能集成到 C# 应用程序中,使开发人员能够构建强大的电子邮件客户端、自动执行电子邮件处理任务并提高工作效率。 本综合指南探讨了 C# 中 IMAP 协议集成的基础知识,涵盖了关键概念、IMAP 实现技术、空闲扩展和实用代码示例,可帮助开发人员在其应用程序中利用 IMAP 客户端的强大功能。 本指南还探讨了如何使用以下工具创建 PDF 文件IronPDF - 用于 PDF 生成和操作的强大 C# 库来自 Rebex 的 C# IMAP 功能数据

1.了解 IMAP 客户端

IMAP 是一种广泛使用的协议,用于访问和管理存储在远程邮件服务器上的电子邮件。 与老式的 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 文档的创建、操作和渲染。 IronPDF 具有直观的 API 和广泛的功能集,使开发人员能够以编程方式无缝生成、编辑和处理 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. 我们创建了一个消息列表,用于存储前 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 - 电子邮件报告输出

结论

将 IMAP 功能集成到 C# 应用程序中为电子邮件通信、自动化和提高工作效率开辟了广阔的天地。 通过了解 IMAP 的基本原理并利用 MailKit .NET 等功能强大的库,开发人员可以轻松构建功能丰富的电子邮件客户端、自动执行电子邮件处理任务并简化通信工作流程。

有了本指南提供的实用知识和代码示例,开发人员就有能力在其 C# 应用程序中利用 IMAP 集成的强大功能,并开启电子邮件通信创新和高效的新机遇。 在 IronPDF(一个用于 PDF 处理的多功能库)的帮助下,您可以将附件保存为 PDF,或将电子邮件导入为 PDF 文件,或将电子邮件存储为 PDF 文档。

要了解有关 IronPDF 及其功能的更多信息,请访问官方网站IronPDF 文档页面.

< 前一页
C# Groupby(开发者如何使用)
下一步 >
C# 日志(它如何为开发人员工作)

准备开始了吗? 版本: 2024.12 刚刚发布

免费NuGet下载 总下载量: 11,781,565 查看许可证 >