NET 5 收发邮件之 MailKit
大家都用过SmtpClient来处理发送邮件的操作,不过这个类以及被标记已过时,所以介绍一个微软推荐的库MailKit来处理。
MailKit开源地址:https://github.com/jstedfast/MailKit
新建一个控制台应用程序,将MailKit添加到项目中。
- Install-Package MailKit
新建一个IEmail接口。
- using MimeKit;
- using System.Threading.Tasks;
- namespace EmailDemo
- {
- public interface IEmail
- {
- /// <summary>
- /// 发送Email
- /// </summary>
- /// <param name="message"></param>
- /// <returns></returns>
- Task SendEmailAsync(MimeMessage message);
- }
- }
实现
- using MailKit.Net.Smtp;
- using MimeKit;
- using System.Collections.Generic;
- using System.Threading.Tasks;
- namespace EmailDemo
- {
- public class Email : IEmail
- {
- public async Task SendEmailAsync(MimeMessage message)
- {
- var host = "smtp.exmail.qq.com";
- var port = 465;
- var useSsl = true;
- var from_username = "123@meowv.com";
- var from_password = "...";
- var from_name = "测试";
- var from_address = "123@meowv.com";
- var address = new List<MailboxAddress>
- {
- new MailboxAddress("111","111@meowv.com"),
- new MailboxAddress("222","222@meowv.com")
- };
- message.From.Add(new MailboxAddress(from_name, from_address));
- message.To.AddRange(address);
- using var client = new SmtpClient
- {
- ServerCertificateValidationCallback = (s, c, h, e) => true
- };
- client.AuthenticationMechanisms.Remove("XOAUTH2");
- await client.ConnectAsync(host, port, useSsl);
- await client.AuthenticateAsync(from_username, from_password);
- await client.SendAsync(message);
- await client.DisconnectAsync(true);
- }
- }
- }
上面关于邮箱的账号密码服务器可以放在配置文件中,这里为了方便直接写了,演示了发送邮件到两个Email地址。
然后在Program.cs中使用依赖注入的方式调用。
- using Microsoft.Extensions.DependencyInjection;
- using MimeKit;
- using System;
- using System.Threading.Tasks;
- namespace EmailDemo
- {
- class Program
- {
- static async Task Main(string[] args)
- {
- IServiceCollection service = new ServiceCollection();
- service.AddSingleton<IEmail, Email>();
- var provider = service.BuildServiceProvider().GetRequiredService<IEmail>();
- var message = new MimeMessage
- {
- Subject = "我是邮件主题",
- Body = new BodyBuilder
- {
- HtmlBody = $"我是邮件内容,时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}"
- }.ToMessageBody()
- };
- await provider.SendEmailAsync(message);
- }
- }
- }
以上演示了在 .NET Core 中发送邮件的示例,同时利用MailKit也可以接收邮件,这里使用场景不多,如有需要可以参考MailKitGitHub代码示例。
通常发送邮件可以提前写好HTML模板,然后将关键内容做字符串替换,这样发出去的就是一个比较美观的邮件了。
MailKit还支持将图片作为数据内容发送出去。
- using Microsoft.Extensions.DependencyInjection;
- using MimeKit;
- using MimeKit.Utils;
- using System;
- using System.Threading.Tasks;
- namespace EmailDemo
- {
- class Program
- {
- static async Task Main(string[] args)
- {
- IServiceCollection service = new ServiceCollection();
- service.AddSingleton<IEmail, Email>();
- var provider = service.BuildServiceProvider().GetRequiredService<IEmail>();
- var path = "D:\\bg.jpg";
- var builder = new BodyBuilder();
- var image = builder.LinkedResources.Add(path);
- image.ContentId = MimeUtils.GenerateMessageId();
- builder.HtmlBody = $"当前时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss} <img src=\"cid:{image.ContentId}\"/>";
- var message = new MimeMessage
- {
- Subject = "带图片的邮件推送",
- Body = builder.ToMessageBody()
- };
- await provider.SendEmailAsync(message);
- }
- }
- }
先在本地准备一张图片,利用ContentId的方式嵌入在img标签中,成功将其发送出去。
NET 5 收发邮件之 MailKit的更多相关文章
- mailkit库收发邮件
mailkit库用于收发邮件.这个库可以替代C#自带的发邮件库 环境 W10 / VS2017CMMT / MailKit version="2.0.3" "net46 ...
- DouNet学习_收发邮件
一.收发邮件 --->第一步:发邮件首先要有发送者的邮箱地址和登录的密码才能发送 这些都写在APP里 不要写死 --->第二步:发邮件就要有网络,要添加net.Mail命名空间 要发送的 ...
- Outlook Express 收发邮件出现"0x800CCC0F"错误代码解决方法
非常多网友在使用Outlook Express收发邮件的过程中,有时能够发送邮件,但出现不能接收信件的问题.每次在收邮件都会在某个地方停止不动,然后报超时,出现错误代码0x800CCC19或0x800 ...
- 用 Apache James 搭建邮件服务器来收发邮件实践(一)(转)
Apache James 简称 James, 是 Java Apache Mail Enterprise Server的缩写.James 是100%基于Java的电子邮件服务器.它是一种独立的邮件服务 ...
- 跨平台的.NET邮件协议MailKit组件解析
发起的.NET Core开源组织号召,进展的速度是我自己也没有想到的,很多园友都积极参与(虽然有些人诚心砸场子,要是以我以前的宝脾气,这会应该被我打住院了吧,不过幸好是少数,做一件事总有人说好,也有人 ...
- 用Emacs收发邮件
使用Emacs,将尽可能多的工作放到Emacs中来完成,这样可以提高工作效率. 1.安装必要的LISP插件和程序 $sudo apt-get install stunnel4 $sudo apt-ge ...
- Python收发邮件
发送邮件使用SMTP协议,接受POP3或IMAP: 创建邮件内容email模块,发送邮件smtplib模块.发送邮件比较简单,只需先创建SMTP对象,登录服务器后根据发收邮箱地址发送即可: POP3接 ...
- 转--python -- 收发邮件
官方 import smtplib from email.mime.text import MIMEText from email.header import Header # 发送邮箱服务器 smt ...
- c#使用QQ邮箱的SSL收发邮件
c#使用SMTP.QQ.COM的SSL验证时,收发邮件,请勿设置端口,代码如下: (1)虽然SSL端口是465,但是,在代码里,不能直接设置端口,很奇怪?挺奇怪,好吧腾讯SSL好像用的是587端口!! ...
随机推荐
- python升级版本
前言 目前大部分使用的3.6或者3.7以及更低版本存在不少问题,随着python的更新很多问题得到修复并且具有更多新的功能. 更新 3.y.x版本升级到3.y.z 下载需要升级的exe安装包点击upg ...
- DevOps Workshop | 代码管理入门:基于代码扫描实现团队效率提升
CODING「DevOps Workshop 学习营地」持续火热进行中! 在这里,你可以轻松实践 DevOps 全流程.体验高效的云端开发.赢取精美礼品--第二期大奖「戴尔 U2718Q 显示器」将于 ...
- 【知识点】C/C++编码规范
为了提高我们写的代码的可读性,本文章说一下C/C++的编码规范. 一.源文件头部的注释 /******************************************************* ...
- 自动化运维工具之Puppet常用资源(二)
前文我们了解了部分puppet的资源的使用,以及资源和资源的依赖关系的定义,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14071459.html:今天我们继 ...
- java42
1.Random类 随机生成某个整数 Random r = new Random(); System.out.println(r.nextInt()); 伪随机数:第一次打印为随机,再次运行,数字将保 ...
- ④SpringCloud 实战:引入Hystrix组件,分布式系统容错
这是SpringCloud实战系列中第4篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...
- charles抓包使用
Proxy ---> Proxy Setting ---> HTTP Proxy (设置代理的端口) 设备和代理处于同一局域网,并在设备端配置IP,端口,然后监听请求. 抓取本机的请求
- 转:为什么说Python是最值得学习的编程语言
老猿作为一个老程序员,研究生毕业后就没有这么用心的学过一门新的语言,而今年4月开始学Python以来,疯狂的迷上了它,有时很想写一篇为什么要学Python的文章,可一直懒没动笔,今天看到博友" ...
- PyQt(Python+Qt)学习随笔:QTreeWidget树型部件中的QTreeWidgetItem项构造方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTreeWidget树型部件的项是单独的类对象,这个类就是QTreeWidgetItem. QTr ...
- js将秒数转换为时分秒格式
function secondToTimeStr(t) { if (!t) return; if (t < 60) return "00:" + ((i = t) < ...