public class EmailHelp{/// <summary>/// Smtp服务器地址/// </summary>private static readonly string SmtpServer = ConfigurationManager.AppSettings["SmtpServer"];/// <summary>/// Pop服务器地址/// </summary>private static readonly string PopServer = ConfigurationManager.AppSettings["PopServer"];/// <summary>/// Imap服务器地址/// </summary>private static readonly string ImapServer = ConfigurationManager.AppSettings["ImapServer"];/// <summary>/// SMTP端口/// </summary>private static readonly int SmtpPort = int.Parse(ConfigurationManager.AppSettings["SmtpPort"]);/// <summary>/// POP端口/// </summary>private static readonly int PopPort = int.Parse(ConfigurationManager.AppSettings["PopPort"]);/// <summary>/// IMAP端口/// </summary>private static readonly int ImapPort = int.Parse(ConfigurationManager.AppSettings["ImapPort"]);/// <summary>/// 邮件发送/// </summary>/// <param name="mailFromAccount">发送邮箱账号</param>/// <param name="mailPassword">发送邮箱密码</param>/// <param name="message">邮件</param>public static void SendEmali(string mailFromAccount, string mailPassword, MimeMessage message){using (var client = new MailKit.Net.Smtp.SmtpClient()){client.Connect(SmtpServer, SmtpPort, false);// Note: since we don't have an OAuth2 token, disable// the XOAUTH2 authentication mechanism.client.AuthenticationMechanisms.Remove("XOAUTH2");// Note: only needed if the SMTP server requires authentication
                client.Authenticate(mailFromAccount, mailPassword);client.Send(message);client.Disconnect(true);}}/// <summary>/// 创建文本消息/// </summary>/// <param name="fromAddress">发件地址</param>/// <param name="toAddressList">收件地址</param>/// <param name="title">标题</param>/// <param name="content">内容</param>/// <param name="IsPostFiles">是否将POST上传文件加为附件</param>/// <returns></returns>public static MimeMessage CreateTextMessage(MailboxAddress fromAddress, IList<MailboxAddress> toAddressList, string title, string content, bool IsPostFiles = false){var message = new MimeMessage();message.From.Add(fromAddress);message.To.AddRange(toAddressList);message.Subject = title; //设置消息的主题var html = new TextPart("html"){Text = content,};var alternative = new Multipart("alternative");alternative.Add(html);var multipart = new Multipart("mixed");multipart.Add(alternative);if (IsPostFiles){IList<MimePart> multiPartList = GetMimePartList();foreach (var item in multiPartList){multipart.Add(item);}}message.Body = multipart;return message;}/// <summary>/// 收邮件/// </summary>/// <param name="mailFromAccount">发送邮箱账号</param>/// <param name="mailPassword">发送邮箱密码</param>/// <param name="searchQuery">查询条件</param>/// <param name="folderName">文件夹名称</param>/// <returns></returns>public static IList<IMessageSummary> ReceiveEmail(string mailFromAccount, string mailPassword, string folderName, SearchQuery searchQuery = null){//打开收件箱var folder = OpenFolder(mailFromAccount, mailPassword, folderName);//IList<OrderBy> orderByList = new List<OrderBy> { OrderBy.Date };//查询所有的邮件var uidss = folder.Search(searchQuery);IList<IMessageSummary> msgList = new List<IMessageSummary>();if (uidss.Count > 0)//判断是否查询到邮件
            {//获取邮件头msgList = folder.Fetch(uidss, MessageSummaryItems.UniqueId | MessageSummaryItems.Full);}folder.Close();return msgList;}/// <summary>/// 根据唯一号查询信件/// </summary>/// <param name="mailFromAccount">邮箱账号</param>/// <param name="mailPassword">邮箱密码</param>/// <param name="id">唯一号</param>/// <param name="folderName">文件夹名称</param>/// <returns></returns>public static MimeMessage GetEmailByUniqueId(string mailFromAccount, string mailPassword, uint id, string folderName){//打开收件箱var folder = OpenFolder(mailFromAccount, mailPassword, folderName);UniqueId emailUniqueId = new UniqueId(id);MimeMessage message = folder.GetMessage(emailUniqueId);/*将邮件设为已读*/MessageFlags flags = MessageFlags.Seen;folder.SetFlags(emailUniqueId, flags, true);return message;}/// <summary>/// 读取上传的文件/// </summary>/// <returns></returns>public static IList<MimePart> GetMimePartList(){IList<MimePart> mimePartList = new List<MimePart>();var current = HttpContext.Current;if (current != null){HttpRequest request = current.Request;HttpFileCollection files = request.Files;int filesCount = files.Count;for (int i = 0; i < filesCount; i++){HttpPostedFile item = files[i];MimePart attachment = new MimePart(item.ContentType){ContentObject = new ContentObject(item.InputStream, ContentEncoding.Default),ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),ContentTransferEncoding = ContentEncoding.Base64,FileName = item.FileName};mimePartList.Add(attachment);}}return mimePartList;}/// <summary>/// 打开邮箱文件夹/// </summary>/// <param name="mailFromAccount">邮箱账号</param>/// <param name="mailPassword">邮箱密码</param>/// <param name="folderName">文件夹名称(INBOX:收件箱名称)</param>/// <returns></returns>public static IMailFolder OpenFolder(string mailFromAccount, string mailPassword, string folderName){ImapClient client = new ImapClient();client.Connect(ImapServer, ImapPort);client.Authenticate(mailFromAccount, mailPassword);//获取所有文件夹//List<IMailFolder> mailFolderList = client.GetFolders(client.PersonalNamespaces[0]).ToList();var folder = client.GetFolder(folderName);//打开文件夹并设置为读的方式
            folder.Open(MailKit.FolderAccess.ReadWrite);return folder;}/// <summary>/// 下载邮件附件/// </summary>/// <param name="mimePart"></param>public static void DownFile(MimePart mimePart){HttpContext context = HttpContext.Current;// 设置编码和附件格式context.Response.ContentType = mimePart.ContentType.ToString();//context.Response.ContentEncoding = Encoding.UTF8;
