MailKit帮助类
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 > )//判断是否查询到邮件
{
//获取邮件头
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 = ; 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 = ;
context.Response.BinaryWrite(ms.GetBuffer()); context.Response.End();
}
}
}
MailKit帮助类的更多相关文章
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- 跨平台的.NET邮件协议MailKit组件解析
发起的.NET Core开源组织号召,进展的速度是我自己也没有想到的,很多园友都积极参与(虽然有些人诚心砸场子,要是以我以前的宝脾气,这会应该被我打住院了吧,不过幸好是少数,做一件事总有人说好,也有人 ...
- 创建基于MailKit和MimeKit的.NET基础邮件服务
邮件服务是一般的系统都会拥有和需要的功能,但是对于.NET项目来说,邮件服务的创建和使用会较为的麻烦..NET对于邮件功能提供了System.Net.Mail用于创建邮件服务,该基础服务提供邮件的基础 ...
- mailkit库收发邮件
mailkit库用于收发邮件.这个库可以替代C#自带的发邮件库 环境 W10 / VS2017CMMT / MailKit version="2.0.3" "net46 ...
- MailKit和MimeKit的.NET基础邮件服务
MailKit和MimeKit的.NET基础邮件服务 邮件服务是一般的系统都会拥有和需要的功能,但是对于.NET项目来说,邮件服务的创建和使用会较为的麻烦..NET对于邮件功能提供了System.Ne ...
- Asp.Net Core采用MailKit部署到Linux Docker连接邮件服务器报错
前段时间看文章了解到发邮件的SmtpClient已经过时了,微软官方推荐大家用其他解决方案,例如MailKit. https://docs.microsoft.com/zh-cn/dotnet/api ...
- 使用Volo.Abp.MailKit发送邮件
Volo.Abp.MailKit封装继承MailKit库,为Abp邮件发送提供了快捷实现. 邮箱配置 qq邮箱支持smtp功能,需要去申请开通.参考qq邮箱设置,最重要的是smtp发送邮件,qq邮箱对 ...
- NET 5 收发邮件之 MailKit
大家都用过SmtpClient来处理发送邮件的操作,不过这个类以及被标记已过时,所以介绍一个微软推荐的库MailKit来处理. MailKit开源地址:https://github.com/jsted ...
- C++ 可配置的类工厂
项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...
随机推荐
- [视频]K8飞刀 BadUSB Teensy自动种马演示教程
[视频]K8飞刀 Teensy USB自动种马演示教程 链接: https://pan.baidu.com/s/13bM1XSLrhlf90FDmPGfo1g 提取码: gy2q 源码:https:/ ...
- 关于ASP.Net Core Web及API身份认证的解决方案
6月15日,在端午节前的最后一个工作日,想起有段日子没有写过文章了,倒有些荒疏了.今借夏日蒸蒸之气,偷得浮生半日悠闲.闲话就说到这里吧,提前祝大家端午愉快(屈原听了该不高兴了:))!.NetCore自 ...
- Python 解析har 文件将域名分类导出
前言 作为程序员平时主要是使用 shadowsocks 作为代理工具的.shadowsocks 有个很明显的优点儿就是可以设置白名单和黑名单.白名单是会走shadowsocks的自动代理模式. 遇到的 ...
- jQuery校验文件格式及大小
一.html页面 <input type="file" name="file" id="uploadFileId" style=&qu ...
- 从零开始学 Web 之 移动Web(三)Zepto
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 高性能、高可用性Socket通讯库介绍 - 采用完成端口、历时多年调优!(附文件传输程序)
前言 本人从事编程开发十余年,因为工作关系,很早就接触socket通讯编程.常言道:人在压力下,才可能出非凡的成果.我从事的几个项目都涉及到通讯,为我研究通讯提供了平台,也带来了动力.处理socket ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十四):项目打包部署
项目打包部署 安装MySQL镜像 注意:如果使用docker镜像安装MySQL,也需要在前端部署主机安装MySQL,因为备份还原功能是使用MySQL的本地命令进行操作的. 下载镜像 执行以下命令,拉取 ...
- 和我一起打造个简单搜索之Logstash实时同步建立索引
用过 Solr 的朋友都知道,Solr 可以直接在配置文件中配置数据库连接从而完成索引的同步创建,但是 ElasticSearch 本身并不具备这样的功能,那如何建立索引呢?方法其实很多,可以使用 J ...
- 用Redis作Mysql数据库缓存
使用redis作mysql数据库缓存时,需要考虑两个问题: 1.确定用何种数据结构存储来自Mysql的数据; 2.在确定数据结构之后,用什么标识作为该数据结构的键. 直观上看,Mysql中的数据都是按 ...
- jQuery学习(2)ajax()使用
在上一篇分享JavaScript之使用AJAX(适合初学者)中,我们学习了如何在JavaScript中使用AJAX.由于jQuery出色的性能和简洁的写法,且它也支持AJAX的使用,所以,本次分享 ...