using MailKit.Net.Smtp;
using MimeKit;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

namespace ConsoleApp2
{
class EmailEntity
{

/// <summary>
/// 同步发送邮件
/// </summary>
/// <param name="email">邮箱</param>
/// <param name="subject">标题</param>
/// <param name="message">文本</param>
/// <param name="filesPath">附件路径集合</param>
/// <param name="IsPostFiles">是否上传附件</param>

public static void Send(string email, string subject, string message, List<string> filesPath, bool IsPostFiles=true)
{
var emailMessage = new MimeMessage();
//发件人
emailMessage.From.Add(new MailboxAddress("Name", email));

//收件人
emailMessage.To.Add(new MailboxAddress("名称", "*************@****.***"));
emailMessage.To.Add(new MailboxAddress("名称", "***************@****.***"));

//标题
emailMessage.Subject = subject;

//抄送
emailMessage.Cc.Add(new MailboxAddress("*************@****.***"));
emailMessage.Cc.Add(new MailboxAddress("*************@****.***"));
//附件

//正文
var html = new TextPart("html")
{
Text = message,
};
var alternative = new Multipart("alternative");
alternative.Add(html);

//附件
var multipart = new Multipart("mixed");
multipart.Add(alternative);
if (IsPostFiles)
{
IList<MimePart> multiPartList = GetMimePartList(filesPath);
foreach (var item in multiPartList)
{
multipart.Add(item);
}
}
emailMessage.Body = multipart;

using (var client = new SmtpClient())
{
try
{
client.Connect("smtp.qiye.163.com", 465, true);

//用指定邮箱发送  需要密码账户
client.Authenticate("发送邮件地址", "密码");

client.Send(emailMessage);
client.Disconnect(true);
}
catch (Exception ex)
{

throw;
}

}
}

/// <summary>
/// 异步发送邮件
/// </summary>
/// <param name="email">邮件地址</param>
/// <param name="subject">邮件主题</param>
/// <param name="message">邮件信息</param>
/// <param name="filesPath">文件路径</param>
/// <param name="IsPostFiles">是否提交文件</param>
/// <returns></returns>

public static async Task SendEmailAsync(string email, string subject, string message, List<string> filesPath, bool IsPostFiles = true)
{
try
{
var emailMessage = new MimeMessage();
//发件人
emailMessage.From.Add(new MailboxAddress("Name", "发件人地址"));

//收件人
// emailMessage.To.Add(new MailboxAddress("jiwei", "收件人地址"));
// emailMessage.To.Add(new MailboxAddress("haining", "收件人地址"));
emailMessage.To.Add(new MailboxAddress("LA", email));
//标题
emailMessage.Subject = subject;

//抄送
// emailMessage.Cc.Add(new MailboxAddress("抄送人邮件地址"));
// emailMessage.Cc.Add(new MailboxAddress("抄送人邮件地址"));

//附件

//正文
var html = new TextPart("html")
{
Text = message,
};
var alternative = new Multipart("alternative");
alternative.Add(html);

//附件
var multipart = new Multipart("mixed");
multipart.Add(alternative);
if (IsPostFiles)
{
if (filesPath.Count > 0)
{
IList<MimePart> multiPartList = GetMimePartList(filesPath);
foreach (var item in multiPartList)
{
multipart.Add(item);
}
}
}
emailMessage.Body = multipart;

using (var client = new SmtpClient())
{
await client.ConnectAsync("smtp.qiye.163.com", 465).ConfigureAwait(false);
await client.AuthenticateAsync("邮件发送指定邮箱地址", "邮箱密码");
await client.SendAsync(emailMessage).ConfigureAwait(false);
await client.DisconnectAsync(true).ConfigureAwait(false);
}
}
catch (Exception e)
{
Console.Write(e.Message);
}
}

/// <summary>
/// 读取上传的文件
/// </summary>
/// <returns></returns>
public static IList<MimePart> GetMimePartList(List<string> filePathss)
{
IList<MimePart> mimePartList = new List<MimePart>();
foreach (string filePath in filePathss)
{

var sw = new FileStream(filePath, FileMode.Open);
StreamReader mysr = new StreamReader(sw);
Stream stream = mysr.BaseStream;
MimePart attachment = new MimePart()
{

ContentObject = new ContentObject(stream, ContentEncoding.Default),
ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
ContentTransferEncoding = ContentEncoding.Base64,
FileName = Path.GetFileName(filePath)
};
mimePartList.Add(attachment);
}
return mimePartList;
}

}
}

