【愚公系列】2022年12月 .NET CORE工具案例-使用MailKit使用SMTP协议进行邮件发送
前言
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,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。
一、使用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("愚公搬代码", "2528877987@qq.com"));
message.To.Add(new MailboxAddress("愚公搬代码", "2528877987@qq.com"));
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("愚公搬代码", "2528877987@qq.com"));
//多个收件人
List<InternetAddress> AcceptEmailAddressList = new List<InternetAddress>();
AcceptEmailAddressList.Add(new MailboxAddress("愚公搬代码", "2528877987@qq.com"));
AcceptEmailAddressList.Add(new MailboxAddress("愚公搬代码", "13960699696@139.com"));
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("2528877987@qq.com", "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);
- 点赞
- 收藏
- 关注作者
评论(0)