.NET Core 使用MailKit发送电子邮件
点击上方蓝字关注“汪宇杰博客”
发送邮件通知的功能在各种系统里都很常见。我的博客也能在有新评论、新回复,或者文章被其他网站引用时向管理员发送邮件。那么在.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:支持
以下代码演示了几个步骤:
注册邮件发送成功后的事件
连接服务器
验证账号
发送邮件
断开连接
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发送电子邮件相关推荐
- net core邮件服务器,C#发送电子邮件(SMTP)及outlook.com账号之概要
这是关于c#发送电子邮件(SMTP)的技术笔记,以"简报"形式呈现. 因为最后成功通过outlook.com发送了邮件,所以,我觉得还是有必要 记录一下其中的要点. 一.技术核心 ...
- FluentEmail - 适用于 .NET 和 .NET Core 的邮件发送库
简介 FluentEmail - 适用于 .NET 和 .NET Core 的邮件发送库 从 .NET 和 .NET Core 发送电子邮件的最简单方法.将 Razor 用于电子邮件模板并使用 Sen ...
- 解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题
在博问中(.net core怎么实现邮件发送)知道了MailKit无法使用阿里云邮件推送服务发送邮件的问题,自已实测也遇到同样的问题,而用自己搭建的邮件服务器没这个问题. 于是,向阿里云提交了工单.. ...
- asp.net web开发框架_Python之Web开发框架学习 发送电子邮件
Django带有易于使用的轻型引擎来发送电子邮件.与Python类似,您只需要导入smtplib.在Django中,您只需要导入django.core.mail.要开始发送电子邮件,请编辑您的项目se ...
- Django如何发送电子邮件?
利用QQ邮箱发送电子邮件 django.core.mail 子包封装了电子邮件的自动发送SMT协议 前其准备: 申请QQ号 用QQ号登陆QQ邮箱并修改设置 用申请到的QQ号和密码登陆到 https:/ ...
- java gmail 发送邮件_Java通过Gmail发送电子邮件
大家好,我刚刚尝试获取一些Java代码,以通过gmail向Java用户发送电子邮件,这就是我所拥有的: @ManagedBean @ViewScoped public class email { // ...
- 【私人订制Python模块库】Pyemail:更方便快捷地发送电子邮件
文章目录 一.前言背景 二.个人首秀模块 三.如何打包模块 四.实际运用例子 一.前言背景 前几天学习了smtplib和email模块,Get了新技能--如何用Python发送电子邮件,还能发送超文本 ...
- SpringBoot整合:Druid、MyBatis、MyBatis-Plus、多数据源、knife4j、日志、Redis,Redis的Java操作工具类、封装发送电子邮件等等
SpringBoot笔记 一.SpringBoot 介绍 1.1.SpringBoot简介 SpringBoot 是一个快速开发的框架, 封装了Maven常用依赖.能够快速的整合第三方框架:简化XML ...
- Spring Boot - 发送电子邮件
文章目录 环境 发送邮件 邮箱设置 项目结构 配置 编码 测试 参考 环境 操作系统: Windows 10 x64 集成开发环境: Spring Tool Suite 4 Version: 4.14 ...
最新文章
- 一位中学计算机老师的英语作文,我的老师英语作文(精选14篇)
- PyTorch中nn.Module类中__call__方法介绍
- SQL Server代理(8/12):使用SQL Server代理外部程序
- js数据类型判断和数组判断
- VTK:几何对象之GeometricObjectsDemo
- submodule切换分支_git子模块分支会随主项目的分支切换吗?
- 【译】无限滚动加载最佳实践
- 吃货注意接收,精美美食图片壁纸来喽
- 代码刚提交暂存区,组长突然要我把新增代码 Commit另一分支怎么办?
- Python基本操作(一) 安装软件及开发工具
- 2018 中国Linux内核开发者大会
- 送给孩子的10句人生箴言
- 虚幻4引擎开发的手游_虚幻引擎 4 手游《绝地求生:刺激战场》 开发经验分享...
- Pycharm提示No Python interpreter selected怎么解决
- 4.16 广推科技现场面试
- 51单片机实现简易计算机,Keil4代码Proteus工程一步到位
- 5G新型网络架构关键技术 — 无线mesh与动态自组网络和无线资源调度与共享
- 你造吗,Oracle SQLplus 也有History命令了
- dotnet Core 启动地址及端口配置()
- 判断矩阵一致性检验的Matlab源程序代码