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 ...
随机推荐
- 学生成绩管理系统3.0(JSP+Servlet+MySQL)
源代码:戳这里! (2019-01-08 更新 惊讶于这么久了还有人看这个项目 于是把代码传到 github 了(辣鸡CSDN) https://github.com/G-lory/StudentAc ...
- Maven项目报错:Missing artifact****和ArtifactDescriptorException: Failed to read artifact descriptor for***和Cannot change version of project facet Dynamic web module to 2.5
一.关于Cannot change version of project facet Dynamic web module to 2.5 具体查看博客:http://blog.csdn.net/ste ...
- c++为什么要面向对象?
前言 c和c++的区别是什么?不可置否,最重要的就是c++的编程思想是面向对象,而c的编程思想是面向过程,这是它们的本质区别,如果你在使用c++编程时使用的还是面向过程的编程思想,那么还不如使用c,因 ...
- 学习之响应式Web设计---一个实例
周末闲来无事,做了一个响应式设计的例子.当然,由此并不能窥见响应式设计真谛之一斑.但,对于初次接触响应设计,对于响应式设计的概念依旧模糊不清的同学来说,或许是个启蒙! 闲语暂且不表,进入正题,这里没有 ...
- Maven setting配置镜像仓库
国内Maven镜像仓库值得收藏 1.配置IDE构建的Maven存放目录(解压目录) 2.配置IDE的User setting file路径,修改setting配置文件 配置本地仓库 <!-- ...
- Jenkins配置AD域认证
Jenkins配置AD域认证 #检测域控地址ping youad.com指向的IP #如果不是实际域控ip地址,则修改hosts vi /etc/hosts #192.168.100.100替换为实际 ...
- WINDOWS内核编程(一)Hello Drv的实现
我们开始编写第一个驱动程序,首先我们需要进行项目的创建,在以前的随笔中,我们已经学会了如何去建立双机调试环境. 我们打开VS2017,建立如图所示的项目,取名为:MyFirstDriver.点击确定 ...
- Nexus安装、使用说明 (转)
1. 为什么使用Nexus 如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下 载构件无疑加大了仓库的负载 ...
- Java并发编程笔记之基础总结(一)
一.线程概念 说到线程就必须要提一下进程,因为线程是进程中的一个实体,线程本身是不会独立存在的.进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程的一个执行路径,一 ...
- Docker---Run命令
docker运行在一个独立的隔离的进程中. 当用户执行dockerrun,它将启动一个有着独立的文件系统,独立的网络和独立的进程树的进程. 基本的docker run命令的格式: docker run ...