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

news2024/11/27 12:51:38

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>包含在邮件中的附件列表,每个附件是一个 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替代。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux实时调度

面对陌生的知识体系&#xff0c;应该从什么角度来 简介 一、进程管理基本概念 在单处理器系统上&#xff0c;在给定时刻只有一个程序可以运行&#xff0c;在多处理器系统上&#xff0c;可以真正并行运行的进程数据&#xff0c;取决于物理CPU的数目&#xff1b; 进程优先级 …

jss/css/html 相关的技术栈有哪些?

js 的技术组件有哪些&#xff1f;比如 jQuery vue 等 常见的JavaScript技术组件&#xff1a; jQuery&#xff1a; jQuery是一个快速、小巧且功能丰富的JavaScript库&#xff0c;用于简化DOM操作、事件处理、动画效果等任务。 React&#xff1a; React是由Facebook开发的用于构…

FPGA高端项目:IMX327 MIPI 视频解码 USB3.0 UVC 输出,提供FPGA开发板+2套工程源码+技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理图像缓存UVC 时序USB3.0输出架构 6、vivado工程详解FPGA逻辑设计 7、工…

docker 网络模型

一、docker的网络模型分为四种 【1】Host(与宿主机共享一个网络)&#xff0c;宿主机的localhost 及 容器内的localhost 【2】Bridge(与宿主机共享一个局域网&#xff0c;有自己的网络&#xff1b;docker运行默认Bridge)&#xff1b;容器内localhost不是宿主机localhost 【3】…

PyTorch 2.2 中文官方教程(五)

对抗性示例生成 原文&#xff1a;pytorch.org/tutorials/beginner/fgsm_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 注意 点击这里下载完整的示例代码 作者&#xff1a; Nathan Inkawhich 如果您正在阅读本文&#xff0c;希望您能欣赏一些机器学习…

MySQL | DDL 里 TEXT、JSON 类型字段不设置默认值

JSON、BLOB、TEXT 等类型字段的默认值需要设置为表达式&#xff0c;但在旧版本&#xff08;8.0.13&#xff09;前只支持设置字面量&#xff0c;参考官方文档&#xff1a;MySQL :: MySQL 8.0 Reference Manual :: 11.6 Data Type Default Values。 PS&#xff1a;还有说是考虑减…

【刷题题解】编辑距离

给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 这道题也是&#xff0c;一眼动态规划&#xff0c;乍一看感觉很复杂&#xff0c;仔细思考…

4.0 HDFS 配置与使用

之前提到过的 Hadoop 三种模式&#xff1a;单机模式、伪集群模式和集群模式。 单机模式&#xff1a;Hadoop 仅作为库存在&#xff0c;可以在单计算机上执行 MapReduce 任务&#xff0c;仅用于开发者搭建学习和试验环境。 伪集群模式&#xff1a;此模式 Hadoop 将以守护进程的…

2020年通信工程师初级专业实务真题

文章目录 一、第1章 现代通信网概述&#xff1a;信令网、同步网、管理网。第10章 通信业务&#xff1a;通信产业链&#xff0c;通信终端的分类&#xff0c;通信业务的定义及分类二、第3章 接入网&#xff1a;无线接入网的优点&#xff0c;接入网的接口&#xff08;UNI&#xff…

tar包部署nginx

理论部分 1.基本概念​ Nginx&#xff08;engine x&#xff09;是一个高性能的HTTP和反向代理Web服务器&#xff0c;同时也提供了IMAP、POP3、SMTP服务。中国大陆使用Nginx网站用户有百度、京东、新浪、网易、腾讯、淘宝等。 2.主要用途​ 在连接高并发的情况下&#xff0c;N…

JavaWeb之HTML-CSS --黑马笔记

什么是HTML ? 标记语言&#xff1a;由标签构成的语言。 注意&#xff1a;HTML标签都是预定义好的&#xff0c;HTML代码直接在浏览器中运行&#xff0c;HTML标签由浏览器解析。 什么是CSS ? 开发工具 VS Code --安装文档和安装包都在网盘中 链接&#xff1a;https://p…

全新 鸿蒙系统

一&#xff0c; 开发框架 基础 二&#xff0c; 官网地址 文档开发&#xff1a;华为HarmonyOS智能终端操作系统官网 | 应用设备分布式开发者生态 三&#xff0c;基础了解 鸿蒙系统是基于 js 和 ts 衍生出来的一个东西 要学 arkts 就要学习 js 和 ts 语法 四&#xff0c…

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(二)

原文&#xff1a;Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第三章&#xff1a;分类 在第一章中&#xff0c;我提到最常见的监督学习任务是回归&#xff08;预测值&#xff09;和分类&#…

仓储物流系统架构平台的设计与实践

随着电子商务和供应链管理的迅速发展&#xff0c;仓储物流系统在现代商业中扮演着至关重要的角色。一个高效、稳定的仓储物流系统能够极大地提升企业的运营效率和客户满意度。本篇博客将探讨仓储物流系统架构平台的设计与实践&#xff0c;介绍其核心组成和关键考虑因素。 ### …

[技术杂谈]如何下载vscode历史版本

网站模板&#xff1a; https://code.visualstudio.com/updates/v1_85 如果你想下载1.84系列可以访问https://code.visualstudio.com/updates/v1_84​​​​​​ 然后看到&#xff1a; 选择对应版本下载即可&#xff0c;我是windows x64系统选择x64即可开始下载

开源节点框架STNodeEditor使用

节点&#xff0c;一般都为树形Tree结构&#xff0c;如TreeNode&#xff0c;XmlNode。 树形结构有其关键属性Parent【父节点】&#xff0c;Children【子节点】 LinkedListNode为链表线性结构&#xff0c;有其关键属性Next【下一个】&#xff0c;Previous【上一个】&#xff0c…

零信任实施:计划,执行,一步一步

去年&#xff0c;82% 的网络安全专业人员一直致力于实施零信任&#xff0c;到今年年底&#xff0c;应有 16% 的网络安全专业人员开始实施零信任。 零信任实施的挑战 您可能以前听说过&#xff1a;零信任不是单一产品&#xff0c;而是遵循“从不信任&#xff0c;始终验证”原则…

【Linux】进程间通信 --管道通信

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法…感兴趣就关注我吧&#xff01;你定不会失望。 本篇导航 0. 进程间通信原理1. 匿名管道1.1 通信原理1.2 接口介绍 2. 命名管道2.1 接口介绍 3. 共享内存3.1 通信原理3.2 接口介绍 0. 进…

Java GC-常见垃圾回收器

目录 前言一、垃圾回收器分类二、垃圾回收器介绍1、Serial 收集器2、ParNew 收集器3、Parallel Scavenge 收集器4、Serial Old 收集器5、Parallel Old 收集器6、CMS 收集器&#xff08;多线程标记清除算法&#xff09;7、G1 收集器 三、项目中垃圾收集器选型 前言 Java的垃圾回…

零基础学编程系列,从入门到精通,中文编程开发语言工具下载,编程构件容器件之控制面板构件用法

零基础学编程系列&#xff0c;从入门到精通&#xff0c;中文编程开发语言工具下载&#xff0c;编程构件容器件之控制面板构件用法 一、前言 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载…