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. DOM增删改替换

    一.在创建元素的时候为什么要把创建元素到也页面写到后面?   要求:创建一个div,在div中创建10个span. var div = document.createElement("div ...

  2. Java自学基础、进阶、项目实战网站推荐

    推荐一个自学的好平台,有Java基础,前端,后端,基础的内容都有讲解,还有框架的讲解和实战项目,特别适合自学 JAVA 自学网站 JAVA 练习题 Spring 教程 Mybatis 教程 Sprin ...

  3. js调用浏览器“打印”与“打印预览”

    用到html <object>标签,具体做法如下: 1.在html文档任意位置添加<object>标签: <div style="border: 1px sol ...

  4. chrome中安装Vue调试工具vue-devtools

    一.前言 vue-devtools是一款基于浏览器的插件,用来调试vue应用.本篇文章将要总结的是如何在chrome中安装Vue的调试工具vue-devtools. 首先能想到的第一种方法就是直接在c ...

  5. WordPress 去掉功能中的 wordpress.org

    WordPress 去掉功能中的 wordpress.org  

  6. pat 1108 Finding Average(20 分)

    1108 Finding Average(20 分) The basic task is simple: given N real numbers, you are supposed to calcu ...

  7. 力扣(LeetCode)找不同 个人题解

    给定两个字符串 s 和 t,它们只包含小写字母. 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母. 请找出在 t 中被添加的字母. 示例: 输入: s = "abcd&quo ...

  8. 在 Windows 上 安装 Oracle 11g Xe

    去oracle官网下载 https://www.oracle.com/database/technologies/xe-prior-releases.html 点击下载: Oracle Databas ...

  9. 拎壶学python3-----(5)python之格式化输出

    一.格式化输入可以减少代码开发量如下是格式化输出: 上边的%是什么意思呢?%是一个占位符,s代表字符串的类型. 二.我们看下边的例子 看使用%d %i的用法. %d %i 这种格式化只能用数字来填补占 ...

  10. python requirements.txt的创建及使用

    要求文件(requirements.txt)是安装包的依赖项及版本的记录文件. pip: 创建 (venv) $ pip freeze >requirements.txt 使用 (venv) $ ...