C# 使用 MailKit 接收邮件(附demo)

C# 使用 MailKit 接收邮件(附demo)

  • 介绍
  • 安装包(依赖)
  • 案例
    • 简单代码
  • 获取附件
    • 核心代码
    • 完整代码
  • 介绍一下POP3


介绍

MailKit 是一个开源的 C# 邮件处理库,用于在应用程序中发送和接收电子邮件。它提供了一个强大且易于使用的 API,支持多种邮件协议,包括 SMTP、POP3、和 IMAP。

特性与优势 描述
多协议支持 支持 SMTP、POP3、IMAP 等多种邮件协议。
异步操作 使用异步编程模型,提高性能和响应性。
附件处理 提供灵活的附件处理功能,支持添加、读取和保存邮件附件。
SSL/TLS 支持 支持安全套接字层(SSL)和传输层安全性(TLS),确保邮件的安全传输。
容错处理 提供容错处理机制,处理网络或协议错误,确保稳定的邮件通信。
丰富的 API 提供丰富的 API,方便开发人员访问邮件的各个方面,包括主题、发件人、收件人等。
跨平台 MailKit 是一个跨平台的邮件处理库,可在多个操作系统上运行,包括 Windows、Linux 和 macOS。

需要源码的留下邮箱,私信也会看,不过看的不勤,留言有通知。

安装包(依赖)

通过命令操作 NuGet 包管理器进行安装:

Install-Package MailKit -Version 2.15.0

通过管理 NuGet 程序包进行安装
C# 使用 MailKit 接收邮件(附demo)_第1张图片

C# 使用 MailKit 接收邮件(附demo)_第2张图片

案例

简单代码

以下是一个简单的示例,演示如何使用 MailKit 接收邮件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MailKit.Net.Pop3;
using MimeKit;

namespace Pop3EmailDemo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            using (var client = new Pop3Client())
            {
                // 邮箱信息
                string email = "[email protected]";
                string password = "AOKRBYUISXPAITAI";

                // POP3 服务器和端口
                string pop3Server = "pop.163.com";
                int pop3Port = 995;

                // 连接到 POP3 服务器
                client.Connect(pop3Server, pop3Port, true);

                // 登录
                client.Authenticate(email, password);

                // 获取邮件数量
                int messageCount = client.Count;

                // 遍历邮件
                for (int i = 0; i < messageCount; i++)
                {
                    // 获取邮件 UID
                    var uid = client.GetMessageUid(i);

                    Console.WriteLine($"\r\n{email} \r\n接收到邮件 {uid}\r\n");
                    // 获取邮件
                    MimeMessage message = client.GetMessage(i);
                    Console.WriteLine($"\r\n标题:{message.Subject} \r\n内容:{message.TextBody}\r\n");

                    // 断开连接
                    client.Disconnect(true);
                }
            }
        }
    }
}

我这里展示一下网易163邮箱的POP3开启方式

C# 使用 MailKit 接收邮件(附demo)_第3张图片
C# 使用 MailKit 接收邮件(附demo)_第4张图片

C# 使用 MailKit 接收邮件(附demo)_第5张图片

AOKRBYUISXPAITAI

POP3 服务器地址
C# 使用 MailKit 接收邮件(附demo)_第6张图片

由于我这里是自己给自己发的邮件,所以可以看到自己的邮件内容

C# 使用 MailKit 接收邮件(附demo)_第7张图片

以下是 MimeMessage 类中的一些主要字段及其解释:

字段 类型 解释
From InternetAddressList 发件人的电子邮件地址列表,表示邮件的实际发件人或邮件的代理发件人。 常用
Sender InternetAddress 实际发送邮件的用户或代理的电子邮件地址。在协作场景中,与 From 可能不同。
ReplyTo InternetAddressList 邮件回复时使用的地址列表,指定了接收回复的地址,不一定与发件人相同。
To InternetAddressList 收件人的电子邮件地址列表,表示邮件的主要接收人。
Cc InternetAddressList 抄送收件人的电子邮件地址列表,指定了附加接收邮件的地址,不是主要的接收人。
Bcc InternetAddressList 密送收件人的电子邮件地址列表,接收邮件的人不会看到这个地址。
MessageId string 用于唯一标识邮件的字符串,在电子邮件通信中是邮件的唯一标识符。
Date DateTime 表示邮件发送日期和时间的时间戳,用于指示邮件的发送时间。 常用
Subject string 邮件的主题或标题,描述邮件内容的简短文本。常用
HtmlBody string 邮件的正文内容,可以是纯文本 (TextPart) 或包含多个部分的复合体 (Multipart),如 HTML、附件等。
TextBody string 邮件的正文纯文本,特别纯,一般常用 的就是这个
Attachments IEnumerable 包含在邮件中的附件列表,每个附件是一个 MimePart 对象,表示二进制数据或其他嵌套消息。

