点击上方蓝字关注“汪宇杰博客”

发送邮件通知的功能在各种系统里都很常见。我的博客也能在有新评论、新回复,或者文章被其他网站引用时向管理员发送邮件。那么在.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安装MailKit:

Visual Studio

Install-Package MailKit

.NET Core CLI

dotnet add package MailKit

构建 MimeMessage

MimeMessage是MailKit里代表一封电子邮件的对象,它和.NET自带的MailMessage类型非常类似。比如添加主题和发件人:

var messageToSend = new MimeMessage

{

Sender = new MailboxAddress("发件人姓名", "发件人Email地址"),

Subject = "主题",

};

添加发件人信息和以前有所不同,MailKit居然支持多个发件人,所以From是一个集合类型,要通过Add方法来添加:

messageToSend.From.Add(new MailboxAddress("发件人姓名", "发件人邮箱账号名"));

邮件正文(Body属性)支持多种格式,最常用的是纯文本和HTML。需要用TextPart类来安排,TextPart的构造函数里可以指定正文格式,例如HTML:

messageToSend.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

端口:587

SSL:支持

以下代码演示了几个步骤:

  1. 注册邮件发送成功后的事件

  2. 连接服务器

  3. 验证账号

  4. 发送邮件

  5. 断开连接

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)中发送邮件的效果:

.NET Core 使用MailKit发送电子邮件相关推荐

  1. net core邮件服务器,C#发送电子邮件(SMTP)及outlook.com账号之概要

    这是关于c#发送电子邮件(SMTP)的技术笔记,以"简报"形式呈现. 因为最后成功通过outlook.com发送了邮件,所以,我觉得还是有必要 记录一下其中的要点. 一.技术核心 ...

  2. FluentEmail - 适用于 .NET 和 .NET Core 的邮件发送库

    简介 FluentEmail - 适用于 .NET 和 .NET Core 的邮件发送库 从 .NET 和 .NET Core 发送电子邮件的最简单方法.将 Razor 用于电子邮件模板并使用 Sen ...

  3. 解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题

    在博问中(.net core怎么实现邮件发送)知道了MailKit无法使用阿里云邮件推送服务发送邮件的问题,自已实测也遇到同样的问题,而用自己搭建的邮件服务器没这个问题. 于是,向阿里云提交了工单.. ...

  4. asp.net web开发框架_Python之Web开发框架学习 发送电子邮件

    Django带有易于使用的轻型引擎来发送电子邮件.与Python类似,您只需要导入smtplib.在Django中,您只需要导入django.core.mail.要开始发送电子邮件,请编辑您的项目se ...

  5. Django如何发送电子邮件?

    利用QQ邮箱发送电子邮件 django.core.mail 子包封装了电子邮件的自动发送SMT协议 前其准备: 申请QQ号 用QQ号登陆QQ邮箱并修改设置 用申请到的QQ号和密码登陆到 https:/ ...

  6. java gmail 发送邮件_Java通过Gmail发送电子邮件

    大家好,我刚刚尝试获取一些Java代码,以通过gmail向Java用户发送电子邮件,这就是我所拥有的: @ManagedBean @ViewScoped public class email { // ...

  7. 【私人订制Python模块库】Pyemail:更方便快捷地发送电子邮件

    文章目录 一.前言背景 二.个人首秀模块 三.如何打包模块 四.实际运用例子 一.前言背景 前几天学习了smtplib和email模块,Get了新技能--如何用Python发送电子邮件,还能发送超文本 ...

  8. SpringBoot整合:Druid、MyBatis、MyBatis-Plus、多数据源、knife4j、日志、Redis,Redis的Java操作工具类、封装发送电子邮件等等

    SpringBoot笔记 一.SpringBoot 介绍 1.1.SpringBoot简介 SpringBoot 是一个快速开发的框架, 封装了Maven常用依赖.能够快速的整合第三方框架:简化XML ...

  9. Spring Boot - 发送电子邮件

    文章目录 环境 发送邮件 邮箱设置 项目结构 配置 编码 测试 参考 环境 操作系统: Windows 10 x64 集成开发环境: Spring Tool Suite 4 Version: 4.14 ...

最新文章

  1. 一位中学计算机老师的英语作文,我的老师英语作文(精选14篇)
  2. PyTorch中nn.Module类中__call__方法介绍
  3. SQL Server代理(8/12):使用SQL Server代理外部程序
  4. js数据类型判断和数组判断
  5. VTK:几何对象之GeometricObjectsDemo
  6. submodule切换分支_git子模块分支会随主项目的分支切换吗?
  7. 【译】无限滚动加载最佳实践
  8. 吃货注意接收,精美美食图片壁纸来喽
  9. 代码刚提交暂存区,组长突然要我把新增代码 Commit另一分支怎么办?
  10. Python基本操作(一) 安装软件及开发工具
  11. 2018 中国Linux内核开发者大会
  12. 送给孩子的10句人生箴言
  13. 虚幻4引擎开发的手游_虚幻引擎 4 手游《绝地求生:刺激战场》 开发经验分享...
  14. Pycharm提示No Python interpreter selected怎么解决
  15. 4.16 广推科技现场面试
  16. 51单片机实现简易计算机,Keil4代码Proteus工程一步到位
  17. 5G新型网络架构关键技术 — 无线mesh与动态自组网络和无线资源调度与共享
  18. 你造吗,Oracle SQLplus 也有History命令了
  19. dotnet Core 启动地址及端口配置()
  20. 判断矩阵一致性检验的Matlab源程序代码

热门文章

  1. 镜像VirtualBox 下安装 CentOS 7搭建python项目
  2. javascriptjquery 判断滚动到页面底部
  3. java多线程编程——锁优化
  4. Swoole入门指南:PHP7安装Swoole详细教程(一)
  5. swf 文件在线播放的,怎么能够下载呢?(除视频外其它都可)
  6. 总结之前做项目中要注意的一些书写规范
  7. Exchange 2010发现拓扑失败
  8. Locations Section of OpenCascade BRep
  9. 2006年4月全国计算机等级考试二级Java语言程序设计
  10. MYSQL 表的修复(不断更新)