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. STL库学习笔记(一)——什么是STL?

    小明是一个很牛逼的程序员,在国际标准化组织工作. 他现在正在设计新一代的C++标准,标准中有一个待实现的函数:findMax(),这个函数要求使用者输入任何类型的数据,他都能找到最大的一个. 于是他想 ...

  2. 使用Typescript重构axios(五)——实现基础功能:处理请求的header

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  3. systemd 服务管理编写

    1.编辑服务管理脚本 $ cat /lib/systemd/system/kafka.service [Unit] Description=Kafka Server Documentation=htt ...

  4. linux中dd相关命令骚操作

    一.dd如何快速将磁盘写满 方法一: dd if=/dev/zero of=/tmp/file bs=1G count=10 # 参数解释 1. if=文件名:输入文件名,缺省为标准输入.即指定源文件 ...

  5. PHP-PSR 现代PHPer的开发规范

    PSR是PHP Standards Recommendation的简称,意为PHP推荐标准.要想了解PSR,首先得知道制定这一标准的人/组织是谁————PHP-FIG. PHP-FIG PHP-FIG ...

  6. SpringSecurity系列之自定义登录验证成功与失败的结果处理

    一.需要自定义登录结果的场景 在我之前的文章中,做过登录验证流程的源码解析.其中比较重要的就是 当我们登录成功的时候,是由AuthenticationSuccessHandler进行登录结果处理,默认 ...

  7. [UWP]通过自定义XamlCompositionBrushBase实现图片平铺

    1. 什么是XamlCompositionBrushBase 我早就想试试自定义XamlCompositionBrushBase,但一直没机会.上一篇文章介绍到使用Win2D的BorderEffect ...

  8. nyoj 67-三角形面积 (海伦公式, 叉积)

    67-三角形面积 内存限制:64MB 时间限制:3000ms 特判: No 通过数:8 提交数:13 难度:2 题目描述: 给你三个点,表示一个三角形的三个顶点,现你的任务是求出该三角形的面积 输入描 ...

  9. 《JAVA 程序员面试宝典(第四版)》之循环、条件、概率

        分享内容:关于集合的使用   书页号码:77页 题目:一个字符串中包含a~z中的多个字符,如有重复,如String data = "aavzcadfdsfsdhshgwasdfasd ...

  10. java中的string对象深入了解

    这里来对Java中的String对象做一个稍微深入的了解. Java对象实现的演进 String对象是Java中使用最频繁的对象之一,所以Java开发者们也在不断地对String对象的实现进行优化,以 ...