首页 > 其他分享 >#yyds干货盘点#【愚公系列】2023年04月 .NET CORE工具案例-使用MailKit使用POP3协议进行邮件读取

#yyds干货盘点#【愚公系列】2023年04月 .NET CORE工具案例-使用MailKit使用POP3协议进行邮件读取

时间:2023-04-05 10:32:25浏览次数:62  
标签:yyds MailKit 04 CORE POP3 var using NET 邮件

前言

1.MailKit简介

MailKit是最流行且最强大的.NET邮件处理框架之一,下面为大家简单介绍MailKit的使用方式(IMAP为例)

2.MailKit功能

  • 安全

    • SASL 身份验证

      • 支持 CRAM-MD5、DIGEST-MD5、LOGIN、NTLM、OAUTHBEARER、PLAIN、SCRAM-SHA-1、SCRAM-SHA-256、SCRAM-SHA-512 和 XOAUTH2 机制。
    • 支持 S/MIME v3.2。

    • 支持 OpenPGP。

    • 支持 DKIM 签名。

    • 支持 ARC 签名。

  • 短信客户端

    • 支持 SSL 和 TLS。

    • 支持 STARTTLS、SIZE、DSN、8BITMIME、pipelining、binarymime 和 SMTPUTF8 扩展。

  • POP3 客户端

    • 支持 SSL 和 TLS。

    • 支持 STLS、UIDL、PIPELINING、UTF8 和 LANG 扩展。

  • IMAP 客户端

    • 支持 SSL 和 TLS。

    • 支持 ACL、配额、文字+、空闲、命名空间、ID、子项、登录禁用、启动、多追加、取消选择、UIDPLUS、CONDSTORE、电子搜索、SASL-ID、压缩、内、启用、QRESYNC、排序、线程、注释、列表扩展、电子排序、元数据、元数据服务器、通知、过滤器、列表状态、排序=显示、特殊用途、创建特殊用途、搜索=模糊、移动、UTF8=接受、UTF8=仅、文字-、附加限制、状态=大小、对象ID、替换、保存、XLIST 和 Google Mail (X-GM-EXT-1) 扩展名。

  • MIME 解析器

    • 灵活:允许覆盖任何 MIME 类型的默认类。

    • 高性能:比市场上任何其他 .NET MIME 解析器都快。性能甚至可以与最快的C++解析器相媲美。

    • 强大:轻松处理各种损坏的 MIME 格式。

  • 所有可能阻止的API都允许通过取消令牌取消。

  • 所有执行 I/O 的 API 都有异步变体。

  • 消息的客户端排序和线程处理。

  • 支持 .NET 4.5、.NET 4.6、.NET 4.7、.NET 4.8、.NET 5.0、.NETStandard 2.0、Xamarin.Android、Xamarin.iOS、Windows Phone 8.1 等。

Github网址:https://github.com/jstedfast/MailKit 在这里插入图片描述

官方网址:http://www.mimekit.net/docs/html/Introduction.htm 在这里插入图片描述

3.POP3协议

POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。

POP 协议支持“离线”邮件处理。其具体过程是:邮件发送到服务器上,电子邮件客户端调用邮件客户机程序以连接服务器,并下载所有未阅读的电子邮件。这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上,一般是PC机或 MAC。一旦邮件发送到 PC 机或MAC上,邮件服务器上的邮件将会被删除。但POP3邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的POP3协议。

一、使用POP3进行邮件处理

1.安装MailKit程序包

在这里插入图片描述

2.读取操作文件代码

using MailKit;
using MailKit.Net.Imap;
using MailKit.Net.Pop3;
using MailKit.Search;
using MailKit.Security;
using MimeKit;

namespace MailKitDemo
{
    /// <summary>
    /// .NET使用MailKit进行邮件处理
    /// </summary>
    class Program
    {
        private const string MAIL_NAME = "2528877987@qq.com";
        private const string MAIL_PASSWORD = "XXXXXXXXXXXXXXXXXXXX";//这个不是qq密码,是开启imap时候的16位授权码
        private const string DIRECTORY = @"D:\";
        static void Main(string[] args)
        {
            using (var client = new Pop3Client())
            {
                client.Connect("pop.qq.com", 110, false);
                client.Authenticate(MAIL_NAME, MAIL_PASSWORD);

                int count = client.GetMessageCount();
                for (int i = count-1; i < count; i--)
                {
                    var message = client.GetMessage(i);
                    var body = message.Body;
                    var Subject = message.Subject;
                }

                client.Disconnect(true);
            }
        }