.Net core-邮件发送(同步,异步)底层代码(欢迎留言讨论)的更多相关文章

  1. .Net Core邮件发送之MailKit

    一 .在.Net Core中MailKit中提供了邮件的基础封装 它支持跨平台,并且支持 IMAP, POP3, SMTP 等协议 Nuget命令: Install-Package MailKit 官 ...

  2. asp.net core 邮件发送

    由于core不带smpt 所以借助MimeKit 以163邮箱为例 var message = new MimeMessage ();message.From.Add (new MailboxAddr ...

  3. 用ASP.NET Core 1.0中实现邮件发送功能-阿里云邮件推送篇

    在上篇中用MailKit实现了Asp.net core 邮件发送功能,但一直未解决阿里云邮件推送问题,提交工单一开始的回复不尽如人意,比如您的网络问题,您的用户名密码不正确等,但继续沟通下阿里云客户还 ...

  4. Flask—04-文件上传与邮件发送(自带优化)

    文件上传与邮件发送 可以按照标题分别直接粘贴对应的文件夹,运行直接用: 原生上传 模板文件 <form method="post" enctype="multipa ...

  5. 用Python实现邮件发送Hive明细数据

    代码地址如下:http://www.demodashi.com/demo/12673.html 一.需求描述 客户需要每周周一接收特定的活动数据,生成Excel或是CSV文件,并通过邮件发送给指定接收 ...

  6. C# 短信发送 邮件发送

    兴趣是最好的老师. --爱因斯坦 一.实现短信发送 1.使用短信mao的方式进行短信发送,前提要购买硬件设备,这里就不考虑展示了: 2.使用中国网建提供的短信平台,但是用几次后要收费: 我们这里主要介 ...

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

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

  8. Slickflow.NET 开源工作流引擎基础介绍(十) -- 邮件轮询异步发送模块集成

    前言:在任务数据生成时,为了让办理任务的用户及时获取到待办任务的主题和内容,需要发送通知类的消息,而电子邮件和手机端的短信通知则是比较普通的消息发送.本文是针对电子邮件异步发送模块的实现来做实例说明. ...

  9. ActiveMQ入门系列之应用:Springboot+ActiveMQ+JavaMail实现异步邮件发送

    现在邮件发送功能已经是几乎每个系统或网址必备的功能了,从用户注册的确认到找回密码再到消息提醒,这些功能普遍的会用到邮件发送功能.我们都买过火车票,买完后会有邮件提醒,有时候邮件并不是买完票立马就能收到 ...

随机推荐

  1. 最新JetBrains PyCharm 使用教程--创建或导入项目(二)

    Python简介 Python是一种非常流行的开源编程语言.得益于无尽的模块选项,Python今天广泛用于脚本语言.Web开发.移动和桌面在许多领域.随着人工智能的复兴,数据科学的崛起,Python更 ...

  2. China .NET Conf 2019-.NET技术架构下的混沌工程实践

    这个月的8号.9号,个人很荣幸参加了China.NET Conf 2019 , 中国.NET开发者峰会,同时分享了技术专题<.NET技术架构下的混沌工程实践>,给广大的.NET开发小伙伴介 ...

  3. Docker学习-Kubernetes - 集群部署

    Docker学习 Docker学习-VMware Workstation 本地多台虚拟机互通,主机网络互通搭建 Docker学习-Docker搭建Consul集群 Docker学习-简单的私有Dock ...

  4. Flutter之环境配置与项目搭建

    Flutter之环境配置与项目搭建 一,介绍 1.1,Dart Dart 是一种 易于学习. 易于扩展.并且可以部署到 任何地方 的 应用 编程 语言.并且同时借鉴了Java和JavaScript.D ...

  5. Laravel 5 - 文件上传

    一.简介 Laravel 有很棒的文件系统抽象层,是基于 Frank de Jonge 的 Flysystem 扩展包. Laravel 集成的 Flysystem 提供了简单的接口,可以操作本地端空 ...

  6. 给大家整理了几个开源免费的 Spring Boot + Vue 学习资料

    最近抽空在整理前面的文章案例啥的,顺便把手上的几个 Spring Boot + Vue 的学习资料推荐给各位小伙伴.这些案例有知识点的讲解,也有项目实战,正在做这一块的小伙伴们可以收藏下. 案例学习 ...

  7. H5 - css3(学习c3的第一天)

    css3 中的转换:可以对元素进行移动.缩放.装懂.拉长或拉伸. 属性值:transform 每个浏览器的内核都不同,所以对应的前缀也不同,谷歌的是:  -webkit-  :  ie的是  -ms- ...

  8. oracle实现"limit"功能

    转载于http://blog.sina.com.cn/s/blog_67e2758d0100s3oc.html oracle数据库不支持mysql中limit功能,但可以通过rownum来限制返回的结 ...

  9. 注意android辅助服务事件不能用于保存

    本来希望把来自辅助服务的事件,像epoll那样暂存在队列进行调度,或者做成事件堆栈,从而将辅助服务事件加入到容器.但是一直不能达到预期的后果.最后才发现一个坑人的事实,辅助服务事件被释放(或者说重置) ...

  10. 在linux系统下进行pip升级注意事项

    今天鼓捣爬虫的时候需要用pip安装beautifulsoup4,但是出现了错误,说我的pip版本太低,需要升级一下.刚开始我用了下面这段代码: pip install --upgrade pip 显示 ...