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);
                }
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/363511.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024最新版TypeScript安装使用指南

2024最新版TypeScript安装使用指南 Installation and Development Guide to the Latest TypeScript in 2024 By JacksonML 1. 什么是TypeScript? TypeScript is JavaScript with syntax for types. – typescriptlang.org TypeScript 是 JavaScript 的一个超集&#xff0c;…

【UE 材质】球形遮罩材质

效果 步骤 1. 新建一个材质&#xff0c;这里命名为“M_Mask” 打开“M_Mask”&#xff0c;混合模式设置为已遮罩&#xff0c;勾选双面显示 在材质图表中添加如下节点 此时我们将一个物体赋予材质“M_Mask”并放置在世界坐标原点&#xff0c;可以看到如下效果 2. 如果我们希望能…

页面切换导致echarts不加载的问题

1. 问题描述 在A页面写了echarts,初始化dom元素加载,显示正常.当切换到B页,再切换回A页面时,echarts加载不出来. f12召唤出来看看报错,没有问题,但是有这样的警告 渲染echarts的dom元素上多了一个" echarts_instance "的属性,这是用来表示唯一性的. 2. 问题解决 …

HIMO智能尾灯,让夜骑的你更加自信

现在选择骑车外出的朋友越来越多了&#xff0c;日常骑行的过程中&#xff0c; 夜间要尤其注意安全 &#xff0c; 特别是在一些光线不好的道路 &#xff0c; 有必要给车辆增加一些醒目的“标志” &#xff0c; 像是尾灯我觉得就很重要 &#xff0c; 我也是前几天新装了一枚 HIMO…

DataX介绍

一、介绍 DataX 是一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 github地址 详细文档 操作手册 支持数据框架如下&#xff1a; 架构 Reader&#xff1…

RT-Thread:STM32的PB3,PB4 复用IO配置为GPIO

说明&#xff1a;在使用 STM32F103CBT6 配置了 PB3 为IO&#xff0c;测试时发现读取这个IO的电平时钟是0&#xff0c;即便单管脚上的电平是1&#xff0c;读取的数据任然是0,查规格书后发现PB3,PB4是JTAG复用口&#xff0c;要当普通IO用需要配置。 配置工具&#xff1a;STM32Cu…

51单片机编程应用(C语言):独立按键

目录 1.独立按键介绍 2.独立按键控制LED亮灭 1.1按下时LED亮&#xff0c;松手LED灭&#xff08;按一次执行亮灭&#xff09; 1.2首先按下时无操作&#xff0c;松手时LED亮&#xff08;再按下无操作&#xff0c;所以LED亮&#xff09;&#xff0c;松手LED灭&#xff08;松手时…

LeetCode:206反转链表

206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 不难&#xff0c;小细节是单写一个循环&#xff0c;把特殊情况包含进去&#xff0c; 单链表核心&#xff1a;上一个结点&#xff0c;当前结点&#xff0c;下一个结点&#xff0c; 代码&#xff1a;注释&#xff08;算是…

系统分析师-22年-下午答案

系统分析师-22年-下午答案 更多软考知识请访问 https://ruankao.blog.csdn.net/ 试题一必答&#xff0c;二、三、四、五题中任选其中两题作答 试题一 (25分) 说明 某软件公司拟开发一套博客系统&#xff0c;要求能够向用户提供一个便捷发布自已心得&#xff0c;及时有效的…

安装jar包到maven本地仓库的基本步骤

1.jar名字和所在目录 2.输入导包脚本 mvn install:install-file -DfileE:\resources\6、SpringBoot3Vue3全套教程\02_资料\02_Bean注册资料\common-pojo-1.0-SNAPSHOT.jar -DgroupIdcn.itcast -DartifactIdcommon-pojo -Dversion1.0 -Dpackagingjar3.打开命令行输入脚本就可以…

Linux安装aria2出现No package aria2 available.的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【C++】 C++入门—内联函数

C入门 1 内联函数1.1 定义1.2 查看方式1.3 注意 Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读下一篇文章见&#xff01;&#xff01;&#xff01; 1 内联函数 1.1 定义 程序在执行一个函数前需要做准备工作&#xff1a;要将实参、局部变量、返回地址以及若干寄存…

代理模式详解(重点解析JDK动态代理)

- 定义 在解析动态代理模式之前&#xff0c;先简单看下整个代理模式。代理模式分为普通代理、强制模式、动态代理模式。其中动态代理模式主要实现方式为Java JDK提供的JDK动态代理&#xff0c;第三方类库提供的&#xff0c;例如CGLIB动态代理。 代理模式就是为其他对象提供一种…

Attack Lab:Phase1~Phase5【缓冲区溢出实验】

注&#xff1a;本实验所用文件不是csapp官网给出的&#xff0c;是学校下发的。可以参考我的思路。 phase 1 本阶段目标是使getbuf调用结束后&#xff0c;控制权交给touch1函数。 则我们要知道两件事&#xff1a;一是缓冲区大小&#xff0c;二是touch1在虚拟内存中的位置。 用…

山海鲸智慧教育方案:教育数据的未来

作为山海鲸可视化软件的开发者&#xff0c;我们深知数据可视化在教育领域的重要价值。山海鲸智慧教育解决方案正是在这样的背景下应运而生&#xff0c;致力于为教育行业提供高效、直观的数据可视化解决方案。 随着教育信息化的深入推进&#xff0c;教育数据呈爆炸式增长。如何…

vue3中使用了keep-alive来缓存页面使用onActivated和onDeactivated生命周期

1.说明 要求从实单订单列表跳转到物流账单列表时通过订单号(orderSn)进行筛选。现在出现的问题是所以第一次跳转到物流账单列表页面时是可以实现通过订单号进行筛选数据。在没有关闭物流账单列表页面就进行第二次跳转 2.出现的问题 3.keep-alive缓存页面特有的生命周期 vue2…

【算法与数据结构】300、LeetCode最长递增子序列

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;   程序如下&#xff1a; class Solution { public:int lengthOfLIS(vector<int>& nums)…

IP 了解

参考&#xff1a;5.1 IP 基础知识全家桶 | 小林coding IP 在 TCP/IP 参考模型中处于第三层&#xff0c;也就是网络层。 网络层的主要作用是&#xff1a;实现主机与主机之间的通信&#xff0c;也叫点对点&#xff08;end to end&#xff09;通信。 什么是 IP 地址&#xff1f…

线上品牌展厅有哪些优点,如何打造线上品牌展厅

引言&#xff1a; 在当今数字化时代&#xff0c;品牌展示的方式也在不断演变&#xff0c;线上品牌展厅作为一种新型的展示方式&#xff0c;正逐渐成为品牌宣传的新宠。但是为什么需要线上品牌展厅&#xff0c;线上品牌展厅有哪些优势呢&#xff1f; 一&#xff0e;为什么需要线…

【开源】基于JAVA+Vue+SpringBoot的用户画像活动推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 兴趣标签模块2.3 活动档案模块2.4 活动报名模块2.5 活动留言模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 数据流程设计3.4 E-R图设计 四、系统展示五、核心代码5.1 查询兴趣标签5.2 查询活动推荐…