MailKit

MailKit系列之---查询SearchQuery

   对于邮件的唯一Id查询,由于MailKit提供了大量的方法,无法完全讲解完全,所以这里只选择几个来介绍。

   MailKit通过方法folder.Search来查询邮件的唯一Id,参数是一个SearchQuery类型,SearchQuery提供:

   一、DeliveredAfter(DateTime date)、DeliveredBefore(DateTime date)、DeliveredOn(DateTime date)方法,通过邮件发送时间来查询邮件列表。

  二、BodyContains(string text)、BccContains(string text)、CcContains(string text)方法,通过包含字段来查询邮件列表。

  三、And(SearchQuery expr)、Or(SearchQuery expr)、Not(SearchQuery expr)方法,组合条件语句来组合查询语法。

ImapClient client = new ImapClient();
            string account = "admin";
            string passWord = "123456";

client.Connect("imap.163.com", 993,true);

client.Authenticate(account, passWord);

var folder = client.GetFolder("INBOX");

folder.Open(MailKit.FolderAccess.ReadOnly);

//组合查询语句
var uids = folder.Search(SearchQuery.DeliveredAfter(DateTime.Parse("2016-9-1")).And(SearchQuery.Flagged));

folser.Close();

状态更改和删除

    当我们拉取邮件列表,并展示邮件后需要打开邮件,同时标识本邮件状态为已读状态,或者我们直接删除邮件。下面介绍基本的应用。

    首先了解邮件的所有枚举状态:MailKit.MessageFlags包括:(None = 0,Seen = 1,Answered = 2,Flagged = 4,Deleted = 8,Draft = 16,Recent = 32,UserDefined = 64)。

    要操作文件夹需做如下动作:

     一、创建获取邮件客户端并连接到邮件服务器。

ImapClient client = new ImapClient();

client.Connect("mail.qq.com");

//带端口号和协议的连接方式
client.Connect("imap.126.com", 993, true);

二、验证登录信息,输入账号和密码登录。

1  string account = "admin";
2  string passWord = "123456";
3  client.Authenticate(account, passWord);

三、获取邮箱文件夹。默认的收件箱文件夹叫INBOX。

1  //获取所有的文件夹
2  List<IMailFolder> mailFolderList = client.GetFolders(client.PersonalNamespaces[0]).ToList();
3  
4  //只获取收件箱文件加
5  var folder = client.GetFolder("INBOX");

四、操作邮件状态或删除邮件。

//已读写的方式打开文件夹
folder.Open(FolderAccess.ReadWrite);

//获取大于2016-9-1时间的所有邮件的唯一Id
var uidss = folder.Search(SearchQuery.DeliveredAfter(DateTime.Parse("2016-9-1")));

//设置为已读状态
MessageFlags messageFlags = MessageFlags.Seen;

//bool silent=false;

//设置状态
mailFolder.SetFlags(uidss[0], mailFlags, silent);
//或者删除邮件
mailFolder.RemoveFlags(uidss[0], mailFlags, silent);

//主要针对Exchange 让删除指令执行
folder.Expunge();

//最后记得关闭文件夹
folder.Close();

获取邮件

    MailKit是一个免费开源的邮箱类库,简单来说MailKit帮我们封装了有关邮箱的一些帮助类,提供方法让我们更容易使用邮箱的Smtp,Imap等邮箱协议。

    现在的邮箱基本上都使用Imap协议从邮件服务器获取邮件到本地,原来的pop3协议已经很少使用了。这里只介绍Imap的方式。

从文件夹获取文件,获取文件允许两种方式:1、只获取邮件头;2、获取完整的邮件;

//打开文件夹并设置为读的方式
folder.Open(MailKit.FolderAccess.ReadOnly);

//获取大于2016-9-1时间的所有邮件的唯一Id
var uidss = folder.Search(SearchQuery.DeliveredAfter(DateTime.Parse("2016-9-1")));

//获取邮件头
folder.Fetch(uids, MessageSummaryItems.UniqueId | MessageSummaryItems.Full);

//获取完整邮件
foreach (var item in uidss ) {
                        MimeMessage message = folder.GetMessage(new UniqueId(item.Id));
                    }

五、不要忘记关闭打开的文件夹;

folder.close();
整合基本方法如下:
ImapClient client = new ImapClient();
            string account = "admin";
            string passWord = "123456";

client.Connect("imap.126.com", 993, true);

client.Authenticate(account, passWord);

var folder = client.GetFolder("INBOX");
folder.Open(MailKit.FolderAccess.ReadOnly);
                        var uidss = folder.Search(SearchQuery.DeliveredAfter(DateTime.Parse("2016-9-1")));

var ss = folder.Fetch(uidss, MessageSummaryItems.UniqueId | MessageSummaryItems.Full);
folser.close();

 

 

posted on 2018-02-08 23:05  武胜-阿伟  阅读(495)  评论(0编辑  收藏  举报