        /// <summary>
        /// 下载邮件附件
        /// </summary>
        private static void DownloadAttachment(MimeEntity attachment)
        {
            if (attachment is MessagePart)
            {
                var fileName = attachment.ContentDisposition?.FileName;
                var rfc822 = (MessagePart)attachment;

                if (string.IsNullOrEmpty(fileName))
                    fileName = "attached-message.eml";

                var path = Path.Combine(DIRECTORY, fileName);
                using (var stream = File.Create(path))
                    rfc822.Message.WriteTo(stream);
            }
            else
            {
                var part = (MimePart)attachment;
                var fileName = part.FileName;

                var path = Path.Combine(DIRECTORY, fileName);
                using (var stream = File.Create(path))
                    part.Content.DecodeTo(stream);
            }
        }
    }
}


在这里插入图片描述

在这里插入图片描述

标签:yyds,MailKit,04,CORE,POP3,var,using,NET,邮件
From: https://blog.51cto.com/u_15437432/6170261

相关文章

  • #yyds干货盘点#【愚公系列】2023年04月 .NET CORE工具案例-性能监控工具WatchDog的使
    前言所谓日志(Log)是指系统所指定对象的某些操作和其操作结果按时间有序的集合。每个日志文件由日志记录组成,每条日志记录描述了一次单独的系统事件。通常情况下,系统日志是用户可以直接阅读的文本文件,其中包含了一个时间戳和一个信息或者子系统所特有的其他信息。日志文件为服务器......
  • 【230405-2】过定点M(4,2),任意作两条互相垂直的直线l1和l2,分别交xy轴于AB两点,求线段中
    ......
  • 【230405-3】三角形ABC中,AB=2,AC=根号2倍BC。求三角形ABC的最大值?
    ......
  • 在EF Core中为数据表按列加密存储
    假设有User表publicclassUser:Entity<int>{publicintId{get;set;}publicstringUserName{get;set;}publicstringName{get;set;}publicstringIdentificationNumber{get;set;}}其中有身份证号码IdentificationNumber列,需要加密......
  • 【MySQL】MySQL基础04 — SQL学习 — DQL — 排序查询
    SQL学习—DQL—条件查询3.排序查询/*语法: select查询字段 from表名 【where筛选条件】 orderby排序字段【asc|desc】 特点: 1.asc代表升序,desc代表降序 如果不写,默认升序 2.排序字段除了可以是表达式外,还可以是别名 但WHERE后面只能是表达式!! 3.排序......
  • 2023-04-04 哈密尔顿问题和路径压缩
    哈密尔顿问题和路径压缩1哈密尔顿回路和TSP路径与回路哈密尔顿问题偏计算机,欧拉问题偏数学,所以本章我们主要讲哈密尔顿回路和哈密尔顿路径哈密尔顿回路哈密尔顿路径欧拉回路欧拉路径哈密尔顿回路定义从一个点出发,沿着边走,经过每个顶点恰好一次,之后再回到出发点,过程......
  • java学习日记20230406-StringBuilder,StringBuffer,String比较
    StringBuffer,StringBuilder,String比较: StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法相同;String:不可变字符序列,效率低,但是复用率高;StringBuffer:可变字符序列,效率较高,线程安全;StringBuider:可变字符序列,效率极高,线程不安全  String使用注意说明: ......
  • java学习日记20230406-StringBuilder类
    StringBuilder类一个可变的字符序列,此类提供一个与StringBuffer兼容的Api,但不保证同步。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,因为在大多数实现中,他比StringBuffer要快----StringBuilder不是线程安全的在S......
  • C/C++物业费管理系统[2023-04-04]
    C/C++物业费管理系统[2023-04-04]程序设计题:物业费管理系统出题人:俞琼面向专业:软件工程难度等级:41问题描述为维护小区正常的运营管理,居民应按时缴纳小区管理费,请设计一个物业费管理系统,对小区的住户进行收费管理。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基......
  • java学习日记20230405-StringBuffer类
    StringBuffer类java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删很多方法与String相同,但StringBuffer是可变长度的StringBuffer是一个容器StringBuffer是final类实现了Serializable接口,可以保存到文件或网络传输继承了抽象类AbstractStringBuiderAbstra......