公司网站建设的项目工作分解结构,优质的响应式网站建设,网页制作哪里便宜,瀚钦科技网站建设点击上方蓝字关注“汪宇杰博客”发送邮件通知的功能在各种系统里都很常见。我的博客也能在有新评论、新回复#xff0c;或者文章被其他网站引用时向管理员发送邮件。那么在.NET Core里#xff0c;如何实现发送电子邮件呢#xff1f;准备工作我的案例会利用微软outlook.com的… 点击上方蓝字关注“汪宇杰博客”发送邮件通知的功能在各种系统里都很常见。我的博客也能在有新评论、新回复或者文章被其他网站引用时向管理员发送邮件。那么在.NET Core里如何实现发送电子邮件呢准备工作我的案例会利用微软outlook.com的个人版邮箱作为发件账号发送邮件使用SMTP协议。但你也可以使用其他支持SMTP的邮箱系统来做实验。anyway首先就是你得有一个邮箱账号啦~关于 MailKit很多有经验的.NET老程序员可能会说发邮件有什么难的十几年前我们就能用.NET Framework自带的SmtpClient发邮件了并且.NET Core也能用。为啥还要写这篇文章但是万物皆有始有终最近我突然发现SmtpClient 已经被微软标记为弃用并且微软官方钦点了一个继任者MailKit也就是本文要介绍的东西。https://github.com/jstedfast/MailKit这是一个基于MimeKit的跨平台.NET邮件库支持IMAP、POP3、SMTP协议。它相比.NET自带的SmtpClient支持更广泛的协议和更现代的电子邮件标准。因此微软官方建议SmtpClient只用来兼容老应用如果开发新应用的话直接使用MailKit。并且它是在MIT协议下开源的。意味着非常自由的使用也可以由全世界的.NET开发者参与贡献一起维护和完善这个东西。使用SMTP协议发送邮件我得到这个好东西以后第一步就是将使用SmtpClient的老代码迁移到MailKit。因此我的案例里只使用SMTP这一种协议来发邮件。安装包首先使用NuGet安装MailKitVisual StudioInstall-Package MailKit.NET Core CLIdotnet add package MailKit构建 MimeMessageMimeMessage是MailKit里代表一封电子邮件的对象它和.NET自带的MailMessage类型非常类似。比如添加主题和发件人var messageToSend new MimeMessage{ Sender new MailboxAddress(发件人姓名, 发件人Email地址), Subject 主题,};添加发件人信息和以前有所不同MailKit居然支持多个发件人所以From是一个集合类型要通过Add方法来添加messageToSend.From.Add(new MailboxAddress(发件人姓名, 发件人邮箱账号名));邮件正文Body属性支持多种格式最常用的是纯文本和HTML。需要用TextPart类来安排TextPart的构造函数里可以指定正文格式例如HTMLmessageToSend.Body new TextPart(TextFormat.Html) { Text bodyText };或者纯文本messageToSend.Body new TextPart(TextFormat.Plain) { Text bodyText };添加收件人信息messageToSend.To.Add(new MailboxAddress(收件人Email地址));添加抄送CC信息messageToSend.Cc.Add(new MailboxAddress(抄送者Email地址));使用Outlook.com发送电子邮件微软Office 365的outlook支持SMTP协议。服务器地址smtp-mail.outlook.com端口587SSL支持以下代码演示了几个步骤注册邮件发送成功后的事件连接服务器验证账号发送邮件断开连接using (var smtp new MailKit.Net.Smtp.SmtpClient()){ smtp.MessageSent (sender, args) { // args.Response }; smtp.ServerCertificateValidationCallback (s, c, h, e) true; await smtp.ConnectAsync(smtp-mail.outlook.com, 587, SecureSocketOptions.StartTls); await smtp.AuthenticateAsync(账号, 密码); await smtp.SendAsync(messageToSend); await smtp.DisconnectAsync(true);}MessageSent事件里可以通过args参数获得服务器的响应信息以便于记录Log。连接outlook.com的服务器需要设置为SecureSocketOptions.StartTls不然会拒绝连接。对于其他服务器可以试试 SecureSocketOptions.Auto效果以下是MailKit在我的博客系统使用的邮件库Edi.TemplateEmail中发送邮件的效果