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

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

时间:2023-03-17 23:31:43浏览次数:61  
标签:yyds 03 端口 SMTP 25 new message com 邮件

(文章目录)


前言

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

SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。

邮箱类型 POP3服务器 SMTP服务器
【QQ邮箱】 pop.qq.com(端口:110) smtp.qq.com(端口:25)
【sina.com】 pop3.sina.com.cn(端口:110) smtp.sina.com.cn(端口:25)
【sinaVIP】 pop3.vip.sina.com (端口:110) smtp.vip.sina.com (端口:25)
【sohu.com】 pop3.sohu.com(端口:110) smtp.sohu.com(端口:25)
【126邮箱】 pop.126.com(端口:110) smtp.126.com(端口:25)
【139邮箱】 POP.139.com(端口:110) SMTP.139.com(端口:25)
【163.com】 pop.163.com(端口:110) smtp.163.com(端口:25)
【QQ企业邮箱】 pop.exmail.qq.com (SSL启用 端口:995) smtp.exmail.qq.com(SSL启用 端口:587/465)
【yahoo.com】 pop.mail.yahoo.com smtp.mail.yahoo.com
【yahoo.com.cn】 pop.mail.yahoo.com.cn(端口:995) smtp.mail.yahoo.com.cn(端口:587)
【HotMail】 pop3.live.com(端口:995) smtp.live.com(端口:587)
【 Gmail】 pop.gmail.com(SSL启用端口:995) smtp.gmail.com(SSL启用 端口:587)
【263.net】 pop3.263.net(端口:110) smtp.263.net(端口:25)
【263.net.cn】 pop.263.net.cn(端口:110) smtp.263.net.cn(端口:25)
【21cn.com】 pop.21cn.com(端口:110) smtp.21cn.com(端口:25)
【Foxmail】 POP.foxmail.com(端口:110) SMTP.foxmail.com(端口:25)
【china.com】 pop.china.com(端口:110) smtp.china.com(端口:25)
【tom.com】 pop.tom.com(端口:110) smtp.tom.com(端口:25)

一、使用MailKit使用SMTP协议进行邮件发送

1.安装MailKit程序包

在这里插入图片描述

2.发送操作文件代码

本代码以.NET 7为主

using MailKit.Net.Smtp;
using MimeKit;
using MimeKit.Utils;

namespace ConsoleTest
{
    public class MailKitHelper
    {
        /// <summary>
        /// 创建一个简单的带有图片附件的邮件消息
        /// </summary>
        /// <returns></returns>
        public static MimeMessage CreateSimpleMessageOfImageAttachments()
        {
            var message = new MimeMessage();
            message.From.Add(new MailboxAddress("愚公搬代码", "[email protected]"));
            message.To.Add(new MailboxAddress("愚公搬代码", "[email protected]"));
            message.Subject = "MailKit主题";

            var body = new TextPart("plain")
            {
                Text = $"MailKit邮件发送测试"
            };

            //创建带有图片附件的内容
            string imgPath = @"C:\Users\Happy\Pictures\Saved Pictures\2d0e6f4495ee9cab920b2bdaeb155e37.jpeg";
            var attachment = new MimePart("image", "jpeg")
            {
                Content = new MimeContent(File.OpenRead(imgPath), ContentEncoding.Default),
                ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
                ContentTransferEncoding = ContentEncoding.Base64,
                FileName = Path.GetFileName(imgPath)
            };

            //创建混合容器合并邮件内容
            var multipart = new Multipart("mixed");
            multipart.Add(body);
            multipart.Add(attachment);
            message.Body = multipart;
            //message.Body = new TextPart("plain")
            //{
            //    Text = $"MailKit邮件发送测试"
            //};
            return message;
        }
        /// <summary>
        /// 创建一个简单的带有图片附件的Html邮件消息
        /// </summary>
        /// <returns></returns>
        public static MimeMessage CreateSimpleMessageOfImageHtmlAttachments()
        {
            var message = new MimeMessage();
            message.From.Add(new MailboxAddress("愚公搬代码", "[email protected]"));
            //多个收件人
            List<InternetAddress> AcceptEmailAddressList = new List<InternetAddress>();
            AcceptEmailAddressList.Add(new MailboxAddress("愚公搬代码", "[email protected]"));
            AcceptEmailAddressList.Add(new MailboxAddress("愚公搬代码", "[email protected]"));
            message.To.AddRange(AcceptEmailAddressList);
            message.Subject = "这是一个简单的带有图片附件的HTML邮件消息";

            var builder = new BodyBuilder();

            //注意:builder中TextBody与HtmlBody同时存在只会显示HtmlBody内容
            //设置纯文本消息
            builder.TextBody = $"1-这是一个纯文本内容\n";

            //创建带有图片附件的内容且嵌套在Html模板中
            string imgPath = @"C:\Users\Happy\Pictures\Saved Pictures\2d0e6f4495ee9cab920b2bdaeb155e37.jpeg";
            var image = builder.LinkedResources.Add(imgPath);
            image.ContentId = MimeUtils.GenerateMessageId();

            //设置html消息
            string strHtml = $"<p style='color:red'><b >2-愚公搬代码 你好<b><br/></p>" +
                $"<p><i>这是我在进行测试简单带有图片附件的HTML邮件的测试<i><br/></p>" +
                $"<p><code>---愚公搬代码<code><br/></p>";
            builder.HtmlBody = string.Format(strHtml);

            ////设置日历文件
            //string calendarFile = @"C:\Users\CoffeeMilk\Pictures\MES软件开发启动会.ics";
            //builder.Attachments.Add(calendarFile);
            //合并消息
            message.Body = builder.ToMessageBody();

            return message;
        }
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="needSendMessage">需要发送的邮件消息</param>
        public static void SendEmail(MimeMessage needSendMessage)
        {
            using (var smtpClient = new SmtpClient())
            {
                smtpClient.MessageSent += (sender, args) => { Console.WriteLine("发送邮件状态:" + args.Response); };
                smtpClient.ServerCertificateValidationCallback = (s, c, h, e) => true; 
                smtpClient.Connect("smtp.qq.com", 25, MailKit.Security.SecureSocketOptions.StartTls);
                smtpClient.Authenticate("[email protected]", "ikuwynygvxtcdife");//这个不是qq密码,是开启imap时候的16位授权码
                smtpClient.Send(needSendMessage);
                smtpClient.DisconnectAsync(true);
            }
        }
    }
}

