前言

以前写的 SMTP Client 相关文章:

Asp.net core 学习笔记 ( Smtp and Razor template 电子邮件和 Razor 模板 )

ASP.NET Email + WebConfig

Email 关于 POP3 IMAP SMTP office365 Outlook Gmail G-Suit shared mailbox小小理解

.NET build-in 的 SMTP Client 已经废弃了. 官网已经给出告示:

它推荐是用 MailKit. MailKit 是一个功能齐全的 mail client library, 底层用的是 MimeKit 作者都是同一个人, 它可以实现 SMTP, POP3, IMAP 等功能.

如果只是想要 SMTP Client 功能, FluentEmail 也是一个不错的选择.

参考:

MailKit Docs

安装

dotnet add package MailKit

SmtpClient

using var client = new SmtpClient();
await client.ConnectAsync(
host: "smtp.gmail.com",
port: 587,
options: MailKit.Security.SecureSocketOptions.StartTls
);
await client.AuthenticateAsync("mygmail@gmail.com", "mypassword");
client.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls13; // 这个是默认值

创建 SmtpClient 对象, 链接 SMTP Server, 输入 username, password. 就可以了

SslProtocols 默认就是 TLS1.2 | 1.3 了 (2022年 2 月起, smtp.office365.com 不再支持 TLS 1.0 和 1.1 了). 不需要特别设置.

提醒: Gmail / Outlook 开启 Two-factor 的话, mypassword 不可以使用 user password 哦, 需要改用 App Password,

参考:

Youtube – How to get a Google App Password (full tutorial) for Gmail

Docs – Using app passwords with apps that don't support two-step verification for Outlook

p.s. hotmail, outlook, office365 的 host 是 smtp.office365.com, port 那些是一样的

MimeMessage