context.Response.Charset = "";string fileName = HttpUtility.UrlEncode(mimePart.FileName, Encoding.UTF8);context.Response.AppendHeader("Content-Disposition","attachment;filename=" + fileName);using (MemoryStream ms = new MemoryStream()){mimePart.ContentObject.DecodeTo(ms);ms.Flush();ms.Position = 0;context.Response.BinaryWrite(ms.GetBuffer());context.Response.End();}}}

转载于:https://www.cnblogs.com/tangchun/p/6950899.html

MailKit帮助类相关推荐

  1. 自己搜集编写的Delphi 通用函数

    { ********************************************************************** } { Currency Common Functio ...

  2. .NetCore使用NETCore.MailKit发送邮件

    前言 平时工作中很少用到需要发邮件的功能,所以邮件这块的功能也没有太过关注.近期有一个项目需要接收用户的反馈,上边决定使用邮件,直接将反馈信息发送给领导,也就有了这篇文章.实现发邮件不难,但是开发中遇 ...

  3. .NET Core 使用MailKit发送电子邮件

    点击上方蓝字关注"汪宇杰博客" 发送邮件通知的功能在各种系统里都很常见.我的博客也能在有新评论.新回复,或者文章被其他网站引用时向管理员发送邮件.那么在.NET Core里,如何实 ...

  4. 创建基于MailKit和MimeKit的.NET基础邮件服务

    邮件服务是一般的系统都会拥有和需要的功能,但是对于.NET项目来说,邮件服务的创建和使用会较为的麻烦..NET对于邮件功能提供了System.Net.Mail用于创建邮件服务,该基础服务提供邮件的基础 ...

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

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

  6. 解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题

    在博问中(.net core怎么实现邮件发送)知道了MailKit无法使用阿里云邮件推送服务发送邮件的问题,自已实测也遇到同样的问题,而用自己搭建的邮件服务器没这个问题. 于是,向阿里云提交了工单.. ...

  7. vs基于控制台应用程序的定时发送邮件_.NET Core 下收发邮件之 MailKit

    利用代码发送邮件在工作中还是比较常见的,相信大家都用过SmtpClient来处理发送邮件的操作,不过这个类以及被标记已过时,所以介绍一个微软推荐的库MailKit来处理. MailKit开源地址:ht ...

  8. C# System.Net.Mail 类 使用465端口邮件不成功

    C# System.Net.Mail 类不支持465端口发送邮件 今天遇到特别恼人的bug,用System.Net.Mail 类 异步发送 邮件老是报错(我之前用python配置阿里云邮件服务,可以发 ...

  9. .NET CORE 下收发邮件之 MAILKIT

    背景 利用代码发送邮件在工作中还是比较常见的,相信大家都用过SmtpClient来处理发送邮件的操作,不过这个类以及被标记已过时,所以介绍一个微软推荐的库MailKit来处理. MailKit开源地址 ...

最新文章

  1. ECCV2020 最佳论文提名 | 流感知技术
  2. 使用Tensorflow实现残差网络ResNet-50
  3. Leetcode题库 744.寻找比目标字母大的最小字母(C实现)
  4. 微信小程序把玩(三十二)Image API
  5. java手机飞行模式_用了这么多年手机才知道,飞行模式还藏着这6个功能!太好用了...
  6. matlab电压稳定极限,电力系统电压稳定性的Matlab建模分析
  7. sap原因代码配置路径_如何根据SAP Table找到对应IMG配置?
  8. php 去除小数点后,php-删除两位小数点后的数字,而不舍入该值
  9. D 语言是否可作为入门级的编程语言?
  10. Android AbsoluteLayout 绝对布局
  11. 一个通用的单元测试框架的思考和设计06-实现篇-自动管理测试数据-如何临时关闭数据外键约束...
  12. github开源项目大集合
  13. C++程序解线性一次方程组
  14. 联想Lenovo拯救者 Legion R9000P 2021H 触控板失灵
  15. 基于Java的Minecraft游戏后端自定义插件 08VexView界面绘制与按钮和扩展VexView事件使用
  16. 聚沙成塔——VBA术语 (VBA Glossary)
  17. C#学习 - XML Serialization
  18. 世界各国电源插头插座形式
  19. 浅谈自然语言处理(NLP)和 自然语言理解(NLU)
  20. python皮卡丘字符打印代码,python画皮卡丘的代码

热门文章

  1. Linux通过端口号杀死指定进程
  2. etcd 笔记(02)— etcd 安装(apt 或 yum 安装 、二进制包安装、Docker 安装 etcd、etcd 前端工具etcdkeeper)
  3. 2022-2028年中国橡胶漆产业发展动态及未来趋势预测报告
  4. Redis 高级特性(1)—— 事务 过期时间 排序
  5. 【PyTorch学习笔记】4:在Tensor上的索引和切片
  6. list extend 和 append
  7. TVM darknet yolov3算子优化与量化代码的配置方法
  8. 华为4D成像雷达、智能驾驶平台MDC 810
  9. RADAR和LIDAR区别分析
  10. Laravel Dcat-admin 详情页多栏布局开发