MailKit的项目地址:https://github.com/jstedfast/MailKit

使用:

1 定义发送邮件所需要的model或者dto,该model可根据个人的需要进行修改

 1   public class EmailRequest
2 {
3 /// <summary>
4 /// 邮件的发送者的邮箱
5 /// </summary>
6 [Required] public string From { get; set; }
7 /// <summary>
8 /// 邮件的发送者的邮箱登录密码或者授权码 这里用邮箱密码还是授权码视情况而定
9 /// </summary>
10 [Required] public string Password { get; set; }
11 /// <summary>
12 /// Smtp服务器
13 /// </summary>
14 [Required] public string SmtpServer { get; set; }
15 /// <summary>
16 /// Smtp服务器的端口
17 /// </summary>
18 [Required] public int SmtpPort { get; set; }
19 /// <summary>
20 /// 邮件发送者的昵称
21 /// </summary>
22 [Required] public string Nickname { get; set; }
23 /// <summary>
24 /// 邮件的接收者 的邮箱
25 /// </summary>
26 [Required]
27 public string ToAddress { get; set; }
28 /// <summary>
29 /// 邮件的文本消息 非必须
30 /// </summary>
31
32 public string TextBody { get; set; }
33 /// <summary>
34 /// 邮件中可以放html 请在这里传入组织好的html
35 /// </summary>
36 public string HtmlBody { get; set; }
37 /// <summary>
38 /// 邮件的主题
39 /// </summary>
40 [Required]
41 public string Subject { get; set; }
42 /// <summary>
43 /// 邮件的附件 数据格式是Attachment的集合 一个Attachment表示一个文件,可以添加多个文件
44 /// </summary>
45 public IEnumerable<Attachment> Attachments { get; set; }
46 }

2 邮件里可以传附件

附件的model如下:

 1 /// <summary>
2 /// 邮件附件的定义
3 /// </summary>
4 public class Attachment
5 {
6 /// <summary>
7 /// 附件的文件名 包含文件的扩展名,如 商品导入.xlsx。 方便如qq邮箱下载附件的时候 自动附上xlsx扩展名
8 /// </summary>
9 public string FileName { get; set; }
10 /// <summary>
11 /// 文件的流
12 /// </summary>
13 public Stream File { get; set; }
14
15
16 }

3 创建一个发送邮件的interface并实现

3.1 interface

1 public interface IAppEmailService
2 {
3 /// <summary>
4 /// 发送简单 带有附件的邮件
5 /// </summary>
6 /// <param name="emailRequest"></param>
7 /// <returns></returns>
8 Task SendAsync(EmailRequest emailRequest);
9 }

3.2 实现

 1 /// <inheritdoc />
2 public async Task SendAsync(EmailRequest emailRequest)
3 {
4 var message = new MimeMessage();
5 message.To.Add(new MailboxAddress(emailRequest.ToAddress, emailRequest.ToAddress));//收件人
6 message.From.Add(new MailboxAddress(emailRequest.Nickname, emailRequest.From));//发件人
7 message.Subject = emailRequest.Subject;
8
9 var builder = new BodyBuilder { TextBody = emailRequest.TextBody, HtmlBody = emailRequest.HtmlBody }; //
10
11
12 if (emailRequest.Attachments.Any())
13 {
14 foreach (var attachment in emailRequest.Attachments)
15 {
16 await builder.Attachments.AddAsync(attachment.FileName,attachment.File);
17 }
18 }
19
20
21 message.Body = builder.ToMessageBody();
22
23
24
25 using (var client = new MailKit.Net.Smtp.SmtpClient())
26 {
27 // client.MessageSent += (sender, args) => { };
28 // client.ServerCertificateValidationCallback = (s, c, h, e) => true;
29 await client.ConnectAsync(emailRequest.SmtpServer, emailRequest.SmtpPort,SecureSocketOptions.Auto);
30
31 // Note: since we don't have an OAuth2 token, disable
32 // the XOAUTH2 authentication mechanism.
33 client.AuthenticationMechanisms.Remove("XOAUTH2");
34
35 // Note: only needed if the SMTP server requires authentication
36 await client.AuthenticateAsync(emailRequest.From, emailRequest.Password);
37
38 await client.SendAsync(message);
39 await client.DisconnectAsync(true);
40 }
41 }

4 通过测试的几个邮箱平台

4.1 网易个人/VIP邮箱

准备工作:需要开启SMTP服务

该授权码对应 EmailRequest中的Password

网易个人邮箱/VIP邮箱的smtp地址:smtp.163.com

网易个人邮箱/VIP邮箱的smtp端口:  465

4.2 网易企业邮箱

网易企业邮箱不需要生成授权码,Password使用邮箱的登录密码即可

网易企业邮箱的smtp:smtp.ym.163.com

网易企业邮箱的smtp端口号:465

注意:网易企业邮箱的smtp不一定是smtp.ym.163.com,可以参考:https://qiye.163.com/help/client-profile.html

4.3 outlook个人邮箱

outlook个人邮箱smtp服务器是:smtp-mail.outlook.com

outlook个人邮箱smtp端口号是:587

Password是登录outlook邮箱的密码

4.4 QQ个人邮箱

QQ个人邮箱的流程类似网易个人邮箱,都需要生成授权码

QQ个人邮箱的smtp地址是:smtp.qq.com

QQ个人邮箱的smtp端口号是:465

QQ个人邮箱的Password是上面的申请的授权码

4.5 QQ企业邮箱

抱歉,由于手头没有QQ企业邮箱,所以没有测试。