var message = new MimeMessage();
message.From.Add(new MailboxAddress("My Name", "mygmail@gmail.com"));
message.To.Add(new MailboxAddress("Hengkeat Yam", "hengkeat87@gmail.com"));
message.ReplyTo.Add(new MailboxAddress("Keat Keat", "keatkeat87@live.com"));
var builder = new BodyBuilder
{
HtmlBody = @"
<!DOCTYPE html>
<html lang=""en"" xmlns=""http://www.w3.org/1999/xhtml"" xmlns:o=""urn:schemas-microsoft-com:office:office"">
<head>
<meta charset=""UTF-8"">
<meta name=""viewport"" content=""width=device-width,initial-scale=1"">
<meta name=""x-apple-disable-message-reformatting"">
<title></title>
</head>
<body style=""color:red"">
test email only
</body>
</html>",
TextBody = "Test Email Only"
};
var rootPath = Path.Combine(AppContext.BaseDirectory, @"..\..\..\");
builder.Attachments.Add("tifa2.PNG", await File.ReadAllBytesAsync(Path.Combine(rootPath, "tifa2.PNG")));
message.Subject = "Test Email";
message.Body = builder.ToMessageBody();

创建一个 MimeMessage, 输入 from, to, cc, bcc, replyto, subject, body, attachments 就可以了. 都是一般发邮件会填入的资料.

最后 send, 完事.

await client.SendAsync(message);
await client.DisconnectAsync(quit: true);

ASP.NET Core Library – MailKit SMTP Client的更多相关文章

  1. Asp.Net Core采用MailKit部署到Linux Docker连接邮件服务器报错

    前段时间看文章了解到发邮件的SmtpClient已经过时了,微软官方推荐大家用其他解决方案,例如MailKit. https://docs.microsoft.com/zh-cn/dotnet/api ...

  2. ASP.NET CORE使用MailKit的一个故障点分析

    ASP.NET CORE下有需要发邮件的需求,但是原来framework下的 system.net.mail,没有实现smtpclient的功能(当时看是没有,说是准备并入.net core来着),所 ...

  3. Asp.net core 学习笔记 ( Smtp and Razor template 电子邮件和 Razor 模板 )

    refer : https://dotnetcoretutorials.com/2017/08/20/sending-email-net-core-2-0/ https://ppolyzos.com/ ...

  4. 《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文!

    写在开始 三年前,曾写过一篇文章:从.NET和Java之争谈IT这个行业,当时遭到某些自认为懂得java就了不起的Javaer抨击, 现在可以致敬伟大的.NET斗士甲骨文了 (JDK8以上都需要收费, ...

  5. ASP.NET Core and .NET Core Library Support

    ASP.NET Core and .NET Core Library Support 详情参见:https://github.com/linezero/NETCoreLibrary/blob/mast ...

  6. ASP.NET CORE MVC 2.0 项目中引用第三方DLL报错的解决办法 - InvalidOperationException: Cannot find compilation library location for package

    目前在学习ASP.NET CORE MVC中,今天看到微软在ASP.NET CORE MVC 2.0中又恢复了允许开发人员引用第三方DLL程序集的功能,感到甚是高兴!于是我急忙写了个Demo想试试,我 ...

  7. 基于 ASP.NET Core 2.1 的 Razor Class Library 实现自定义错误页面的公用类库

    注意:文中使用的是 razor pages ,建议使用 razor views ,使用 razor pages 有一个小坑,razor pages 会用到 {page} 路由参数,如果应用中也用到了这 ...

  8. 用ASP.NET Core 1.0中实现邮件发送功能

    准备将一些项目迁移到 asp.net core 先从封装类库入手,在遇到邮件发送类时发现在 asp.net core 1.0中并示提供SMTP相关类库,于是网上一搜发现了MailKit 好东西一定要试 ...

  9. 如何在 ASP.NET Core 中发送邮件

    前言 我们知道目前 .NET Core 还不支持 SMTP 协议,当我么在使用到发送邮件功能的时候,需要借助于一些第三方组件来达到目的,今天给大家介绍两款开源的邮件发送组件,它们分别是 MailKit ...

  10. 【ASP.NET Core】EF Core - “影子属性” 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1

    [ASP.NET Core]EF Core - “影子属性”   有朋友说老周近来博客更新较慢,确实有些慢,因为有些 bug 要研究,另外就是老周把部分内容转到直播上面,所以写博客的内容减少了一点. ...

随机推荐

  1. 构筑开放式大数据架构,Apache Kyuubi和NDH荣登开源OSCAR

    [点击了解更多网易大数据技术] 在9月16日召开的"2022 OSCAR开源产业大会"上,中国信息通信研究院发布了一系列开源研究成果和开源表彰,网易数帆发起的开源项目Apache ...

  2. 在缩小浏览器宽度的时候,图片会超出li的宽度

    要确保在缩小浏览器宽度时,图片不会超出 <li> 元素的宽度,您可以为描述文本添加一些样式,以便让图片适应于 <li> 元素.一种常见的方法是使用 CSS 中的 max-wid ...

  3. let 和 const 是 JavaScript 中用于声明变量的关键字

    let 和 const 是 JavaScript 中用于声明变量的关键字. let 关键字用于声明可变(可重新赋值)的变量.通过使用 let 关键字声明的变量可以在其作用域内被重新赋值.例如: let ...

  4. [oeasy]python0025_ 顺序执行过程_流水_流程_执行次序

    顺序执行过程_流水_流程_执行次序 回忆上次内容 上次 熟悉了 vim编辑器 操作 作用 w 向前移动光标一个word b 向后移动光标一个word :r oeasy.py 读取文件到当前文件缓存 g ...

  5. oeasy教您玩转vim - 58 - # 块可视化

    ​ 块可视化编辑 回忆上节课内容 上次我们了解到行可视模式 行可视模式 V 也可配合各种motion o切换首尾 选区的开头和结尾是mark标记 开头是 '< 结尾是 '> 可以在选区内进 ...

  6. 网络基础 登录对接CAS-跨域导致的一个意想不到的Bug

    登录对接CAS-跨域导致的一个意想不到的Bug 背景描述 业务需求是平台登录,接入Cas验证 问题描述 平台登录页,点击登录方式,跳转Cas登录页,提交登录请求,结果发现,又返回平台登录页: 再次点击 ...

  7. Kubernetes 存储概念之Volumes介绍

    Volumes 默认情况下容器中的磁盘文件是非持久化的,对于运行在容器中的应用来说面临两个问题,第一:当容器挂掉,K8S重启它时,文件将会丢失:第二:当Pod中同时运行多个容器,容器之间需要共享文件时 ...

  8. 【Tool】常用软件地址(装机备用)

    浏览器: 360极速 https://browser.360.cn/ee/ 谷歌 https://www.google.cn/chrome/ 社交通讯 微信 https://weixin.qq.com ...

  9. 举例说明:ChatGPT和百度文心一言的差距

    翻译: we employ ten sub-generators against one discriminator 百度的表现: ChatGPT的表现:

  10. 【转载】人工智能CAE仿真分析技术

    原文: https://cloud.tencent.com/developer/news/628731 AI与CAE相结合 CAE的本质是对复杂工程问题通过合理简化建立数学模型,并根据输入求得输出.深 ...