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 ...
随机推荐
- 关于vue-router,路由重定向的使用分析
看之前的项目,突然发现一个不算bug的bug,之前也是一直没有想到,现在发现之后越来越觉得有必要改掉, 项目用的是vue做的,自然切换用的就是路由,一级路由包括:首页.记录和个人中心,二级路由是在记录 ...
- 边缘化搭建 DotNet Core 2.1 自动化构建和部署环境(上)
写在前面 写这篇文章的缘由是由于笔者的对新兴技术方向有所追求,但个人资产有限,只能容许购买一台阿里云低配1核2G服务器.服务器上搭建了 Centos7 & Docker & Jenki ...
- 从零开始学 Web 之 ES6(五)ES6基础语法三
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 一直性hash解决扩容后的hash算法不用变
转自: http://blog.codinglabs.org/articles/consistent-hashing.html 摘要 本文将会从实际应用场景出发,介绍一致性哈希算法(Consisten ...
- #14 Python模块
前言 前面的文章中,有许多地方都用到了Python的模块,这个到底是个什么神奇的东西呢?让我们来一起盘它! 一.什么是模块 在前几节中,我们已经接触了一些模块:math.random.time等,它们 ...
- C# GDI+编程之剖析startAngle和sweepAngle
以DrawArc为例,它有一种形式如下的构造函数 public void DrawArc(Pen pen, Rectangle rect, float startAngle, float sweepA ...
- python学习笔记02--列表和元组
一.简介 数据结构是通过某种方式组织在一起的数据元素的集合. 序列是python中最基本的数据结构,python中包含6种内建的序列,分别是列表.元组.字符串.Unicode字符串.buffer对象和 ...
- C# 获取用户IP地址(转载)
[ASP.NET开发]获取客户端IP地址 via C# 说明:本文中的内容是我综合博客园上的博文和MSDN讨论区的资料,再通过自己的实际测试而得来,属于自己原创的内容说实话很少,写这一篇是为了记录自己 ...
- ECMAScript 引用类型
Object对象 新建对象 var obj = new Object() var obj ={} var obj={age:23} ... hasOwnProperty(property) 方法 va ...
- JS window与document
开头语:嗯~~~~~~~~~ 正文如下 一.window window是Javascript中的最高级对象,它是document.location和history对象的父对象.正因为window是一个 ...