Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >.NET Core 使用MailKit发送电子邮件

.NET Core 使用MailKit发送电子邮件

作者头像
Edi Wang
发布于 2019-07-08 11:43:54
发布于 2019-07-08 11:43:54
6.1K00
代码可运行
举报
文章被收录于专栏:汪宇杰博客汪宇杰博客
运行总次数:0
代码可运行

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var messageToSend = new MimeMessage
{
    Sender = new MailboxAddress("发件人姓名", "发件人Email地址"),
    Subject = "主题",
};

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
messageToSend.From.Add(new MailboxAddress("发件人姓名", "发件人邮箱账号名"));

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
messageToSend.Body = new TextPart(TextFormat.Html) { Text = bodyText };

或者纯文本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
messageToSend.Body = new TextPart(TextFormat.Plain) { Text = bodyText };

添加收件人信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
messageToSend.To.Add(new MailboxAddress("收件人Email地址"));

添加抄送(CC)信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
messageToSend.Cc.Add(new MailboxAddress("抄送者Email地址"));

使用Outlook.com发送电子邮件

微软Office 365的outlook支持SMTP协议。

服务器地址:smtp-mail.outlook.com

端口:587

SSL:支持

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

  1. 注册邮件发送成功后的事件
  2. 连接服务器
  3. 验证账号
  4. 发送邮件
  5. 断开连接
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)中发送邮件的效果:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 汪宇杰博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MailKit: 在 .NET 中实现高效电子邮件发送与接收
在现代应用程序中,电子邮件仍然是重要的通讯方式之一。无论是个人应用程序还是企业级系统,邮件发送和接收功能都经常是必不可少的。
郑子铭
2025/04/02
1040
MailKit: 在 .NET 中实现高效电子邮件发送与接收
创建基于MailKit和MimeKit的.NET基础邮件服务
       邮件服务是一般的系统都会拥有和需要的功能,但是对于.NET项目来说,邮件服务的创建和使用会较为的麻烦。.NET对于邮件功能提供了System.Net.Mail用于创建邮件服务,该基础服务提供邮件的基础操作,并且使用也较为的简单。对于真正将该功能使用于项目的人,就会慢慢发现其中的优缺点,甚至有些时候不能忍受其中的问题。在这里介绍一种微软用于替代System.Net.Mail的邮件服务组件MailKit和MimeKit,官网地址:http://www.mimekit.net/。GitHub地址:h