C# 使用 MailKit 接收邮件(附demo)_第8张图片

获取附件

核心代码


// 处理邮件附件
foreach (var attachment in message.Attachments)
{
    if (attachment.IsAttachment)
        if (attachment is MimePart)
        {
            var part = (MimePart)attachment;
            var fileName = part.FileName;
            var filePath = "D:\\临时\\邮件简历\\" + Guid.NewGuid().ToString() + fileName;
            //File.Create(filePath)
            using (var stream = File.Create(filePath))
            {
                if (attachment is MessagePart rfc822)
                {
                    rfc822.Message.WriteTo(stream);
                }
                else
                {
                    part.Content.DecodeTo(stream);
                }
            }
            // 保存附件到本地文件

            var mailFileInfo = new FileInfo(filePath);
        }

}

完整代码

using MailKit.Net.Pop3;
using MimeKit;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Pop3EmailAttachmentsDemo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            using (var client = new Pop3Client())
            {
                // 邮箱信息
                string email = "[email protected]";
                string password = "AOKRBYUISXPAITAI";

                // POP3 服务器和端口
                string pop3Server = "pop.163.com";
                int pop3Port = 995;

                // 连接到 POP3 服务器
                client.Connect(pop3Server, pop3Port, true);

                // 登录
                client.Authenticate(email, password);

                // 获取邮件数量
                int messageCount = client.Count;

                // 遍历邮件
                for (int i = 0; i < messageCount; i++)
                {
                    // 获取邮件 UID
                    var uid = client.GetMessageUid(i);

                    Console.WriteLine($"\r\n{email} \r\n接收到邮件 {uid}\r\n");
                    // 获取邮件
                    MimeMessage message = client.GetMessage(i);
                    Console.WriteLine($"\r\n标题:{message.Subject} \r\n内容:{message.TextBody}\r\n");

                    // 处理邮件附件
                    foreach (var attachment in message.Attachments)
                    {
                        if (attachment.IsAttachment)
                            if (attachment is MimePart)
                            {
                                var part = (MimePart)attachment;
                                var fileName = part.FileName;
                                var filePath = "D:\\临时\\邮件附件\\" + Guid.NewGuid().ToString() + fileName;
                                //File.Create(filePath)
                                using (var stream = File.Create(filePath))
                                {
                                    if (attachment is MessagePart rfc822)
                                    {
                                        rfc822.Message.WriteTo(stream);
                                    }
                                    else
                                    {
                                        part.Content.DecodeTo(stream);
                                    }
                                }
                                // 保存附件到本地文件

                                var mailFileInfo = new FileInfo(filePath);
                            }

                    }
                    // 断开连接
                    client.Disconnect(true);
                }
            }
        }
    }
}

介绍一下POP3

POP3(Post Office Protocol 3)是一种用于电子邮件客户端和服务器之间的邮件传输的协议。它是电子邮件系统中常用的一种协议,用于从邮件服务器下载邮件到本地计算机。

特点 描述
名称 Post Office Protocol 3(POP3)
功能 用于从邮件服务器下载邮件到本地设备。
传输方式 单向传输,邮件下载到本地后从服务器上删除。
端口 默认使用110号端口进行非加密通信,使用995号端口进行加密通信(SSL/TLS)。
状态保持 不保留邮件在服务器上的状态,邮件的管理和状态保持通常由客户端处理。
同步 不支持多设备同步,适用于那些希望在本地设备上保存邮件副本的用户。
认证 用户必须通过用户名和密码进行身份验证,确保只有授权用户可以访问邮件。
安全性 原始的POP3协议是不加密的,但可以通过SSL/TLS添加安全性。
流行度 由于不支持多设备同步等现代需求,逐渐被更先进的协议如IMAP替代。

需要源码的留下邮箱,私信也会看,不过看的不勤,留言有通知。

你可能感兴趣的:(C#,c#,开发语言)