5 结语

这篇随笔用的mailkit的版本是2.13.0,在.net framework 的老项目中使用是可以正常发送邮件的

mailkit还有许多设置选项和特性,本篇随笔只是涉及其中的一小部分,欲探索更多特性,还请参考项目的文档。

相关链接:https://www.thecodebuzz.com/mailkit-send-email-in-asp-net-core-3-1/

https://www.taithienbo.com/send-email-with-attachments-using-mailkit-for-net-core/

使用MailKit发送邮件的更多相关文章

  1. 使用 MimeKit 和 MailKit 发送邮件

    MimeKit 给.NET 社区带来了一流的 MIME 解析器,它能处理复杂的各种Mime, 性能好.而且开箱即用支持 S/MIME 和 PGP.MimeKit 和 MailKit 支持最新的国际化的 ...

  2. 使用Volo.Abp.MailKit发送邮件

    Volo.Abp.MailKit封装继承MailKit库,为Abp邮件发送提供了快捷实现. 邮箱配置 qq邮箱支持smtp功能,需要去申请开通.参考qq邮箱设置,最重要的是smtp发送邮件,qq邮箱对 ...

  3. JFinal项目发送邮件——jfinal-mail-plugin

    JFianl框架: JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java语言所有 ...

  4. 使用MailKit收发邮件

    .Net BCL库中对于邮件的支持只有SmtpClient一个,它只能进行简单的邮件的发送操作,并且不支持POP3和SMTP,无法接收邮件,用起来有诸多不便. 今天看到园子里有文章(使用 MimeKi ...

  5. Asp.Net Core 快速邮件队列设计与实现

    发送邮件几乎是软件系统中必不可少的功能,在Asp.Net Core 中我们可以使用MailKit发送邮件,MailKit发送邮件比较简单,网上有许多可以参考的文章,但是应该注意附件名长度,和附件名不能 ...

  6. MailKit/MimeKit 发送邮件

    MimeKit / MailKit 支持最新的国际化的电子邮件标准,是.NET 中为一个支持完整支持这些标准电子邮件库,最近正式发布了1.0版本.如果你想做所有与的电子邮件相关的事情,看看 MimeK ...

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

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

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

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:目前.NET Core 1.0中并没有提供SMTP相关的类库,那么要如何从ASP.NE ...

  9. .NET 通过SmtpClient发送邮件 提示 4.7.1 service unavailable try again later 解决办法

    最近用C#的SmtpClient发送电子邮件碰到这个错误: 正在处理错误. 服务器响应为:4.7.1 Service unavailable - try again later 换了其他的SMTP服务 ...

  10. 跨平台的.NET邮件协议MailKit组件解析

    发起的.NET Core开源组织号召,进展的速度是我自己也没有想到的,很多园友都积极参与(虽然有些人诚心砸场子,要是以我以前的宝脾气,这会应该被我打住院了吧,不过幸好是少数,做一件事总有人说好,也有人 ...

随机推荐

  1. vscode 终端中运行执行js文件

    问题汇总 1.在vscode中执行node -v没有反应或者执行js文件出现下图错误 解决办法: 1.先关闭vscode,找到vscode的执行文件,在兼容性中勾上以管理员身份运行此程序,该问题win ...

  2. SpringBoot_Thymeleaf项目开发

    用Springboot集成Thymeleaf,开发一个前后端不分离的Web项目,记录下每个步骤:(IDEA版) 一.项目初始化: 1.打开idea,以次点击 File -- New -- Projec ...

  3. OKHttp 之--------http/https协议处理方法 (Finn_ZengYuan博客)

    如果遇到okttp需要使用https协议,那么就需要在支持ssl,不说了,撸码搞起: 加入下面代码即可搞定:主要就是设置 builder.sslSocketFactory(sslParams.sSLS ...

  4. Vue + Element table的@select方法获取当table中的id值都相同时,获取他们索引

    先说下问题情况,原本通过双重forEach方法方法,遍历可以获取到被勾选中的索引. let arr = []val.forEach((val, index) => { this.TableDat ...

  5. ctp认证权限

    现象: /sys/firmware/dmi/tables/smbios_entry_point: Permission denied/dev/mem: Permission denied/sys/fi ...

  6. vue高级进阶( 三 ) 组件高级用法及最佳实践

      vue高级进阶( 三 ) 组件高级用法及最佳实践 世界上有太多孤独的人害怕先踏出第一步. ---绿皮书 书接上回,上篇介绍了vue组件通信比较有代表性的几种方法,本篇主要讲述一下组件的高级用法和最 ...

  7. python 查找文件夹下以特定字符开头的某类型文件 - os.walk

    Python os.walk() 方法 os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下.os.walk() 方法是一个简单易用的文件.目录遍历器,可以帮助我们高效的处 ...

  8. 巴恩斯利蕨 The Barnsley Fern

    巴恩斯利蕨学习链接 下面用R画一下: npts<-50000 point_mat<-matrix(data=NA,nrow=npts,ncol=2) list_fun<-list( ...

  9. git入门123

    一.新手上路 最重要的4招: 1. 初始化本地仓库 git init 或者 git clone 远程仓库地址 2.添加改动文件 git add 改动的文件名或者目录 偷懒的话可以直接 git add ...

  10. DELL品牌电脑开机显示supportASsiSt丨pre-Boot SyStem Proforman?

    这个问题,我百度了N个网站,得到的结果都是针对老版本BIOS的 https://wen.baidu.com/question/1647310335599401700.html https://zhua ...