.NET CORE 下收发邮件之 MAILKIT
背景
利用代码发送邮件在工作中还是比较常见的,相信大家都用过SmtpClient来处理发送邮件的操作,不过这个类以及被标记已过时,所以介绍一个微软推荐的库MailKit来处理。
MailKit开源地址:https://github.com/jstedfast/MailKit
需要邮件功能
1、服务提供方:需提供邮件收发客户端或Web服务。如:QQ邮箱、GMail邮箱、126、163等知名邮件服务提供商。注:如果你使用的第三方不知名邮件服务商提供的邮件收发服务,通过其发出的邮件,可能会被其他知名邮件服务提供商的STMP服务器视为是"恶意邮件或垃圾邮件"!
2、消息推送:消息推送方
3、App:某些网站会员的注册功能或者功能激活功能。
协议
1、SMTP(Simple Mail Transfer Protocol) ---简单邮件传输协议
2、POP3(Post Office Protocol -Version3) ---邮局协议第三个版本
代码实现
1、新建项目 引用 MailKit
using MailKit.Net.Smtp;using MimeKit;
2、指定发件人、收件人、附件等信息
[HttpPost]
[Route("sendmail")]
public bool Sendmail(SendmailDto model)
{
string mailTo = model.mail;
string title = model.title;
string requestId = Guid.NewGuid().ToString("N");
string path = WriteFilepath(requestId, title + ".html", model.str);
string docpath = path.Replace(".html", ".docx");
try
{
string applicationRoot = AppContext.BaseDirectory;
var provider = new PhysicalFileProvider(applicationRoot);
string apath = @"C:/www/fengnan";
// string apath = @"C:/net6.0";
var filePath =
//applicationRoot +
apath + $"/Template/fldoc/" + requestId + "/";
var filePath2 =
//applicationRoot +
apath + $"/Template/fldoc/" + requestId + "/"
+ title + ".html";
ecmd("soffice --headless --convert-to docx:\"Office Open XML Text\" " + filePath2 + " --outdir " + filePath);
// string docpath = path.Replace(".html", ".docx");
}
catch (Exception ex)
{
_logger.Error(ex);
}
// string mailFrom = "xxxx@qq.com";
string mailFrom = "xxx@xx.net";
// mailTo = "xx@xxx.com";
string Text = "内容见附件,请查收<br/> 感谢";
////string mailFromAccount = "xxx@qq.com";
////string mailPassword = "xxxx";
string mailFromAccount = "xxx@xx.net";
string mailPassword = "xxxx@";
var contentRoot = Directory.GetCurrentDirectory();
var webRoot = Path.Combine(contentRoot, "wwwroot");
/// string path = Path.Combine(webRoot, "Images/icc.png");
// string path = @"D:\xxxx知.html";
// string Text = @"Hey Chandler,
//I just wanted to let you know that Monica and I were going to go play some paintball, you in?
//-- Joey";
Config eConfig = new Config
{ From = new MailAddress("xxxx", mailFrom),
// Host = "smtp.qq.com", Host = "smtp.exmail.qq.com", MailFromAccount = mailFromAccount, MailPassword = mailPassword,
// Port = 587, Port = 465, UseSsl = true, IsHtml = true
};
List<MailAddress> tos = new List<MailAddress>();
tos.Add(new MailAddress("", mailTo));
List<string> flist = new List<string>();
if (System.IO.File.Exists(docpath))
{
flist.Add(docpath);
//docpath
}
else
{
flist.Add(path);
}
Mailhelper.SendEmail(eConfig, tos, title, Text, flist.ToArray());
return true;
}
3、发邮件帮助类
using MimeKit;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;
namespace DFTech.Service.Filters
{
/// <summary>
/// 发邮件
/// </summary>
public class Mailhelper
{
/// <summary>
/// 发邮件
/// </summary>
/// <param name="config"></param>
/// <param name="tos"></param>
/// <param name="subject"></param>
/// <param name="message"></param>
/// <param name="attachments"></param>
/// <returns></returns>
public static void SendEmail(Config config, List<MailAddress> tos, string subject, string message, params string[] attachments)
{
var emailMessage = new MimeMessage();
emailMessage.From.Add((MailboxAddress)config.From);
foreach (var to in tos)
emailMessage.To.Add(to as MailAddress);
emailMessage.Subject = subject;
var alternative = new Multipart("alternative");
if (config.IsHtml)
alternative.Add(new TextPart("html") { Text = message });
else
alternative.Add(new TextPart("plain") { Text = message });
if (attachments != null)
{
foreach (string f in attachments)
{
var attachment = new MimePart()//("image", "png")
{
ContentObject = new ContentObject(File.OpenRead(f), ContentEncoding.Default),
ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
ContentTransferEncoding = ContentEncoding.Base64,
FileName = Path.GetFileName(f)
};
alternative.Add(attachment);
}
}
emailMessage.Body = alternative;
using (var client = new SmtpClient())
{
client.Connect(config.Host, config.Port, config.UseSsl);// SecureSocketOptions.None
client.AuthenticationMechanisms.Remove("XOAUTH2");
client.Authenticate(config.MailFromAccount, config.MailPassword);
client.Send(emailMessage);
client.Disconnect(true);
}
}
}
public class Config
{
public int Port { get; set; } = 25; //25
public string Host { get; set; } //smtp.hantianwei.cn
public bool IsHtml { get; set; } = true;
public bool UseSsl { get; set; } = false;
public string MailFromAccount { get; set; }//mail@hantianwei.cn
public string MailPassword { get; set; }
public MailAddress From { get; set; }
}
/// <summary>
///
/// </summary>
public class MailAddress : MailboxAddress
{
public MailAddress(string name, string address) : base(name, address)
{
}
public MailAddress(Encoding encoding, string name, string address) : base(encoding, name, address)
{
}
}
}
.NET CORE 下收发邮件之 MAILKIT的更多相关文章
- NET 5 收发邮件之 MailKit
大家都用过SmtpClient来处理发送邮件的操作,不过这个类以及被标记已过时,所以介绍一个微软推荐的库MailKit来处理. MailKit开源地址:https://github.com/jsted ...
- 打造终端下mutt收发邮件环境(fbterm,fetchmail,msmtp,procmail,mutt)
实现mutt下收发邮件须要安装,mutt,fbterm,fetchmail,msmtp,procmail 下面是各配置文件.在home文件夹下,隐私信息有马赛克... .muttrc : 当中Mail ...
- mailkit库收发邮件
mailkit库用于收发邮件.这个库可以替代C#自带的发邮件库 环境 W10 / VS2017CMMT / MailKit version="2.0.3" "net46 ...
- CentOS7下搭建邮件服务器(dovecot + postfix + SSL)
CentOS 花了基本上两天的时间去配置CentOS7下的邮件服务器.其中艰辛太多了,一定得总结下. 本文的目的在于通过一系列配置,在CentOS 7下搭建dovecot + postfix + ...
- 用 Apache James 搭建邮件服务器来收发邮件实践(一)(转)
Apache James 简称 James, 是 Java Apache Mail Enterprise Server的缩写.James 是100%基于Java的电子邮件服务器.它是一种独立的邮件服务 ...
- 跨平台的.NET邮件协议MailKit组件解析
发起的.NET Core开源组织号召,进展的速度是我自己也没有想到的,很多园友都积极参与(虽然有些人诚心砸场子,要是以我以前的宝脾气,这会应该被我打住院了吧,不过幸好是少数,做一件事总有人说好,也有人 ...
- 转--python -- 收发邮件
官方 import smtplib from email.mime.text import MIMEText from email.header import Header # 发送邮箱服务器 smt ...
- 在命令行上 使用 mutt, fetchmail, maildrop, msmtp 收发邮件
基于shell 现在已经有了 Mail.app, Thunderbird, Outlook 这些图形化工具能很方便的处理邮件,为啥还需要 mutt 这种命令行文本方式的邮件工具呢?mutt 的一个优势 ...
- java中javamail收发邮件实现方法
概述 1.邮件相关的标准 厂商所提供的 JavaMail 服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括: SMTP(Simple Mail Transfer Protocol) :即简单邮 ...
- 4.5 .net core下直接执行SQL语句并生成DataTable
.net core可以执行SQL语句,但是只能生成强类型的返回结果.例如var blogs = context.Blogs.FromSql("SELECT * FROM dbo.Blogs& ...
随机推荐
- QT程序自动寻找依赖的DLL
1.找到项目的生成目录,比如项目源码路径:E:\Qt\Login: 2.进入它的项目生成目录,拷贝出可执行程序,例如放置在 E:\QtApp中. 3.然后从开始菜单打开 Qt 命令行, a.输入命令 ...
- C#笔记誊录
1.继承 面向对象的三大特征: 封装性 继承性 多态性 一.继承:类与类的关系 为什么会用继承:减少代码重复 优化 空间内存 实现多态 class 基类 { //基类成员 } class 子类:基类 ...
- 2023-03-01 react-native 实现 复制功能 @react-native-community/clipboard 报错:TypeError: null is not an object (evaluating 'NativeClipboard_1.default.setString')。
我的react-native(下称rn)版本为0.68,要实现这个功能主要用到rn的clipboard,在21年的时候他就已经提示clipboard会在未来的版本中上去掉,官方的建议是不要再从reac ...
- Jmeter学习:文件类函数
一.__StringFromFile 功能介绍: 从文件中读取一行数据,所有线程共享行数,依次读取,默认路径为$JMETER_HOME/bin/ ${__StringFromFile(参数 1,参数 ...
- Quartz 2D CGGradient与CGShading实现渐变的绘制
Quartz 提供了两种不透明的数据类型来创建渐变CGShading 和 CGGradient,你可以使用其中任何一个来创建轴向或径向渐变. 轴向渐变:沿着一个轴方向线性渐变 径向渐变:一个点为原型, ...
- java工厂方法模式学习
简单工厂模式又称为静态工厂模式,实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例.简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体 ...
- argocd
argocd Argo CD - Declarative GitOps CD for Kubernetes (argo-cd.readthedocs.io) What Is Argo CD Argo ...
- MybatisPlus #{param}和${param}的用法详解
作用 mybatis-plus接口mapper方法中的注解(如@Select)或者xml(如)传入的参数是通过#{param}或者${param}来获取值. 区别 1.解析方式: #{param}:会 ...
- Java基础__06.注解和反射
注解 什么是注解? 1.注解:annocation,是从JDK5.0开始引进入的新技术. 2.注解的作用: 不是程序本身,可以对程序做出解释,这一点和注释一样: 可以被其他程序读取,这点是和注释的区别 ...
- 《Rust权威指南》学习笔记——8.通用集合类型
Rust通用集合类型 动态数组Vec 字符串String 和&str 哈希映射HashMap