C# Po3协议读取邮件内容遇到的问题

背景:最近在做一个小工具,读取PO3协议邮件服务器的指定人员的邮件,东西做出来了,弄了一个While死循环,20秒执行一次,

结果运行了3天,周一来IT人员找上门来了,你的电脑什么情况,怎么一个小时下载流量达到1个G多,而且都是PO3协议的,哈哈,哈哈

心理很想呵呵,但是还得如实跟他解释了一下情况,然后立刻把程序停止了。

接下来我就是找问题啦,最后找到了原因是因为我每次都是循环读取邮箱中的180条邮件,这180条中还有好多有几十兆附件的,哈哈

解决办法和问题原因:

问题就出现这循环读取以及读取过的内容里面,因为PO3协议不支持读取未读的邮件,或是说标记邮件为已读的。所以我当时只能从所有邮件中不断重复循环读取,

直到有新的需要的邮件进来,处理一下,继续循环。后来我找到了一个办法,POP3协议有一个UID的东西,每个邮件都是唯一的,每次都获取到邮箱所有邮件的UID,

然后保存到本地,下次用本地的和这个对比,有新的UID进来,只针对这个新的UID进行邮件读取,这样所有事就都解决了,流量也很小很小了。

我这里使用的是MailKit.dll,

开源的项目,在项目中用nuget一下DLL下载下来,nuget命令去官网看吧。

粘贴出来主要代码:

           IList<string> msgUids = client.GetMessageUids();
                    IList<string> notReadUids = new List<string>();
                    foreach (var item in msgUids)
                    {
                        if (!alreadySentMsgId.Contains(item))
                        {
                            notReadUids.Add(item);
                            sw.WriteLine(item);  //记录没有读取过的邮件的UID
                        }
                    }
                    if (notReadUids.Count != 0) //如果有未读过的邮件才进行读取及解析
                    {
                        IList<MimeMessage> notReadMessages = client.GetMessages(notReadUids);
}

 

posted @ 2016-01-27 13:16  收破烂  阅读(1818)  评论(3编辑  收藏  举报