愚公系列2023年02月 .NET CORE工具案例-使用MailKit使用POP3协议进行邮件读取

Posted 微软MVP Eleven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了愚公系列2023年02月 .NET CORE工具案例-使用MailKit使用POP3协议进行邮件读取相关的知识,希望对你有一定的参考价值。

前言

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



以上是关于愚公系列2023年02月 .NET CORE工具案例-使用MailKit使用POP3协议进行邮件读取的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#愚公系列2023年03月 .NET CORE工具案例-StackExchange.Redis代码变量方式实现商品秒杀

#yyds干货盘点#愚公系列2023年03月 .NET CORE工具案例-.NET Core使用QuestPDF

#yyds干货盘点#愚公系列2023年02月 .NET/C#知识点-EF Core性能优化之显示编译

#yyds干货盘点#愚公系列2023年02月 .NET/C#知识点-程序运行计时的总结

#yyds干货盘点#愚公系列2023年02月 .NET/C#知识点-区块链概念和实现

#yyds干货盘点#愚公系列2023年02月 .NET/C#知识点-List转成字符串的总结