【愚公系列】2022年12月 .NET CORE工具案例-使用MailKit使用IMAP协议进行邮件读取

举报
愚公搬代码 发表于 2022/12/30 23:07:58 2022/12/30
【摘要】 前言 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 机...

前言

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.IMAP协议

IMAP(Internet Message Access Protocol)以前称作交互邮件访问协议(Interactive Mail Access Protocol),是一个应用层协议。IMAP是斯坦福大学在1986年开发的一种邮件获取协议。它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。当前的权威定义是RFC3501。IMAP协议运行在TCP/IP协议之上,使用的端口是143。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。

一、使用MailKit进行邮件处理

1.安装MailKit程序包

在这里插入图片描述

2.读取操作文件代码

本代码以.NET 7为主

using MailKit;
using MailKit.Net.Imap;
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 = "XXXXXXXXXX";//这个不是qq密码,是开启imap时候的16位授权码
        private const string DIRECTORY = @"D:\";
        static void Main(string[] args)
        {
            using (var client = new ImapClient())
            {
                //不加密
                client.Connect("imap.qq.com", 143, SecureSocketOptions.None);
                //加密
                //client.Connect("imap.qq.com", 993, SecureSocketOptions.SslOnConnect);
                //登入邮箱
                client.Authenticate(MAIL_NAME, MAIL_PASSWORD);
                //打开邮件文件夹
                client.Inbox.Open(FolderAccess.ReadWrite);

                // 读取方式一:可以预先筛选邮件
                // search for messages where the Subject header contains either "MimeKit" or "MailKit"
                //var query = SearchQuery.SubjectContains("MimeKit").Or(SearchQuery.SubjectContains("MailKit"));
                //var uids = client.Inbox.Search(query);

                // 读取方式二:读取所有邮件
                var uids = client.Inbox.Search(SearchQuery.All);
                foreach (var uid in uids)
                {
                    var message = client.Inbox.GetMessage(uid);

                    // 操作邮件一:读取邮件标题
                    string subject = message.Subject;

                    // 操作邮件二:读取正文
                    string body = message.TextBody ?? string.Empty;

                    // 操作邮件三:下载邮件附件
                    var attachments = message.Attachments;
                    if (attachments.Any())
                    {
                        foreach (var attachment in attachments)
                            DownloadAttachment(attachment);
                    }

                    // 操作邮件四:移动邮件(移动至删除文件夹)
                    client.Inbox.MoveTo(uid, client.GetFolder(SpecialFolder.Trash));

                    // 操作邮件五:删除邮件 - 将邮件标记为删除、最后删除
                    client.Inbox.AddFlags(uid, MessageFlags.Deleted, true);
                    client.Inbox.Expunge();
                }

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

在这里插入图片描述

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。