当前位置: 首页 > news >正文

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

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

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


介绍

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>包含在邮件中的附件列表,每个附件是一个 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);
                }
            }
        }
    }
}

相关文章:

  • ASP.NET Core 过滤器 使用依赖项注入
  • 【Linux取经路】进程控制——进程等待
  • Python处理图片生成天际线(2024.1.29)
  • 大力推荐的好用API,含免费次数
  • 网络层 IP协议(1)
  • Shell 正则表达式及综合案例及文本处理工具
  • 【ASP.NET Core 基础知识】--身份验证和授权--授权和策略
  • 【Web前端实操21】商城官网_白色导航
  • 微信小程序(二十八)网络请求数据进行列表渲染
  • 项目:博客
  • 多维时序 | Matlab实现DBO-GRU蜣螂算法优化门控循环单元多变量时间序列预测
  • 精通Python第13篇—数据之光:Pyecharts旭日图的魔法舞台
  • C++语法学习
  • ChatGPT的工作原理
  • Linux 驱动开发基础知识——总线设备驱动模型(八)
  • C语言第十五弹---操作符(上)
  • Log4j2-24-log4j2 相同的日志打印 2 次
  • 【TCP】三次握手(建立连接)
  • 一分钟在SpringBoot项目中使用EMQ
  • 不就业,纯兴趣,应该自学C#还是JAVA?
  • 黑灰产工作室为境外诈骗集团养号引流,冒充美女与男性裸聊后敲诈勒索
  • 宇数科技王兴兴:第一桶金来自上海,欢迎上海的年轻人加入
  • 工行回应两售出金条疑似有杂质:情况不属实,疑似杂质应为金条售出后的外部附着物
  • 中国天主教组织发贺电对新教皇当选表示祝贺
  • 马上评|让“贾宝玉是长子长孙”争议回归理性讨论
  • 毗邻三市人均GDP全部超过20万元,苏锡常是怎样做到的?