彭泽0902
2018/04/02
2.6K0
创建基于MailKit和MimeKit的.NET基础邮件服务
利用java实现发送邮件
电子邮件的应用非常广泛,常见的如在某网站注册了一个账户,自动发送一封激活邮件,通过邮件找回密码,自动批量发送活动信息等。很显然这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。
全栈程序员站长
2022/08/28
1.5K0
利用java实现发送邮件
使用 MimeKit 和 MailKit 发送邮件
MimeKit 给.NET 社区带来了一流的 MIME 解析器,它能处理复杂的各种Mime, 性能好。而且开箱即用支持 S/MIME 和 PGP。MimeKit 和 MailKit 支持最新的国际化的电子邮件标准,是.NET 中为一个支持完整支持这些标准电子邮件库,最近正式发布了1.0版本。如果你想做所有与的电子邮件相关的事情,看看 MimeKit 和 MailKit。我保证你不会失望,它支持.NET/Mono的所有平台,包括移动电话、平板等。 使用方法很简单和.NET的SmtpClient 差不多,不过比
张善友
2018/01/29
2.2K0
ASP.NET 实现发送邮件 + 多个收件人 + 多个附件
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/42011431
DannyHoo
2018/09/13
2.1K0
ASP.NET 实现发送邮件 + 多个收件人 + 多个附件
.NET电子邮件高效处理解决方案
在日常软件开发中,电子邮件处理是一个不可或缺的功能,无论是用户注册验证、通知推送还是日常的业务沟通,都离不开电子邮件的支持。今天大姚给大家分享2款.NET开源、高效、强大的.NET电子邮件处理库,这些库不仅简化了电子邮件的发送、接收和管理工作,还提供了丰富的功能和灵活的配置选项,以满足各种复杂的业务需求。
追逐时光者
2024/08/07
1630
使用.Net发电子邮件小结
电子邮件是通过互联网发出去的,互联网中传输层协议有TCP/IP协议,邮件服务在基于TCP/IP底层协议之上的应用层实现SMTP、POP3、IMAP4等协议,通过这些协议实现了邮件的收发服务。
小蜜蜂
2019/08/06
1.7K0
使用.Net发电子邮件小结
Python: 通过QQ邮箱发送电子邮件
文章背景:自学Python编程快速上手中关于发送电子邮件的章节。本文讲述如何通过Python,使用QQ邮箱发送电子邮件。
Exploring
2022/09/20
3.3K0
Python: 通过QQ邮箱发送电子邮件
Java一分钟之-JavaMail:发送电子邮件
在日常开发中,发送电子邮件是一项常见的需求,比如用户注册确认、密码重置通知、系统报警等场景。Java提供了强大的JavaMail API来简化邮件发送过程。本文将深入浅出地介绍如何使用JavaMail发送电子邮件,包括配置步骤、常见问题、易错点及避免策略,并附上实战代码示例。
Jimaks
2024/06/01
1.4K0
邮件发送功能开发
作为一名.Net开发,"邮件发送"功能的开发和使用是必须要掌握的,因为这个功能作为“消息推送”的一种手段经常出现在各种.Net系统中,所以本文将对.Net平台下的“邮件发送”,做一个细致的分析! 一、who需要邮件功能 1、服务提供方:需提供邮件收发客户端或Web服务。如:QQ邮箱、GMail邮箱、126、163等知名邮件服务提供商。注:如果你使用的第三方不知名邮件服务商提供的邮件收发服务,通过其发出的邮件,可能会被其他知名邮件服务提供商的STMP服务器视为是"恶意邮件或垃圾邮件"! 2、消息推送:消息推送
郑小超.
2018/01/26
4.1K0
QQ授权,接收代码发送的电子邮件
1.代码(两处修改自己的QQ+授权码),授权码开启权限后获取 package com.itqf.Utils; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.net.Inet4Address; import java.util.Properties;
2020/10/23
1.7K0
QQ授权,接收代码发送的电子邮件
深入探究电子邮件三大协议
电子邮件系统中,SMTP、POP 和 IMAP 这三种协议起着至关重要的作用。SMTP 负责邮件的发送,将邮件从发件人传输到邮件服务器,并在服务器之间转发。POP 负责邮件的接收,允许用户从邮件服务器下载邮件到本地设备进行离线阅读,下载后通常会从服务器删除此邮件。IMAP 也负责邮件的接收,它提供了更灵活的邮件管理功能,用户可以在多个设备上同步邮件状态,并且邮件始终保存在服务器上,方便随时访问和管理。这三大协议相互配合,共同构建了一个高效、稳定的电子邮件系统。
M.Talen
2024/09/09
9200
深入探究电子邮件三大协议
利用Python自动发送电子邮件
收发邮件几乎是每个人每天都需要做的一件事情,对于一些固定每天需要发送的邮件或者是同时需要发送好几十好几百份的时候,我们可以考虑借助Python来自动发送邮件。
张俊红
2019/03/06
1.5K0
利用Python自动发送电子邮件
31.1企业级开发进阶3.1:发送电子邮件
从古代的八百里加急,到现在的电子邮件,邮件的发展见证了上下五千年的发展史,这些当然是废话,只是要说说邮件的重要性。
大牧莫邪
2018/08/27
1.7K0
如何使用Java发送电子邮件
使用Java编程语言可以轻松方便地实现自动发送电子邮件,以此来提高效率和准确性,下面将介绍如何使用Java编程语言及相关支持库发送电子邮件。
用户1289394
2024/01/13
3550
如何使用Java发送电子邮件
System.Net.Mail.SmtpClient通过SSL/TLS协议发送邮件失败问题解决
通过System.Net.Mail使用SSL协议发送邮件失败并报错 System.Net.Mail.SmtpException: Failure sending mail
KenTalk
2020/03/05
1.7K0
电子邮件实现详解(下)
书接上回,上篇中主要介绍了电子邮件协议格式等理论相关内容,这篇中我们从JavaMail、Python的smtplib以及Django的django.core.mail模块三个视角来实现发送邮件这件事。
才浅Coding攻略
2022/12/12
2K0
电子邮件实现详解(下)
python之SMTP发送邮件
假设我们自己的邮件地址是myemail@163.com,对方的邮件地址是friend@qq.com,我们在网易提供的163邮箱界面编写邮件,然后发送给对方。那么,这封邮件是怎么从我方发送到对方的呢?
菲宇
2019/06/13
1.4K0
smtplib:发送电子邮件
由于 smtplib 和 email 是 Python 的标准库,所以通常不需要单独安装。它们在安装 Python 的时候就已经包含了。
luckpunk
2025/01/18
2180
车辆违章查询和限行提醒程序 -- (2) Java实现发送邮件
下面我们介绍如何用Java发送邮件,综合网上资料我制作了一篇肥肠简单的教程,只要把邮箱密码和接收者邮箱账户替换成你需要的即可!!!当然,发送邮件虽然没有成本,但是不如发短信提醒用户来的直接,而且同一个IP和账户发送邮件太多的话,邮件会被识别成为垃圾邮件,用户还得去垃圾箱里面才能看见我们发的邮件,算是有利有弊吧。
浩Coding
2019/07/03
1.2K0
相关推荐
MailKit: 在 .NET 中实现高效电子邮件发送与接收
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验