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 程序包进行安装

案例

简单代码

以下是一个简单的示例,演示如何使用 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 = "csdndaolizhe@163.com";

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开启方式

AOKRBYUISXPAITAI

POP3 服务器地址

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

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

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

获取附件

核心代码

// 处理邮件附件

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 = "csdndaolizhe@163.com";

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替代。

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

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: