大家都用过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的更多相关文章

  1. mailkit库收发邮件

    mailkit库用于收发邮件.这个库可以替代C#自带的发邮件库 环境  W10 / VS2017CMMT / MailKit version="2.0.3" "net46 ...

  2. DouNet学习_收发邮件

    一.收发邮件 --->第一步:发邮件首先要有发送者的邮箱地址和登录的密码才能发送 这些都写在APP里  不要写死 --->第二步:发邮件就要有网络,要添加net.Mail命名空间 要发送的 ...

  3. Outlook Express 收发邮件出现&quot;0x800CCC0F&quot;错误代码解决方法

    非常多网友在使用Outlook Express收发邮件的过程中,有时能够发送邮件,但出现不能接收信件的问题.每次在收邮件都会在某个地方停止不动,然后报超时,出现错误代码0x800CCC19或0x800 ...

  4. 用 Apache James 搭建邮件服务器来收发邮件实践(一)(转)

    Apache James 简称 James, 是 Java Apache Mail Enterprise Server的缩写.James 是100%基于Java的电子邮件服务器.它是一种独立的邮件服务 ...

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

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

  6. 用Emacs收发邮件

    使用Emacs,将尽可能多的工作放到Emacs中来完成,这样可以提高工作效率. 1.安装必要的LISP插件和程序 $sudo apt-get install stunnel4 $sudo apt-ge ...

  7. Python收发邮件

    发送邮件使用SMTP协议,接受POP3或IMAP: 创建邮件内容email模块,发送邮件smtplib模块.发送邮件比较简单,只需先创建SMTP对象,登录服务器后根据发收邮箱地址发送即可: POP3接 ...

  8. 转--python -- 收发邮件

    官方 import smtplib from email.mime.text import MIMEText from email.header import Header # 发送邮箱服务器 smt ...

  9. c#使用QQ邮箱的SSL收发邮件

    c#使用SMTP.QQ.COM的SSL验证时,收发邮件,请勿设置端口,代码如下: (1)虽然SSL端口是465,但是,在代码里,不能直接设置端口,很奇怪?挺奇怪,好吧腾讯SSL好像用的是587端口!! ...

随机推荐

  1. thinkPHP 无法加载控制器:Hello

    出现这种问题的情况下要看看: (1).控制器的名称是否写对,控制器的命名规范(别忘下class) 控制器的命名规则1.必须采用大驼峰的命名规则2.必须以Controller.class.php来结尾I ...

  2. Problem D. Country Meow 题解(三分套三分套三分)

    题目链接 题目大意 给你n(n<=100)个点,要你找一个点使得和所有点距离的最大值最小值ans 题目思路 一直在想二分答案,但是不会check 这个时候就要换一下思想 三分套三分套三分坐标即可 ...

  3. C语言精华——内存管理,很多学校学习不到的知识~

    在编写程序时,通常并不知道需要处理的数据量,或者难以评估所需处理数据量的变动程度.在这种情况下,要达到有效的资源利用--使用内存管理,必须在运行时动态地分配所需内存,并在使用完毕后尽早释放不需要的内存 ...

  4. 【JVM】jdk1.8移除方法区与metaspace

    转载:https://blog.csdn.net/aa747604141/article/details/52673582 https://www.jianshu.com/p/a6f19189ec62

  5. IB卡开启EIPOIB做虚拟化桥接使用

    步骤1:开启EiPOIB 编辑默认"no"为"yes" /etc/infiniband/openib.conf E_IPOIB_LOAD=yes 步骤2:重启h ...

  6. ios真机使用fixed定位页面滚动时fixed定位的元素也会跟着滚动

    到了ios真机APP中,页面向下滚动,fixed的元素也跟着滚,虽然最后它还是到了它该在的地方,但是它跟着滚动也很影响页面的流畅性和交互性好伐.

  7. Centos7配置阿里epel源|yum源

    这一步非常重要.重要.重要.在这解释一下源的概念,打个比方如果手机想获取一个软件,可以选择很多途径,如华为的华为商店,小米的应用商店,苹果的App store,源就相当于各种手机获取软件的商店.因为国 ...

  8. IdentityServer4系列 | 简化模式

    一.前言 从上一篇关于资源密码凭证模式中,通过使用client_id和client_secret以及用户名密码通过应用Client(客户端)直接获取,从而请求获取受保护的资源,但是这种方式存在clie ...

  9. moviepy音视频剪辑:TextClip.list(font)和search搜索字体报错UnicodeDecodeError:utf-8 codec cannott decode byte 问题

    ☞ ░ 前往老猿Python博文目录 ░ 在moviepy2.0.0.Dev版本中,执行如下语句: from moviepy.editor import * TextClip.search('gb', ...

  10. 第15.1节 PyCharm安装及使用

    一. 引言 在本章以前,所有老猿实现的代码都是基于Python自带的解释器IDLE来开发和执行的,很方便.消耗少,但进入PyQt图形界面开发以后,IDLE不能实现和PyQt的集成,且不能支持断点调试, ...