发送附件邮件

//创建邮件
var MimeMessage = ConsoleTest.MailKitHelper.CreateSimpleMessageOfImageAttachments();
//发送邮件
ConsoleTest.MailKitHelper.SendEmail(MimeMessage);

在这里插入图片描述

发送html邮件

//创建邮件
var MimeMessage = ConsoleTest.MailKitHelper.CreateSimpleMessageOfImageHtmlAttachments();
//发送邮件
ConsoleTest.MailKitHelper.SendEmail(MimeMessage);

在这里插入图片描述

标签:yyds,03,端口,SMTP,25,new,message,com,邮件
From: https://blog.51cto.com/u_15437432/6128462

相关文章

  • 【2023全球半导体IC新品盛宴】一年一度Embedded World全球顶级嵌入式会展结束,盘点各大
     今年我们国内也有越来越多的厂家开始参展,下面逐一将这三天搜集整理的资讯给大家做个分享【视频版】https://www.bilibili.com/video/BV1CX4y1f7Fx【ST意法半导体......
  • 总结20230317
    今天是周五,所以是课最多的一天,但是还是很高兴的,因为上完课迎接我的就是假期,可以说是苦尽甘来吧。今天的课是计算机网络、概率论、web应用开发技术、数学建模。计算机网络......
  • 2023-03-17 堆和优先队列
    01_编译的详细过程我们这里虽然介绍的是c程序的编译过程,但是实际上所有编译型语言的编译过程,大致是类似的编译的四个过程我们平时编译时,不管是通过IDE图形界面来编译......
  • 爬虫----day03()
    昨日回顾#1request高级用法 -解析josn:发http的请求,返回的数据,可能是xml格式,json格式 request.get().json()-ssl认证 -http和https的区别 -ht......
  • 2023/03/15刷题
    B.SorttheArray链接B.SorttheArray这个题原本也是不会然后看了别人的题解,以及学长给了一个思路学长给的思路就是找到最长的可以翻转的区间然后把这个区间翻转过......
  • 2023/03/12刷题
    A.ApplemanandToastman链接A.ApplemanandToastman这个题要计算最大值所以我们肯定直接,每次都减少最少的那个,然后使用一个变量每次把值加上最后打印出来结果就可......
  • 2023/03/13刷题
    C.BoxesPacking链接C.BoxesPacking这个题就是找相同的数字的最大值.因为每一个数字都要放在一个盒子里面打印就可以#include<iostream>#include<algorithm>#i......
  • 2023/03/14刷题
    A.IQtest链接A.IQtest这个题就是给一个数数组,数组有两种情况。要么有n-1个奇数和一个偶数要么有n-1个偶数和一个奇数让我们求出这一个奇数和一个偶数所在数组......
  • day3 | 203. 移除链表元素,206. 反转链表,707. 设计链表
    203.移除链表元素 题目描述 给你一个链表的头节点head和一个整数val,删除链表中的那些存储的值为val的节点,并且返回新的头节点。 思路: 1.创建一个虚拟头节点,......
  • 20230317
    数据结构remake第一天线性表的操作////babyDataStructrue.cpp//dataStructure////Createdbyon2023/3/17.#include<stdio.h>#defineN10#defineMAX20......